2011-08-16 51 views
3

我在MS WindowsXP的工作,我的显卡是ITEL GMA4500, 我的代码:opengl模板缓冲区未用零初始化?

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填充数据缓冲区为零,但结果没有改变。

+0

如果你在你的'glReadPixels()'调用之前memset()'data'为零,有什么改变吗? – genpfault

+0

那么大部分缓冲区都是零?它是否在非零上或在块中是否非零,在开始或结束?你能粘贴一个(非常)小的十六进制转储吗? 另外,宽度和高度是多少? – MattiasF

回答

5

您是否确实有模板缓冲区?如果不是,glReadPixels将引发错误(检查glGetError(...)),并保持目标缓冲区的内容不变。

0

您的意思是使用

glPixelStorei(GL_UNPACK_ALIGNMENT,1); 

因为你试图从模板缓存的内容?

+0

不,GL_PACK_ALIGNMENT'正确,因为您正在从GPU打包到客户端内存中。 –