我知道我可以使用以下代码获取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
的平方,并且纹理在Y轴上没有达到GL_MAX_TEXTURE_SIZE
)。
编辑
为使问题更清楚,我可以创建一个宽度> GL_MAX_TEXTURE_SIZE
但高度不大于且纹理缓冲区不超过GL_MAX_TEXTURE_BUFFER_SIZE
的纹理。例如:
如果GL_MAX_TEXTURE_SIZE
为8192,则创建尺寸为10000 x 40的纹理。不超过GL_MAX_TEXTURE_BUFFER_SIZE
的8192平方,但超过侧面的最大值。
答案 0 :(得分:2)
GL_MAX_TEXTURE_SIZE
控制所有形式的1D和2D纹理的尺寸。它不在乎纹理占用了多少存储;大约是尺寸的大小。
GL_MAX_TEXTURE_BUFFER_SIZE
与纹理的存储的大小无关(不是直接的)。这是buffer texture尺寸的限制,它不是1D或2D纹理。仅当您的纹理是GL_TEXTURE_BUFFER
类型(与GL_TEXTURE_1D
或GL_TEXTURE_2D
不同)时才重要。
这些问题都与NPOT纹理无关。那仅仅是消除了将纹理尺寸为2的幂的限制。