OpenGL模板缓冲区没有初始化为零?

3

我使用的操作系统是MS Windows XP,我的显卡是Intel GMA 4500。以下是我的代码:

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”清零,会有什么变化吗? - genpfault
大部分缓冲区都是零吗?它是零散的非零值还是在开头或结尾有非零块?您能粘贴一个(非常)小的十六进制转储吗?另外,宽度和高度是多少? - MattiasF
2个回答

5

您是否实际上拥有模板缓冲区?如果没有,glReadPixels将引发错误(请检查glGetError(…)),并且不会更改目标缓冲区的内容。


0

你是不是想使用

glPixelStorei(GL_UNPACK_ALIGNMENT,1);

因为您正在尝试从模板缓冲区获取内容?


不,GL_PACK_ALIGNMENT是正确的,因为你正在从GPU打包到客户端内存。 - Christian Rau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接