2016-04-19 2 views
0

У меня есть текстура поверхности, привязанная к 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-го шейдера или что-то в этом роде.

Может ли кто-нибудь увидеть, чего я здесь не вижу? Спасибо за прочтение.

ответ

0

Я думаю, что мой gl_fragcolor смешивается со значением от 1-го шейдера или чего-то еще.

Включены ли наложения? Вы установили альфа ноль, так что если вы сделаете свой новый цвет, не будет видно.

Смежные вопросы