GLSL : 텍스처링 + 셰이더 활성화/비활성화
문제
셰이더에서 OpenGL 상태에 액세스하는 방법을 찾고 있습니다. 그만큼 GLSL 빠른 참조 가이드, 멋진 리소스,이 자원은 정말로 나를 도울 수 없었습니다.
내가 작업중 인 예에서 나는 다음 두 셰이더를 가지고 있습니다.
꼭지점:
void main()
{
gl_FrontColor = gl_Color;
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = ftransform();
}
파편:
uniform sampler2D tex;
uniform float flattening;
void main( void )
{
vec4 texel;
texel = texture2D(tex, gl_TexCoord[0].st);
texel.r *= gl_Color.r;
texel.g *= gl_Color.g;
texel.b *= gl_Color.b;
texel.a *= gl_Color.a;
gl_FragColor = texel;
}
질감이없는 다각형을 렌더링 할 때 알파 값은 정확하지만 검은 색 색상이 할당됩니다.
1, 변수 'Texel'이 설정되도록 어떤 조건부 점검을 설정할 수 있는지 vec4(1.0, 1.0, 1.0, 1.0)
GL_TEXTURE_2D
장애가 있습니까?
2, 다른 텍스처링 모드에 대해 다른 셰이더를 작성하고 내가 사용할 곳으로 전환하면 처리가 더 빨라질까요? glEnable
/glDisable
(GL_TEXTURE_2D
)?
해결책
죄송하지만 GLSL에서 그런 종류의 상태에 액세스 할 수는 없습니다.
이런 종류의 공허는 두 번째 질문을하지만, 다른 텍스처 모드에 대해 별도의 셰이더를 작성하는 것보다 더 편리하다고 생각되면 항상 #ifdef 's를 사용하여 셰이더의 부품을 활성화/비활성화 할 수 있습니다.
다른 팁
내가 본 방법 중 하나는 텍스처가 아닌 다각형을 렌더링 할 때 단일 텍셀 (1.0, 1.0, 1.0, 1.0)으로 1x1 텍스처를 바인딩하는 것입니다. 텍스처 스위치는 셰이더 스위치보다 저렴해야하며 1x1 텍스처는 텍스처 캐시 내부에 완전히 맞습니다.
제휴하지 않습니다 StackOverflow