OpenGL:纹理大小和视频内存

时间:2011-08-07 09:41:45

标签: memory opengl graphics textures procedural-generation

我正在使用OpenGL制作蠕虫风格的位图可破坏地形游戏。我想知道视频内存的限制在哪里适用于世界的大小。

目前,我使用512 * 512 RGBA纹理块作为地形。

  • 我可以期待这样的512 * 512 RGBA纹理占用多少内存?
  • 是否正在进行内部自动压缩?
  • 我希望大多数用户的计算机可以免费使用多少视频内存?

4 个答案:

答案 0 :(得分:2)

  

我可以期待这样的512 * 512 RGBA纹理占用多少内存?

信息不足。您总是使用大小OpenGL image formats(GL_RGBA 8 ,GL_RGBA 16 )。

GL_RGBA8每像素占32位,即4个字节。因此,512 * 512 * 4 = 1MB。

  

是否正在进行内部自动压缩?

没有

  

我希望大多数用户的计算机可以免费获得多少视频内存?

您目前使用了多少?

OpenGL将根据可用空间将图像数据输入和输出。如果GPU内存不足,OpenGL将很乐意分配系统内存并根据需要上传图像。

但说实话,你的小蠕虫游戏在内存大小方面实际上不会花费任何成本。当你完成时,可能是64MB,顶部。你无需担心这一点。

答案 1 :(得分:1)

我不会那么担心。即使有8192 * 2048世界(4个屏幕宽,2个屏幕高,这对于蠕虫式游戏来说非常大)你只需要8 * 2 * 4 = 64Mb(添加mipmap,其他纹理,帧缓冲)你应该适合128MB界限。据我所知,即使是较旧的GPU也有这种记忆(我们不会谈论GeForce4卡,对吧?)。

较旧的GPU可能会限制每个纹理的大小,但由于您已经将世界分成512x512块,因此不会出现问题。

如果视频内存成为问题,您可以允许用户使用半尺寸纹理(即将世界下采样到4096 * 1024和256x256 chinks)并根据需要获取新的/丢弃未使用的区域。

答案 2 :(得分:0)

使用32-bpp(4字节),你得到4 * 512 * 512 = 1 MB

请参阅有关纹理压缩的信息:http://www.oldunreal.com/editing/s3tc/ARB_texture_compression.pdf

答案 3 :(得分:0)

同样,这取决于你的引擎,但如果我是你,我会这样做:

由于您的地形纹理可能会重复使用某些类似马赛克的纹理,并且您需要知道某个像素是否存在或被破坏,因此如果使用不大于256x256的马赛克纹理,您肯定可以使用GL_RG16内部格式(其中每个组件都是一个纹理坐标,您需要从[0,255] - > [0.0,1.0]进行映射,并且您将为地形纹理保留一些特殊值以指示地形被破坏) ,使每个512x512块占用0.5MB。 尽管添加额外的字节来表示地形存在很有诱惑力,但是3字节格式不会缓存太多