R (실수)의 부동 소수점 값에서 (0,1)로 매핑되고 255가 곱해진 값 (0, 255)을 갖는 GLubyte로 2D 텍스처를 채 웁니다. . 저장은 텍스처에서 1 개의 값만 필요하기 때문에 GL_R8과 같습니다. 예를 들어 수학 함수를 나타낼 수 있습니다.2D 텍스처의 값을 기반으로 1D 텍스처 샘플링
또한 1d 텍스처를 업로드하여 색상 표/색상 막대로 사용합니다. 그런 다음 2D 텍스처의 값을 기반으로 1 차원 텍스처를 샘플링합니다.
이 내 조각 쉐이더 작동 방법은 다음과 같습니다
#version 400
in vec2 f_textureCoord;
layout(location = 0) out vec4 FragColor;
uniform sampler2D textureData;
uniform sampler1D colorBar;
void main() {
/* Values in the sampler are on (0, 1) * 255 => (0, 255) */
vec3 texColor = texture2D(textureData, f_textureCoord).rgb;
float s = texColor.r;
/* Use the texture value as a coordinate in the 1D colorbar texture */
vec3 color = texture1D(colorBar, s).rgb;
float val = color.r;
FragColor = vec4(val, val, val, 1);
}
이 나는 다음과 같은 오류가 사용 :
glValidateProgram: Validation Error: Samplers of different types point to the same texture unit
그러나, 내 코드는 예상대로 작동, 적어도 렌더링 결과!
내 질문은 :
1) 왜이 오류/경고를받을 수 있나요? --- 답변으로 응답 ...
2) 내가하려는 일에 대한 올바른 접근 방식입니까? 함수 값을 2D 텍스처로 저장하는 대신 버퍼의 다른 형식을 사용해야합니까?
3) 수학 함수 (2D 텍스처 채우기)가 텍스처 크기 제한을 초과 할 때 문제가 발생한다고 가정합니다. 이 문제를 해결하기 위해 어떻게해야하는지에 대한 권장 사항은 무엇입니까?
동일한 질감 단위를 두 샘플러에 모두 바인딩하는 것으로 의심됩니다. 그것이 작동하는 이유는 나를 넘어선 것이다. – Thomas
'# version' 지시어는 어디에 있습니까? – genpfault
@genpfault : #version 400을 사용합니다. 컴파일시입니다 .. – toeplitz