2011-10-20 66 views
5

我一直試圖用深度和正常地圖紋理製作一個2.5D引擎幾個星期,這與Linky中使用的不同。認爲由於ES 2.0缺少gl_fragDepth變量而無法從紋理中繪製片段着色器中的深度圖之後,我找到了iOS教程,其中他們使用glBlendEquation和GL_MIN/GL_MAX模式來「僞造」片段的深度緩衝到幀緩衝紋理Linky。不幸的是,GLES20.glBlendEquation使得我的手機(SGS 1/2)上的應用程序崩潰,並導致UnsupportedOperationException異常。所以林想知道是否有人使用這個功能取得任何成功? GL_MIN/GL_MAX也似乎從Android Opengl ES 2.0規範中丟失,所以我可能在這裏運氣不好...... 有沒有想法?Android GLES20.glBlendEquation不工作?

順便說一句它似乎在GL11Ext工作,但由於我使用片段着色器的正常映射這不會從我工作。

+0

你有沒有找到這個解決方案? – Jave

+0

@jave不,我沒有進一步研究過這個,也沒有任何論壇上有任何反饋。所以我的假設是,它不是在Android OpenGL ES 2.0中實現的。也許這已經在新版本的操作系統中得到修復?我使用android操作系統v2.3測試了這個。 – 2011-12-14 12:46:48

+0

好的,幾天前我自己遇到了這個問題,但是也沒有找到解決方案。 (順便使用Android 2.2)。如果你確實解決了這個問題,我想看看你是如何做到的。 – Jave

回答

1

我嘗試了我的維加平板電腦(Tegra的)這個工作對我來說:

片段着色器:

#extension GL_NV_shader_framebuffer_fetch : require 
// makes gl_LastFragColor accessible 

precision highp float; 

varying vec2 v_texcoord; 

uniform sampler2D n_sampler; 

void main() 
{ 
    vec4 v_tex = texture2D(n_sampler, v_texcoord); 
    gl_FragColor = min(gl_LastFragColor, v_tex); // MIN blending 
} 

很容易,是吧?但我擔心這隻會是NV。