【发布时间】:2012-08-02 04:31:02
【问题描述】:
我正在做一些关于体积渲染的工作。我想分配一个 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 纹理。
PPS。顺便说一句,我也使用 CUDA 做了一些工作。当我在 CUDA 中分配 2048 立方 uchar 纹理时没有问题。
这个 openGL 3D 纹理有什么问题?
【问题讨论】:
标签: opengl textures large-data-volumes volume-rendering