2013-03-13 12 views
5

GL_TEXTURE0(テクスチャ0のテクスチャ)の後のテクスチャはすべて黒です。OpenGL 3.3マルチテクスチャ:GL_TEXTURE1以降は常に黒です(GL_TEXTURE0のみ正常)

フラグメントシェーダ(サンプルコードでは、重みを変更することにより、異なるテクスチャをチェックする):

#version 330 

uniform sampler2D g_ColorTex; 
uniform sampler2D g_DepthTex; 
uniform sampler2D g_DofNearBlurTex; 
uniform sampler2D g_DofDownBlurTex; 

in vec4 g_VertexPosition; 
in vec2 g_ScreenCoords; 

layout (location = 0) out vec4 FragColor; 

void main() 
{ 
    // Changing weights to check textures 
    FragColor = 1.00001f * vec4(texture(g_ColorTex  , g_ScreenCoords).rgb, 1.0f); 
    FragColor += 0.00001f * vec4(texture(g_DepthTex  , g_ScreenCoords).rgb, 1.0f); 
    FragColor += 0.00001f * vec4(texture(g_DofNearBlurTex, g_ScreenCoords).rgb, 1.0f); 
    FragColor += 0.00001f * vec4(texture(g_DofDownBlurTex, g_ScreenCoords).rgb, 1.0f); 
} 

私はそのようなテクスチャ(抜粋!)をアップロードします。

::glUseProgram(ShaderHandle); 

unsigned int TextureIndex; 


TextureIndex = ::glGetUniformLocation(ShaderHandle, "g_ColorTex"); 

::glUniform1i(TextureIndex, 0); 

::glActiveTexture(GL_TEXTURE0); 

::glBindTexture(GL_TEXTURE_2D, TextureHandle); 

::glBindSampler(GL_TEXTURE0, SamplerHandle); 


TextureIndex = ::glGetUniformLocation(ShaderHandle, "g_DepthTex"); 

::glUniform1i(TextureIndex, 1); 

::glActiveTexture(GL_TEXTURE1); 

::glBindTexture(GL_TEXTURE_2D, TextureHandle); 

::glBindSampler(GL_TEXTURE1, SamplerHandle); 


TextureIndex = ::glGetUniformLocation(ShaderHandle, "g_DofNearBlurTex"); 

::glUniform1i(TextureIndex, 2); 

::glActiveTexture(GL_TEXTURE2); 

::glBindTexture(GL_TEXTURE_2D, TextureHandle); 

::glBindSampler(GL_TEXTURE2, SamplerHandle); 


TextureIndex = ::glGetUniformLocation(ShaderHandle, "g_DofDownBlurTex"); 

::glUniform1i(TextureIndex, 3); 

::glActiveTexture(GL_TEXTURE3); 

::glBindTexture(GL_TEXTURE_2D, TextureHandle); 

::glBindSampler(GL_TEXTURE3, SamplerHandle); 

//... 

::glDrawElements(GL_TRIANGLES, Mesh->m_Indices.size() * 3, GL_UNSIGNED_INT, 0); 

私は、テクスチャスロットおよびアップロードを変更しようとしました私はGL_TEXTURE0でテクスチャを使用するまでは常に黒い画面が表示されます。

+2

を:あなたは 'と' ::すべての機能を接頭辞にする必要はありません。 –

答えて

6
::glBindSampler(GL_TEXTURE0, SamplerHandle); 

これは間違っています。 テクスチャイメージユニットインデックスで、列挙型ではありません。これは0で、GL_TEXTURE0ではありません。

次のようにこれを処理するための最良の方法は次のとおりです。

FYI
glUniform1i(TextureIndex, index); 
glActiveTexture(GL_TEXTURE0 + index); 
glBindTexture(GL_TEXTURE_2D, TextureHandle); 
glBindSampler(index, SamplerHandle); 
+0

ありがとうございます。これは問題を解決するようです。 –

関連する問題