2

我一直在尝试制作一个跨平台的 2D 在线游戏,我的地图是由瓷砖组成的。我用来渲染图块的图块集非常大。我想知道如何禁用硬件渲染,或者至少让它更有能力。因此,我想知道视频内存的基本限制是什么,据我所知,Direct3D 有纹理大小限制(我不是指纹理大小的二次幂)。

4

1 回答 1

0

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

您可以使用以下方法估算最大纹理大小:

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,因为当target参数为GL_PROXY_TEXTURE_2D. 相反,OpenGL 只考虑它是否可以容纳指定大小和描述的纹理。如果无法容纳指定的纹理,则宽度和高度纹理值将设置为零。进行纹理代理调用后,您需要按如下方式查询这些值:

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

if (width==0) {
   /* Can't use that texture */
}
于 2010-04-10T18:31:39.723 回答