【问题标题】:Offscreen texturing in shaders着色器中的离屏纹理
【发布时间】:2016-04-19 12:31:23
【问题描述】:

我有一个绑定到 gl_texture_external_oes 格式的表面纹理。它在直接渲染上运行良好。

现在我想拆分我的 片段着色器到 2 并在两者之间对 2D 纹理进行离屏渲染。 我可以做到;但有一个问题。 假设我想在第一个着色器中进行 RGB-YUV 转换,然后在第二个着色器中进行 YUV-RGB 转换。 (只是一个例子)

我的 2 pass 着色器看起来像这样。

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 与 来自第一个着色器或其他东西的值。

任何人都可以看到我在这里缺少什么。?感谢阅读。

【问题讨论】:

    标签: opengl-es fragment-shader render-to-texture


    【解决方案1】:

    我认为我的 gl_fragcolor 与来自第一个着色器或其他东西的值混合在一起。

    您是否打开了混合功能?您已将 alpha 设置为零,因此如果您这样做,您的新颜色将不可见。

    【讨论】:

      猜你喜欢
      • 2020-09-06
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      • 2011-09-22
      • 2012-02-07
      • 2017-03-28
      相关资源
      最近更新 更多