【问题标题】:opengl stencil buffer not initialized with zero?opengl 模板缓冲区未初始化为零?
【发布时间】:2011-10-28 05:56:54
【问题描述】:

我在MS WindowsXP下工作,我的显卡是itel GMA4500, 我的代码:

glClearStencil(0);
glClear(GL_STENCIL_BUFFER_BIT);

unsigned char* data = new unsigned char[width*height];
glPixelStorei(GL_PACK_ALIGNMENT,1);
glReadPixels(0,0,width,height,GL_STENCIL_INDEX,GL_UNSIGNED_BYTE,data);

但是当我检查数据缓冲区时,我可以看到字节并非全为零, 那么有什么问题呢?


是的,我确定我有一个模板缓冲区,在调用 glReadPixels 后,我检查了 glGetError,没有错误。我也试过 memset 用零填充数据缓冲区,但结果没有改变。

【问题讨论】:

  • 如果您在调用glReadPixels() 之前将memset() data 置零,会有什么变化吗?
  • 所以它的大部分缓冲区是零?它是对非​​零的了解,还是在块、开始或结束时有非零?你能粘贴一个(非常)小的十六进制转储吗?另外,宽度和高度是多少?

标签: c++ opengl glreadpixels stencil-buffer


【解决方案1】:

你真的有模板缓冲区吗?如果不是,glReadPixels 将引发错误(检查 glGetError(…))并保持目标缓冲区的内容不变。

【讨论】:

    【解决方案2】:

    你的意思是使用

    glPixelStorei(GL_UNPACK_ALIGNMENT,1);
    

    因为您试图从模板缓冲区中获取内容?

    【讨论】:

    • 不,GL_PACK_ALIGNMENT 是正确的,因为您正在从 GPU 打包到客户端内存中。
    猜你喜欢
    • 2015-11-15
    • 2018-06-23
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    相关资源
    最近更新 更多