OpenGL视频RAM限制

OpenGL视频RAM限制,opengl,graphics,2d,video-memory,Opengl,Graphics,2d,Video Memory,我一直在尝试制作一个跨平台的2D在线游戏,我的地图是用瓷砖制作的。 我绘制瓷砖的瓷砖集非常大。 我想知道如何禁用硬件渲染,或者至少使其更具功能。 因此,我想知道视频ram的基本限制是什么,据我所知,Direct3D有一个纹理大小限制,我不是说两个纹理大小的能力。如果你想使用软件渲染器,请链接 您可以使用以下方法获得最大纹理大小的估计值: 21.130我的设备渲染硬件加速的纹理贴图的最大大小是多少 一个好的OpenGL实现将尽可能使用硬件加速进行渲染。但是,该实现可以自由地不渲染硬件加速。Open

我一直在尝试制作一个跨平台的2D在线游戏,我的地图是用瓷砖制作的。 我绘制瓷砖的瓷砖集非常大。 我想知道如何禁用硬件渲染,或者至少使其更具功能。
因此,我想知道视频ram的基本限制是什么,据我所知,Direct3D有一个纹理大小限制,我不是说两个纹理大小的能力。

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

您可以使用以下方法获得最大纹理大小的估计值:

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不会加载texel数据。相反,OpenGL只考虑它是否能够容纳指定大小和描述的纹理。如果无法容纳指定的纹理,则“宽度”和“高度”纹理值将设置为零。在进行纹理代理调用后,您需要按如下方式查询这些值:

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

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

如果要使用软件渲染器,请链接到

您可以使用以下方法获得最大纹理大小的估计值:

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不会加载texel数据。相反,OpenGL只考虑它是否能够容纳指定大小和描述的纹理。如果无法容纳指定的纹理,则“宽度”和“高度”纹理值将设置为零。在进行纹理代理调用后,您需要按如下方式查询这些值:

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

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