각면마다 다른 질감의 입방체를 그려야합니다. 내 단편 쉐이더 내 버텍스 쉐이더를 사용하는 텍스처의 수를 포함 Textnum 매개 변수를 전달, 그 값에 따라 적절한 sampler2D을 선택하는 스위치 문을 사용하여이 코드를GLSL switch 문의 이상한 동작
#version 150
in float Shade;
in vec2 Textcoord;
in uint Textnum;
out vec4 outColor;
uniform sampler2D tex0;
uniform sampler2D tex1;
uniform sampler2D tex2;
uniform sampler2D tex3;
uniform sampler2D tex4;
uniform sampler2D tex5;
void main()
{
vec4 textColor;
switch(Textnum)
{
case 0u: textColor = texture(tex0, Textcoord); break;
case 1u: textColor = texture(tex1, Textcoord); break;
case 2u: textColor = texture(tex2, Textcoord); break;
case 3u: textColor = texture(tex3, Textcoord); break;
case 4u: textColor = texture(tex4, Textcoord); break;
case 5u: textColor = texture(tex5, Textcoord); break;
}
outColor = textColor * vec4(Shade, Shade, Shade, 1);
}
, 큐브는 아니다 전혀 렌더링되지 않습니다. 내가 할 때 텍스처가 제대로로드됩니다.
void main()
{
vec4 textColor;
textColor = texture(tex0, Textcoord);
outColor = textColor * vec4(Shade, Shade, Shade, 1);
}
각면마다 같은 질감의 입방체가 나타납니다. 나는 예상 된 결과를 얻을 때마다 모든 샘플러로 이것을 시도했다. 흥미로운 점은 내가 할 때입니다 :
switch 문 다음에 나오는 명령이 효과를 덮어 쓰더라도 큐브를 볼 수 없습니다. 내 코드에 무슨 문제가 있습니까?
편집 : 그래서 분명히이없는 말은, 아직 내가 할 경우 때문에 (위키 백과 문서의 이유로 정확해야 함) :
큐브가 여전히 전혀 렌더링되지 않는
void main()
{
vec4 textColor;
vec4 textColor0 = texture(tex0, Textcoord);
vec4 textColor1 = texture(tex1, Textcoord);
vec4 textColor2 = texture(tex2, Textcoord);
vec4 textColor3 = texture(tex3, Textcoord);
vec4 textColor4 = texture(tex4, Textcoord);
vec4 textColor5 = texture(tex5, Textcoord);
switch(Textnum)
{
case 0u: textColor = textColor0; break;
case 1u: textColor = textColor1; break;
case 2u: textColor = textColor2; break;
case 3u: textColor = textColor3; break;
case 4u: textColor = textColor4; break;
case 5u: textColor = textColor5; break;
}
outColor = textColor * vec4(Shade, Shade, Shade, 1);
}
. 이것은 잘 작동하지 않습니다
void main()
{
vec4 textColor[6];
textColor[0] = texture(tex0, Textcoord);
textColor[1] = texture(tex1, Textcoord);
textColor[2] = texture(tex2, Textcoord);
textColor[3] = texture(tex3, Textcoord);
textColor[4] = texture(tex4, Textcoord);
textColor[5] = texture(tex5, Textcoord);
outColor = textColor[Textnum] * vec4(Shade, Shade, Shade, 1);
}
EDIT2가 : GLSL에서 http://pastebin.com/R2scC0ZZ
마지막 코드에서 glsl 컴파일 오류가 표시되지 않았습니까? 출력물 더미에 숨어있을 수도 있습니다. – javaLover
아니요, 컴파일 오류를 확인하고 프로그램에서 의심스러운 사항을보고하지 않았습니다. –
나는 추측을 할 것이다. (저는 초보자입니다.) 스위치에 "default :"를 추가하십시오. – javaLover