シンプルなシェーダコードがあります。 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にそれらをレンダリング)し、それらの両方は、それらがシェーダ
['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
どのGPUを使用していますか? – solidpixel
私はAndroidデバイス上でOpenGLを使用しています。 – MainUser23312