2013-03-13 20 views
5

GL_TEXTURE0 이후의 모든 텍스처 (슬롯 0의 텍스처)는 검정입니다.OpenGL 3.3 multitexture : 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이어야합니다. 참고로

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

고맙습니다. 이것은 문제를 해결하는 것으로 보인다. –