2017-11-03 1 views
-1

シンプルなシェーダコードがあります。 2つの画像テクスチャを渡します(注:1つはsamplerExternalOES、もう1つはsampler2Dです)。OpenGLの 'Mix'関数を使用したシンプルなシェーダが動作しない

最初のテクスチャ 'テクスチャ'は、カメラフレームから取得した元のイメージです。 2番目のテクスチャ 'テクスチャ2'は、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); 
} 

私が受け取るエラーがGL_INVALID_OPERATIONを意味glerror 1282、です。私はデバッグして、これがミックス関数の行で起こることを発見しました。

注:私はgl_FragColor = mix(originalrgb.rgba, colorizedOutput.rgba, 0.5);への最後の行を変更した場合、それが動作

なぜ、floodfillimage.rを実行するとコードがパニックになるのですか?

ありがとうございます。私は渡された両方のテクスチャをテストしてみた(つまり、私はちょうどgl_FragColorにそれらをレンダリング)し、それらの両方は、それらがシェーダ

+1

['glGetShaderiv(shaderObj、GL_COMPILE_STATUS、&status)'](https://www.khronos.org/registry/OpenGL-Refpages/es3.0/html/glGetShaderiv.xhtml)と[' glGetShaderInfoLog'](https://www.khronos.org/registry/OpenGL-Refpages/es3.0/html/glGetShaderInfoLog.xhtml) – Rabbid76

+1

どのGPUを使用していますか? – solidpixel

+0

私はAndroidデバイス上でOpenGLを使用しています。 – MainUser23312

答えて

0

すると仮定している画像は、私とコンパイルに法的に見えている

EDIT さまざまなオフラインコンパイラでうまくいくので、使用しているデバイスでドライバのバグが発生した可能性があります。

+0

samplerExternalOESとsampler2Dが原因である可能性がありますか?私はAndroidのデバイスでこれをやっています – MainUser23312

+0

それは何かのためにできるドライバのバグの場合... – solidpixel

+0

どうすれば私は確かにドライバのバグを知ることができますか? @solidpixel – MainUser23312

関連する問題