如何在opengl中创建大图像的纹理(大于MAX_TEXTURE_SIZE)

时间:2013-08-29 15:09:26

标签: performance opengl mfc textures mipmaps

我发现我的opengl可以支持的最大纹理大小是8192,但我正在使用的图像是16997x15931。正如您在此链接中看到的那样,我已经完成了课程COpenGLControl并将其自定义以供我自己使用,以便使用较小的7697x7309图像并为其激活不同的导航任务。

Render an outlined red rectangle on top a 2D texture in OpenGL

但现在在工作的最后阶段,我决定更改应用纹理的部分,并使其能够处理大于8192的图像。

问题:

  • 我的opengl可以吗?
  • 我应该用什么概念研究mipmap,多重纹理?
  • 它会扩展代码的性能吗?

现在我的程序使用271 MB的ram来显示这个小图像(7697x7309),我将为它添加一个任务(用于图像处理过滤过程),我已尽我所有努力优化代码,但它使用376 MB的RAM作为(7697x7309)图像(代码已经编写为控制台应用程序将与此项目结合)。所以我认为最终的项目将使用高达700 MB的ram来接近7000x7000尺寸的图像。显然,对于更大的图像(16997x15931),ram的使用将会更高!

所以我正在寻找一个概念来处理大于MAX_TEXTURE_SIZE的图像,并优化程序的性能

更多问题:

  • 我应该在 OpenGL 中学习什么概念来实现上述目标?
  • 解释你建议的概念吗?

我也在Game Developement中提出了这个问题但决定在这里重复这个问题,也许会有更多的观众。一旦我得到答案,我将从网站上删除该问题。所以不要担心多次提问。

1 个答案:

答案 0 :(得分:2)

我将尝试总结我对原始问题的评论。

  • 知道你正确的opengl版本:也许你可以加载一些现代扩展,甚至可以使用最新版本的opengl。
  • 减少内存你可以使用一些纹理压缩:
  • 另一个简单的想法:你可以分割巨大的纹理并创建4个较小的纹理(从16k x 16k到4个8k x 8k)并以某种方式呈现四个方块。
  • 也许您可以使用OpenCL或CUDA来完成工作?
  • 关于 mipmap :它是输入纹理的较小版本,mipmap提高了过滤的性能和最终质量,但对于具有完整mipmap链的纹理,还需要另外33%的内存。在你的情况下,他们可能会非常有帮助。例如,当你从很远的距离看墙壁时,你不必使用完整的(大)纹理......只有它的一个小版本就足够了。 g-truc on mipmaps

一般来说,有很多选择,但这取决于您的经验,实施起来更简单,更快。