내 프레임 버퍼에서 부호없는 32 비트를 저장하고 검색하는 데 문제가 있습니다. 내 인텔 노트북 (NVIDIA 카드 및 우분투)에 프레임 버퍼의 최대 값은 다음과 같습니다 그러나부호없는 int를 읽을 때 glReadPixels의 정밀도
4.294.967.295
, 내가 읽을 수있는 최대 값, 어떤 이유로, 단지입니다 :
1.040.992.698
내가 뭔가 잘못하고 있는지 또는 내 그래픽 카드의 한계인지 누군가가 나에게 말할 수 있는지 궁금합니다.
나는이처럼 내 프레임 버퍼를 설정하고있다 :
// generate render and frame buffer objects
glGenRenderbuffers(1, &colorbufId);
glGenRenderbuffers(1, &depthbufId);
glGenFramebuffers (1, &framebufId);
// setup renderbuffer
glBindRenderbuffer(GL_RENDERBUFFER, colorbufId);
glRenderbufferStorage(GL_RENDERBUFFER, GL_R32UI, _viewWidth, _viewHeight);
// setup depth buffer
glBindRenderbuffer(GL_RENDERBUFFER, depthbufId);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT32, _viewWidth, _viewHeight);
// setup framebuffer
glBindFramebuffer(GL_FRAMEBUFFER, framebufId);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorbufId);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthbufId);
// check if everything went well
GLenum stat = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(stat != GL_FRAMEBUFFER_COMPLETE) { printf("stat=%d != %d\n", stat, GL_FRAMEBUFFER_COMPLETE); Error(); exit(0); }
// define where the framebuffer outputs will be written
const GLenum bufs[] = { GL_NONE, GL_COLOR_ATTACHMENT0 };
glDrawBuffers(2, bufs);
을 지금은 픽셀
const uint32_t MAX_UINT = std::numeric_limits<uint32_t>::max();
glClearBufferuiv(GL_RENDERBUFFER, colorbufId, &MAX_UINT);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
uint32_t pix_value=0;
glReadPixels(0, 0, 1, 1, GL_RED_INTEGER, GL_UNSIGNED_INT, &pix_value);
에게 pix_value = 1.040.992.698의 값을 읽으려고 할 때.
또한 'GL_RED_INTEGER'대신 'GL_RED'를 사용해 보았지만 여전히 작동하지 않습니다.
는
EDIT (관심있는 사람들을 위해, 나는 위의 할 노력하고있어 그 이유는 따기 객체입니다) : 그래서 결국이 정밀도와는 아무 상관이 없었다. 버퍼를 올바르게 지우지 않았습니다. 셀레늄 대답 아래
올바른 명령은이 *** 정수 *** 프레임 버퍼, 그것은해야 취소 :
이 버퍼를 취소 할 수있는 올바른 명령입니다 명확히해야한다. 이것은 부동 소수점 ('glClearColor (...)') 만 정수 색 (_e.g._'glClearColorui (...)')을 설정하는 명령이 없기 때문에 필요합니다. –
예, 맞습니다. – wesdec