Android GLES20.glBlendEquation无效?

时间:2011-10-20 20:20:34

标签: android opengl-es-2.0 pixel-shading

我一直试图制作一款具有深度和法线贴图纹理的2.5D引擎,现在已有几周了,与此处使用的Linky不同。在认为由于ES 2.0缺少gl_fragDepth变量后,从纹理中在片段着色器中绘制深度图是不可能的,我找到了iOS教程,他们使用glBlendEquation和模式GL_MIN / GL_MAX来“伪造”片段的深度缓冲到帧缓冲区纹理Linky。不幸的是,GLES20.glBlendEquation使我的手机(SGS 1/2)上的应用程序崩溃,并且出现UnsupportedOperationException。所以我想知道是否有人使用此功能取得任何成功? Android Opengl ES 2.0规范中似乎也缺少GL_MIN / GL_MAX,所以我可能在这里运气不好...... 有什么想法吗?

BTW它似乎在GL11Ext中有效,但由于我使用片段着色器进行法线贴图,这对我不起作用。

1 个答案:

答案 0 :(得分:1)

我正在试验我的Vega平板电脑(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。