OpenGL视频RAM限制

时间:2010-04-10 13:04:52

标签: opengl graphics 2d video-memory

我一直在尝试制作跨平台的2D在线游戏,我的地图是用瓷砖制作的。 我渲染瓷砖的瓷砖组非常庞大。 我想知道如何禁用硬件渲染,或至少使其更强大。 因此,我想知道视频RAM的基本限制是什么,据我所知,Direct3D有一个纹理大小限制(我并不是指两种纹理的大小)。

1 个答案:

答案 0 :(得分:0)

如果您想使用软件渲染器,请链接Mesa

您可以使用these methods估算最大纹理尺寸:

  

21.130我的设备将硬件加速渲染的最大尺寸纹理贴图是什么?

     

一个好的OpenGL实现将尽可能使用硬件加速进行渲染。但是,实现可以自由地不渲染硬件加速。 OpenGL不提供确保应用程序使用硬件加速的机制,也不提供使用硬件加速查询的机制。记住这些信息,以下内容可能仍然有用:

     

您可以通过以下调用获得实现支持的最大纹理大小的估计值:

GLint texSize;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &texSize);
     

如果您的纹理不是硬件加速,但仍然在GL_MAX_TEXTURE_SIZE返回的尺寸限制范围内,它仍应正确呈现。

     

这只是一个估计,因为glGet*()函数不知道您将为任何给定纹理使用什么格式,内部格式,类型和其他参数。 OpenGL 1.1和更高版本通过允许纹理代理解决了这个问题。

     

以下是使用纹理代理的示例:

glTexImage2D(GL_PROXY_TEXTURE_2D, level, internalFormat, width, height, border, format, type, NULL);
     

请注意,pixels参数为NULL,因为当目标参数为GL_PROXY_TEXTURE_2D时,OpenGL不会加载纹素数据。相反,OpenGL只考虑它是否可以容纳指定大小和描述的纹理。如果无法容纳指定的纹理,则宽度和高度纹理值将设置为零。进行纹理代理调用后,您将需要按如下方式查询这些值:

GLint width;
glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);

if (width==0) {
   /* Can't use that texture */
}