2011-08-16 50 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打包到客戶端內存中。 –