【问题标题】:Problems about allocating openGL 3D texture size of 1G关于分配openGL 3D纹理大小为1G的问题
【发布时间】: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


    【解决方案1】:

    这个 openGL 3D 纹理有什么问题?

    您超出了内存限制。

    仅仅因为您的 GPU 内存为 1.5GB 并不意味着您可以将 1GB 块分配为单个纹理。您的 OpenGL 实现有权以内存为由拒绝这样做,无论您的卡有多少 GPU 内存。

    如果它想拒绝这个,你也无能为力。

    您能做的最好的事情就是尝试为您的图像提供适当的像素大小。也就是说,使用GL_LUMINANCE8 而不是未调整大小的GL_LUMINANCE。或者更好的是,使用GL_R8。无法保证其中任何一个都会起作用。

    【讨论】:

    • 感谢您的回复。:) 我真的知道这一点。甚至前几天,我还认为我的 GPU 无法分配 1G 纹理。但是,有一个名为 VoReEn 的开源项目,它成功地在我的 GPU 上分配了 1G 纹理!它使用 GL_ALPHA8 并且可以工作。但在我的代码中,GL_ALPHA8GL_LUMINANCE8 根本不起作用。 :(
    • 有时就是这样。您可以通过关闭其他可能正在使用某些纹理的应用程序来增加制作大纹理的机会(并确保您的程序也没有使用太多 VRAM)。
    • 我的问题解决了。:) 我以前在win32模式下编译代码。当我转向使用 x64 模式编译和运行时,它最终 WORKS !!
    【解决方案2】:

    感谢所有回答我问题的朋友。我最终找到了我的错。

    我以前在win32模式下编译代码。当我转向使用 x64 模式编译和运行时,它最终 WORKS !而且无论 GL_LUMINANCE 还是 GL_LUMINANCE8 都可以。

    设备似乎无法处理大于 600MB(或多或少)的视频内存。

    这是我找到的最后一个链接,它解释了我遇到的同样问题。 http://www.opengl.org/discussion_boards/showthread.php/177442-Out-of-memory-problem?highlight=memory

    【讨论】:

    • 刚刚遇到同样的问题,可以确认以 x64 为目标的工作,在我的情况下,以 x86 为目标的内存限制似乎是 Nvidia GTX 970M 上的 200Mb 3D 纹理
    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 2019-04-04
    • 2011-09-28
    • 2012-07-24
    相关资源
    最近更新 更多