Shader로 OpenGL glTexEnv의 동작을 모방하려고합니다. 그것은 꽤 복잡한 기능이지만 실행 가능해야합니다. 유일한 문제는 함수가 텍스처 기본 내부 형식에 따라 다르게 작동한다는 것입니다. 그 정보를 텍스처에서 어떻게 얻을 수 있습니까? 텍스처베이스 내부 형식은 glTexImage2D 함수와 함께 주어 지므로 일부 변수에 저장하고 바운드 텍스처에 따라 유니폼을 사용하여 셰이더에 전달해야합니까? 아니면 OpenGL을 사용하여 얻을 수 있습니까?Shader에 대한 OpenGL 텍스처 기본 내부 형식
답변
질감 혼합 값이 내장 된 제복의 일부가 아닌 것 같습니다.
- 하나의 큰 쉐이더, 쉐이더로 값을 전달 ...
- 만들기 쉐이더, 각 행동과 내부 형식 :
http://www.opengl.org/sdk/libs/OpenSceneGraph/glsl_quickref.pdf
은 일반적으로 모방 FFP 동작에 대한 두 가지 방법이 있습니다 예를 들어 필요에 따라 동적으로
두 번째 방법을 선호합니다. 왜냐하면 하나의 크고 느린 allround 쉐이더가 없기 때문입니다. 대신에 특정 작은 쉐이더를 얻습니다.
또한이 일반적인 문제는 "조합 셰이더 폭발"문제로 알려져 있습니다.
실제로 하나의 셰이더에서 모든 것을 구현할 수는 없습니다. 텍스처 유닛 0에 대해 TEXTURE_3D 및 TEXTURE_2D 타겟이 활성화되어 있다고 가정 해 보겠습니다. 고정 함수 스펙에 따르면 3D 텍스처가 샘플링됩니다. 프로그램 가능한 파이프 라인은 쉐이더가 어떤 샘플러를 사용하는지에 따라 샘플링 될 내용을 결정한다고 말합니다. 즉, 텍스처 타겟의 각 조합마다 특정 셰이더를 작성해야합니다. 8D 텍스처 유닛이있는 1D/2D/3D/큐브는 이미 64K 쉐이더 가능성을 제공합니다 ... – Bahbar
아니요, 텍스처 기반 내부 형식을 셰이더에서 직접 사용할 수 없습니다. 직접 저장하지 않으려는 경우 GL에 항상 값을 요청하여 쉐이더에 전달할 수 있습니다.
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &outFormat)`
내부 형식은 어떻게 셰이더에 영향을 줍니까? – Luca
@ 루카 예를 들어 하나의 채널 만있는 텍스처가있을 수 있습니다 (32 비트로 인코딩 된 빨간색 값만 가정 해 봅시다). 이제 쉐이더가 적어도 두 개의 채널 (예 : 빨강 및 녹색)을 필요로하는 경우 한 채널 텍스처를 제공 할 때 문제가 발생할 수 있습니다. – wil