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