2014-09-23 41 views
0

我正在做一些3D紋理的工作,並且我在OSX上遇到了一些問題。我用來生成3D紋理的代碼在Windows和LINUX上運行良好,但在OSX上它更常崩潰。代碼看起來像這樣:發生OpenGL 3D紋理生成崩潰

#define LUT_3D_RESOLUTION 32 
glEnable(GL_TEXTURE_3D); 
float* buffer = new float[LUT_3D_RESOLUTION*LUT_3D_RESOLUTION*LUT_3D_RESOLUTION*4]; 
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, (int)LUT_3D_RESOLUTION, (int)LUT_3D_RESOLUTION, (int)LUT_3D_RESOLUTION, 0, GL_RGBA, GL_FLOAT, 0); 
glTexSubImage3D(GL_TEXTURE_3D,0,0,0,0,(int)LUT_3D_RESOLUTION,(int)LUT_3D_RESOLUTION,(int)LUT_3D_RESOLUTION,GL_RGBA,GL_FLOAT,buffer); 
glFlush(); 
glDisable(GL_TEXTURE_3D); 

崩潰的glTexSubImage3D圖像上,我得到一個EXC_BAD_ACCESS錯誤,它的嘗試訪問的地址是遠遠超出分配的緩衝區。

+0

您是否嘗試檢查錯誤?也沒有意義,但不應該使用GLfloat來實現可移植性? – 2014-09-23 03:23:19

+0

您列出的代碼中似乎存在大約4或5個印刷錯誤(所有與'LUT_3D_RESOLUTION'有關的錯誤)。你把它粘貼好了嗎? – 2014-09-23 04:07:58

+0

我在Mac上試過這些代碼行,無法重現崩潰。這是你做的唯一的事情嗎?或者你有一些可能影響到這一點的狀態?像像素存儲參數一樣?還是解壓縮緩衝區? – 2014-09-23 05:18:08

回答

1

原來UNPACK_ROW_LENGTH先前已被設置爲非零值。將此值設置爲零可解決問題。感謝那些回覆。 -