У меня есть текстура поверхности, привязанная к gl_texture_external_oes формате. Он хорошо работал на прямом рендеринге.Офсетное текстурирование в шейдерах
Теперь я хочу разделить мой шейдер на 2 и сделать промежуточную визуализацию для 2D-текстуры между ними. Я мог бы это сделать; но с проблемой. Предположим, я хочу преобразовать RGB-YUV в первый шейдер, а затем преобразовать YUV-RGB во 2-й шейдер. (только пример)
Мои 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";
Моя проблема:
данные YUV, которые я получаю через p11 в 2 шейдера правильно. Но gl_fragcolor ошибочен.
Неверные средства при сравнении с прямым визуализацией значения отличаются. (В прямом рендеринге я делаю RGB-YUV, а затем YUV-RGB в одном шейдере). Я думаю, что мой gl_fragcolor смешивается с значением с 1-го шейдера или что-то в этом роде.
Может ли кто-нибудь увидеть, чего я здесь не вижу? Спасибо за прочтение.