NPOT纹理的OpenGL最大纹理尺寸是多少?

时间:2018-09-12 20:30:58

标签: image opengl graphics textures

我知道我可以使用以下代码获取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平方,但超过侧面的最大值。

1 个答案:

答案 0 :(得分:2)

GL_MAX_TEXTURE_SIZE控制所有形式的1D和2D纹理的尺寸。它不在乎纹理占用了多少存储;大约是尺寸的大小。

GL_MAX_TEXTURE_BUFFER_SIZE与纹理的存储的大小无关(不是直接的)。这是buffer texture尺寸的限制,它不是1D或2D纹理。仅当您的纹理是GL_TEXTURE_BUFFER类型(与GL_TEXTURE_1DGL_TEXTURE_2D不同)时才重要。

这些问题都与NPOT纹理无关。那仅仅是消除了将纹理尺寸为2的幂的限制。