我正在做一些关于体积渲染的工作。我想分配一个 1024x1024x1024 uchar 的 3D 亮度纹理。不幸的是,它总是失败。
通过在glTexImage3D(...)之后添加glGetError( ) ,我得到错误代码1285,这意味着“内存不足”。
但是,我的卡是 NV quadro 4800,其内存大小为 1536MB,大于上面的纹理大小(1GB)。该卡的驱动程序版本为 296.88。glew的版本是最新的1.8版本。
我关于分配纹理的代码如下所示:
glBindTexture(GL_TEXTURE_3D, texVoxels);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage3D(GL_TEXTURE_3D, 0, GL_LUMINANCE, volumeSize.x, volumeSize.y, volumeSize.z, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, voxels);
int err = glGetError();
printf("%d\n", err);
PS。通过使用 *glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, dim)*,它返回2048,这意味着我的硬件应该能够分配 1024 立方 uchar 纹理。
聚苯乙烯。顺便说一句,我也使用 CUDA 做了一些工作。当我在 CUDA 中分配 2048 立方 uchar 纹理时没有问题。
这个openGL 3D纹理有什么问题?