GeForce 330m에서 실행중인 Geometry 쉐이더에서 정수 텍스처를 샘플링하려고합니다. 텍스처에로드하는 것보다 다른 값을 반환하는 것 같습니다. 나는 질감을 생성하고로드하기 위해이 코드를 (기본적으로) 사용OpenGL Geometry 쉐이더 정수 텍스처 가져 오기가 실패합니다.
glGenTextures(1, &textureId);
glBindTexture(GL_TEXTURE_2D, textureId);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32I, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);
glBindTexture(GL_TEXTURE_2D, textureId);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32I, w, h, 0, GL_RGBA, GL_INT, <some 0-initialized large enough buffer>);
glBindTexture(GL_TEXTURE_2D, 0);
glBindTexture(GL_TEXTURE_2D, textureId);
int data[] = { 3, 0, 36, 400 };
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 3, 1, 1, GL_RGBA, GL_INT, data);
glBindTexture(GL_TEXTURE_2D, 0);
아이디어는 특정의 한 픽셀이 그때 내 지오메트리 쉐이더에서 이것을 사용 (400)의 w 값이 설정되어 있다는 것입니다 :
#version 330
#extension GL_EXT_gpu_shader4 : require
uniform isampler2D models;
void main()
{
ivec4 modelstats4 = texelFetch2D(models, ivec2(0, 3), 0);
// ivec4 modelstats4 = ivec4(3, 0, 36, 400);
if (modelstats4.w > height) {
// emit something
}
}
평등해야하는 주석 처리 된 고정 값을 사용하면 뭔가가 방출됩니다 (IE, 1 점). 실제 텍셀 가져 오기를 사용하면 아무 것도 반환하지 않습니다. 내가 아는 모든 값은 영향을 미칠 수 있으므로 현재 하드 코딩되어 있으므로 이것이 작동하지 않는 이유를 알 수 없습니다. 이것은 전체 코드 (OO 설정, 살펴볼 많은 것들)가 아니지만, 이것들은 관련 데이터가있는 관련 OpenGL 호출입니다.
질문에 답하거나 삭제해야합니다. 답이없는 질문 목록에있는 장소 만 유지하기 때문에 :) – kravemir
감사 Miro, 그건 몰랐습니다. – dascandy