2016-04-19 10 views
0

私は、gl_texture_external_oesフォーマットにバインドされたサーフェステクスチャを持っています。直接レンダリングでうまくいきました。シェーダでのオフスクリーンテクスチャ付け

今度は、 フラグメントシェーダを2に分割し、その間に2次元テクスチャにオフスクリーンレンダリングを行いたいとします。 私はそれを行うことができました。しかし、問題がある。 最初のシェーダでRGB-YUV変換を行い、2番目のシェーダで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は間違っています。

の値が異なる直接レンダリングと比較すると間違った意味です。 (直接レンダリングでは、1つのシェーダ自体でRGB-YUV、次にYUV-RGBを行います)。私はgl_fragcolorが1番目のシェーダなどから 値と混ざっていると思います。

私がここで紛失しているものは誰でも見ることができますか?読んでくれてありがとう。

答えて

0

私のgl_fragcolorは1番目のシェーダなどの値と混ざっていると思います。

ブレンディングがオンになっていますか?アルファを0に設定しているため、新しい色は表示されません。

関連する問題