使用OpenGL'Mix'功能的简单着色器不起作用

时间:2017-11-03 15:40:24

标签: android opengl-es shader

我有一个简单的着色器代码。 我传入两个图像纹理(注意:一个是samplerExternalOES,另一个是sampler2D)。

第一个纹理'sTexture'是我从相机框架获得的原始图像。 第二个纹理'sTexture2'是我从cpu获得的一个掩码。

着色器如下:

uniform samplerExternalOES sTexture;
uniform sampler2D sTexture2;
varying vec2 v_TexCoord;

void main(void)
{
    vec4 originalrgb = vec4((texture2D(sTexture, v_TexCoord).rgb), 1.0);
    vec4 floodfillimage = vec4((texture2D(sTexture2, v_TexCoord).rgb), 1.0);

    /*Code To Colour Input Image with Blue Tint Color*/
    vec4 c = vec4(0.0, 1.0, 1.0, 1); 
    vec4 inputColor = vec4((texture2D(sTexture, v_TexCoord).rgb), 1.0);
    float average = (inputColor.r + inputColor.g + inputColor.b) / 3.0;
    vec4 grayscale = vec4(average, average, average, 1.0);
    vec4 colorizedOutput = grayscale * c ;

    /*Code To mix original image with blue coloured based on another floodfilledimage passed in */
    gl_FragColor = mix(originalrgb.rgba, colorizedOutput.rgba, floodfillimage.r);
}

我收到的错误是glerror 1282,这意味着GL_INVALID_OPERATION。我已经调试并发现这种情况发生在混合功能线上。

注意: 如果我将最后一行更改为gl_FragColor = mix(originalrgb.rgba, colorizedOutput.rgba, 0.5);,则可以。

那么,为什么当我使用floodfillimage.r时,代码会出现恐慌?

谢谢。

修改 我测试了传入的两个纹理(即,我只是将它们渲染到gl_FragColor),它们都是他们认为的图像

1 个答案:

答案 0 :(得分:0)

着色器看起来合法,并且可以成功编译各种离线编译器,因此我怀疑您在使用的设备上遇到了驱动程序错误。