2017-02-27 6 views
0

を使用することはできませんQOpenGLWidgetは、私は非常に基本的なシェーダを作成した複数のsampler2D

"#version 150\n" 
"uniform sampler2D textureSampler;\n" 
"uniform sampler2D maskSampler;\n" 
"in mediump vec2 texc;\n" 
"out highp vec4 fragColor;\n" 
"void main() {\n" 
" fragColor = texture2D(textureSampler, texc.st);\n" 
" fragColor.x = texture2D(maskSampler, texc.st).x;\n" 
" fragColor.y =0;\n" 
"}\n"; 

それはありません

QOpenGLFunctions *f =this->context()->functions(); 
f->glActiveTexture(GL_TEXTURE0); 
glBaseTexture->bind(); 
m_program->setUniformValue("textureSampler", 0); 
0123:私のように最初のテクスチャをバインド両方のケースで

:仕事はそれが何の警告もないエラーが発生していません

と第二のテクスチャは次のようにバインドされます:私は最初のシェーダのためglMaskTextureをバインドする場合、問題はそのQOpenGlTextureにないので、それはOKに動作することを

f->glActiveTexture(GL_TEXTURE1);  
glMaskTexture->bind(); 
m_program->setUniformValue("maskSampler", 1); 

注意してください。

前もって感謝します!

+0

'glBaseTexture'はQOpenGLTextureですか? – peppe

+0

はい、glBaseTextureとglMaskTextureの両方がQOpenGLTextureポインターです –

+1

貼り付けたコードが正しいように見えますが、問題は貼り付けられなかったコードにある可能性があります。これをApitraceまたは他のトレーサに入れて、描画を呼び出す前にGLの状態を確認することをお勧めします。 – peppe

答えて

0

ゴブリンズ:他の名前にマスクサンプラーをリネームしても問題ありません。「マスクサンプラー」はコードの他の部分では使用されていないので、なぜこのようなことが起こっているのか分かりません。

関連する問題