gpt4 book ai didi

opengl - 读取 unsigned int 时 glReadPixels 的精度

转载 作者:行者123 更新时间:2023-12-01 15:37:48 25 4
gpt4 key购买 nike

我在从我的帧缓冲区存储和检索 32 位无符号数据时遇到问题。我的英特尔笔记本电脑(nvidia 卡和 Ubuntu)上的帧缓冲区的最大值是:

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”而不是“GL_RED_INTEGER”,但仍然无效。

(对于任何感兴趣的人,我尝试执行上述操作的原因是为了挑选对象)

编辑:所以最后这与精度无关。我没有正确清除缓冲区。请在下方回答

最佳答案

好的,我发现了错误:

这是清除缓冲区的正确命令:

  glClearBufferuiv(GL_COLOR, colorbufId, &UNDEF_IDX);
glClear( /*GL_COLOR_BUFFER_BIT |*/ GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT );

关于opengl - 读取 unsigned int 时 glReadPixels 的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27016051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com