2014-09-23 96 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先前已被设置为非零值。将此值设置为零可解决问题。感谢那些回复。 -