2014-06-30 5 views
1

내가 GLSL 0에 전달할 모든 정수, 나는 2 초과 1로 채워진 배열을 보냈지 만 정수 그래서 나는 단지 질감을 얻을 텍스처를 선택하기위한 OpenGL을 보내는 모든 0을 읽을 수은 이상하게도 모든 0

String fragmentshader="#version 330 core" 
     + System.getProperty("line.separator") 
     +"out vec4 outcolor;" 
     +"flat in int yup;" 
     +"in vec2 supertextcoords;" 
     +"uniform sampler2D texture1;" 
     +"uniform sampler2D texture2;"  
     +"void main(){" 
     +"vec4 texturev1=texture2D(texture1, supertextcoords);" 
     +"vec4 texturev2=texture2D(texture2, supertextcoords);" 
     +"vec4 final=texture2D(texture2, supertextcoords);" 
     + "if(yup==1){final=texturev1; outcolor=final;}else if(yup==0){" 
     +"final=texturev2; outcolor=final;}else{" 
     + "final=vec4(0,1,0,0); outcolor=final;}" 

나는의 int를 보내는 방법은

glEnableVertexAttribArray(2); 
glVertexAttribIPointer(2,1,GL_INT,0,(vertices.length+textcoord.length)*4); 
glDrawArrays(GL_TRIANGLES, 0, vertices.length/4); 
glDisableVertexAttribArray(2); 
012,351,641입니다 : 여기
String vertexshader = "#version 330 core" 
     + System.getProperty("line.separator") 
     + "in vec4 vertexin;" 
     + "in vec2 textcoords;" 
     + " in int yup;" 
     + "uniform mat4 orthogonal;" 
     + "out vec2 supertextcoords;" 
     + "out int yup1;" 
     + "void main(){" 
     + "gl_Position = orthogonal * vertexin ;" 
     + "supertextcoords = textcoords;" 
     + "yup1=yup;" 
     + "}"; 

이 조각 쉐이더입니다 : 여기에 0으로 풀어서 나의 버텍스 쉐이더입니다

10 번호는 큐브의 OpenGL로 전송로되어있다. 각 크기에 대한 질감을 결정하려면 삼각형 당 1 개의 번호 (뒷면이 없음). 두 번째 숫자는 첫 번째 숫자와 같으므로 텍스처를 동일하게 만듭니다. 하지만 texturev2이 실험은 vec4 (0,1,0,0)이었다 내가 원하는 used.The texure합니다 적이다; 숫자가 2이고 매핑 된 범위를 벗어 났기 때문입니다. 왜? 더 많은 자료가 필요하면 멀리 물어보십시오.

+1

당신은 출력으로'yup1'을 가지고 있지만 FS의 입력으로 해당하는'yup1'가 없습니다. – genpfault

+0

@genpfault는 대답으로 그 제출하십시오 나는 그것을 선택합니다. 고맙습니다! 내가 떠나야하기 때문에 나는 그것을 tommorow 할 것이다. –

답변

1

버텍스 쉐이더에서는 yup1을 출력하지만 프래그먼트 셰이더에는 입력으로 yup1이 없습니다.

OpenGL은 비 블록 연결을 위해 정확한 기호 일치 이외의 다른 방법이 없습니다. in/out 프로그램 부분 사이에 선언이 있습니다. 링크되지 않은 입력은 런타임에 특히 유용하지 않습니다. 당신의 조각 쉐이더 변화에

flat in int yup; 

는 버텍스 쉐이더에서 out int yup1 선언과 일치 그래서
flat in int yup1; 

합니다. 당신 VS에서