2011-08-07 90 views
0

我正在使用OpenGL制作蠕虫式位图可破坏地形游戏。我想知道在视频内存方面的限制对于世界的大小。OpenGL:纹理大小和视频内存

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

  • 多少内存,非常粗略地说,我可以期待这样的512 * 512 RGBA纹理占用多少?
  • 是否有任何内部自动压缩?
  • 我希望大多数用户的电脑有多少视频内存可以免费使用?

回答

1

我不会担心非常多。即使是8192 * 2048的世界(4个屏幕宽,2个屏幕高,这对于蠕虫风格的游戏来说非常大),您只需要8 * 2 * 4 = 64Mb(添加mipmap,其他纹理,帧缓冲)界限。就我所知,即使是较老的GPU也有这种内存(我们没有谈论GeForce4卡,对吧?)。

旧的GPU可能会限制每个纹理可能有多大,但由于您已将您的世界分割为512x512块,因此这不会成为问题。

如果视频内存成为问题,您可以允许用户使用半角大小的纹理(即将世界缩减到4096 * 1024和256x256的缝隙),并根据需要提取新的/丢弃未使用的区域。

2

我可以期待这样一个512 * 512 RGBA纹理占用多少内存,非常粗略?

没有足够的信息。你应该总是使用大小OpenGL image formats(GL_RGBA ,GL_RGBA )。

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

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

我有多少视频内存可以预期大部分用户的计算机上有免费的吗?

您目前使用多少?

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

但说实话,你的小蠕虫游戏并不会在内存大小方面花费任何东西。上手时,可能会有64MB。没什么需要关注的。

+0

内存要求很大程度上取决于您。您需要选择一条合理的线(即64Mb)并尝试适合它。 – Kromster

0

再次,这取决于你的引擎,但如果我是你,我会做到这一点:

由于您的地形纹理很可能会重复使用一些马赛克状纹理,和你需要知道像素是否存在,或者被破坏,那么鉴于您使用的拼图纹理不大于256x256,您肯定可以用GL_RG16内部格式(其中每个组件都是您需要映射的纹理坐标[0,255] - > [0.0 ,1.0],并且你会保留一些特殊的值来表明地形被破坏),使得每个512x512块占用0.5MB。 虽然它做临时工增加一个额外的字节来表示地形的存在,但3个字节格式将不缓存太好