我有一个绑定到gl_texture_external_oes格式的表面纹理。它在直接渲染方面表现良好。
现在我要分手了 片段着色器为2并对其间的2D纹理进行屏幕外渲染。 我可以做到;但有一个问题。 假设我想在第一个着色器中进行RGB-YUV转换,然后在第二个着色器中进行YUV-RGB转换。 (只是一个例子)
我的2道次着色器看起来像这样。
private final String mFragmentShader1 =
"#extension GL_OES_EGL_image_external : require\n" +
"precision mediump float;\n" +
"varying vec2 vTextureCoord;\n" +
"uniform samplerExternalOES sTexture;\n" +
"void main() {\n" +
" vec2 texCoord = vec2(vTextureCoord.x, vTextureCoord.y);\n" +
" vec4 p11 = texture2D(sTexture, texCoord);\n" +
" float y = dot(p11.rgb,rgb2y);\n" +
" float u = dot(p11.rgb,rgb2u);\n" +
" float v = dot(p11.rgb,rgb2v);\n" +
" vec3 yuv = vec3(y,u,v);\n" +
" gl_FragColor = vec4(yuv,0.0);\n" +
"}\n";
private final String mFragmentShader2 =
"precision mediump float;\n" +
"varying vec2 vTextureCoord;\n" +
"uniform sampler2D sTexture;\n" +
"void main() {\n" +
" vec4 p11 = texture2D(sTexture, vTextureCoord);\n" +
" gl_FragColor = vec4(dot(yuv2r,p11.rgb),dot(yuv2g,p11.rgb),dot(yuv2b,p11.rgb),0.0);\n" +
"}\n";
我的问题是:
我在第二个着色器中通过p11获得的yuv数据是正确的。但gl_fragcolor是错误的。
与直接渲染相比,错误意味着 价值观不同。 (在直接渲染中,我在一个着色器本身中执行RGB-YUV然后YUV-RGB)。我认为我的gl_fragcolor混合了 来自第一个着色器的值。
有人能看到我在这里缺少的东西吗?谢谢你的阅读。
答案 0 :(得分:0)
我认为我的gl_fragcolor与第一个着色器或其他东西的值混合在一起。
你开启了混合吗?您已将alpha设置为零,因此如果您这样做,您的新颜色将不可见。