2012-11-16 1 views
1

조각 쉐이더에 표시되는 질감을 변경하고 내가 여기 이 작업에 대해 조금 혼란 스러워요 것은내가 쉐이더 2 개 텍스처를 전달하는 데 노력하고

GLuint textures; 
    GLuint textures1;</code> 
    glGenTextures(1,&textures); 
    glGenTextures(1,&textures1); 
    glBindTexture(GL_TEXTURE_2D,textures); 
    glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,256,256,0,GL_RGB,GL_UNSIGNED_BYTE,texImg); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 

    glBindTexture(GL_TEXTURE_2D,textures1); 
    glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,256,256,0,GL_RGB,GL_UNSIGNED_BYTE,texImg1); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glBindTexture(GL_TEXTURE_2D,textures1); 

    GLuint location1=glGetUniformLocation(programObjectFloor,"Tex1"); 
    GLuint location2=glGetUniformLocation(programObjectFloor,"Tex2"); 

    glActiveTexture(GL_TEXTURE1); 
    glBindTexture(GL_TEXTURE_2D,textures1); 
    glUniform1i(location2, 1); 

    glActiveTexture(GL_TEXTURE0); 
    glEnable(GL_TEXTURE_2D); 
    glBindTexture(GL_TEXTURE_2D,textures); 
    glUniform1i(location1, 0); 

꼭지점 쉐이더는

인 OpenGL은 코드 I 선을 변경할 때
attribute vec4 position; 
attribute vec4 texture; 

uniform mat4 MVP; 


varying vec4 ptexture; 

void main() 
{ 
    ptexture = texture;  
    gl_Position = MVP * position; 
} 

프래그먼트 쉐이더는

varying vec4 ptexture; 

uniform sampler2D Tex1; 
uniform sampler2D Tex2; 
uniform bool swit; 

void main() 
{ 
     gl_FragColor = texture2D(Tex1,ptexture.st); 
} 

0

gl_FragColor = texture2D(Tex2,ptexture.st); 
아직도 첫 번째 질감이 표시됩니다,하지만 난 아래 줄을 주석 때, 두 번째 텍스처는 이런 일이 왜 설명해주십시오 수 표시됩니다?

//  glActiveTexture(GL_TEXTURE0); 
//  glEnable(GL_TEXTURE_2D); 
//  glBindTexture(GL_TEXTURE_2D,textures); 
//  glUniform1i(location1, 0); 
+0

glUseProgram을 (를) 호출하는 위치는 어디입니까? –

+0

'# version' 지시어는 어디에 있습니까? – genpfault

답변

0

균일 한 위치를 쿼리하고 값을 할당하기 전에 glUseProgram으로 전화해야합니다. 대부분 유니폼을 설정하지 않은 상태에서 정의되지 않은 상태로두면 프로그램을 나중에 전환 할 가능성이 큽니다.

셰이더를 사용할 때 텍스처가 사용되거나 셰이더 코드에 의해 결정되지 않으면 glEnable(GL_TEXTURE_2D);이 필요하지 않습니다.

균일 한 위치를 쿼리하기 바로 직전에 glBindTexture에 대한 중복 호출이 있습니다.

관련 문제