使用 NPOT 纹理的 OpenGL 最大纹理大小是多少?
What is OpenGL maximum texture size with NPOT textures?
我知道我可以使用此代码来检索 GPU 的最大纹理大小:
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &size, 0);
我还可以获得最大纹理缓冲区大小:
glGetIntegerv(GL_MAX_TEXTURE_BUFFER_SIZE, &size, 0);
问题是我想创建一个图集来打包字体字符,而 2D 图集更复杂,并且 space 在不计划每个字符的位置填充它们的情况下可能会丢失图集中的内容。所以,我使用一维图集来存储文本字符:
https://drive.google.com/open?id=1py9l2hEk3-fJzqyMeF6P2ajrNs3CFDFj
如果纹理缓冲区大小小于 GL_MAX_TEXTURE_BUFFER_SIZE
,我可以超过 GL_MAX_TEXTURE_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 的平方,但超过边的最大值。
GL_MAX_TEXTURE_SIZE
控制所有形式的一维和二维纹理的尺寸。它不关心纹理占用多少存储空间;这是关于它的尺寸大小。
GL_MAX_TEXTURE_BUFFER_SIZE
也与纹理的 存储空间 的大小无关(不是直接的)。这是对 buffer texture 尺寸的限制,它不是一维或二维纹理。仅当您的纹理是 GL_TEXTURE_BUFFER
类型时才重要,这与 GL_TEXTURE_1D
或 GL_TEXTURE_2D
.
不同
其中none个问题与NPOT纹理有关。这只是取消了纹理尺寸为 2 的幂的限制。
我知道我可以使用此代码来检索 GPU 的最大纹理大小:
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &size, 0);
我还可以获得最大纹理缓冲区大小:
glGetIntegerv(GL_MAX_TEXTURE_BUFFER_SIZE, &size, 0);
问题是我想创建一个图集来打包字体字符,而 2D 图集更复杂,并且 space 在不计划每个字符的位置填充它们的情况下可能会丢失图集中的内容。所以,我使用一维图集来存储文本字符:
https://drive.google.com/open?id=1py9l2hEk3-fJzqyMeF6P2ajrNs3CFDFj
如果纹理缓冲区大小小于 GL_MAX_TEXTURE_BUFFER_SIZE
,我可以超过 GL_MAX_TEXTURE_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 的平方,但超过边的最大值。
GL_MAX_TEXTURE_SIZE
控制所有形式的一维和二维纹理的尺寸。它不关心纹理占用多少存储空间;这是关于它的尺寸大小。
GL_MAX_TEXTURE_BUFFER_SIZE
也与纹理的 存储空间 的大小无关(不是直接的)。这是对 buffer texture 尺寸的限制,它不是一维或二维纹理。仅当您的纹理是 GL_TEXTURE_BUFFER
类型时才重要,这与 GL_TEXTURE_1D
或 GL_TEXTURE_2D
.
其中none个问题与NPOT纹理有关。这只是取消了纹理尺寸为 2 的幂的限制。