首页 > 解决方案 > 带有 NPOT 纹理的 OpenGL 最大纹理大小是多少?

问题描述

我知道我可以使用此代码来检索 GPU 的最大纹理大小:

glGetIntegerv(GL_MAX_TEXTURE_SIZE, &size, 0);

我还可以通过以下方式获得最大纹理缓冲区大小:

glGetIntegerv(GL_MAX_TEXTURE_BUFFER_SIZE, &size, 0);

问题是我想创建一个图集来打包字体字符,而 2D 图集更复杂,并且在不计划适合每个字符的位置的情况下填充它们会丢失图集中的空间。所以,我使用一维图集来存储文本字符:

https://drive.google.com/open?id=1py9l2hEk3-fJzqyMeF6P2ajrNs3CFDFj

GL_MAX_TEXTURE_SIZE如果纹理缓冲区大小小于,我可以超过GL_MAX_TEXTURE_BUFFER_SIZE吗?纹理是 NPOT,所以让我问了这个问题(因为最大纹理大小是GL_MAX_TEXTURE_SIZE平方的,并且纹理没有到达GL_MAX_TEXTURE_SIZEY 轴)。

编辑

为了让问题更清楚,我可以创建一个宽度 >GL_MAX_TEXTURE_SIZE但高度不是且纹理缓冲区不超过GL_MAX_TEXTURE_BUFFER_SIZE. 前任:

如果GL_MAX_TEXTURE_SIZE是 8192,则创建尺寸为 10000 x 40 的纹理。它不超过GL_MAX_TEXTURE_BUFFER_SIZE8192 的平方,但超过了边的最大值。

标签: imageopenglgraphicstextures

解决方案


GL_MAX_TEXTURE_SIZE控制所有形式的 1D 和 2D 纹理的尺寸。它不关心纹理占用多少存储空间;它大约是其尺寸的大小。

GL_MAX_TEXTURE_BUFFER_SIZE也与纹理存储的大小无关(不直接)。它是对缓冲区纹理尺寸的限制,它不是 1D 或 2D 纹理。仅当您的纹理属于与orGL_TEXTURE_BUFFER不同的类型时才重要。GL_TEXTURE_1DGL_TEXTURE_2D

这些问题都与 NPOT 纹理无关。这仅仅是取消了纹理尺寸为 2 次方的限制。


推荐阅读