문제

셰이더에서 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 텍스처는 텍스처 캐시 내부에 완전히 맞습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top