image - 带有 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_SIZE
Y 轴)。
编辑
为了让问题更清楚,我可以创建一个宽度 >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
控制所有形式的 1D 和 2D 纹理的尺寸。它不关心纹理占用多少存储空间;它大约是其尺寸的大小。
GL_MAX_TEXTURE_BUFFER_SIZE
也与纹理存储的大小无关(不直接)。它是对缓冲区纹理尺寸的限制,它不是 1D 或 2D 纹理。仅当您的纹理属于与orGL_TEXTURE_BUFFER
不同的类型时才重要。GL_TEXTURE_1D
GL_TEXTURE_2D
这些问题都与 NPOT 纹理无关。这仅仅是取消了纹理尺寸为 2 次方的限制。
推荐阅读
- javascript - 如何根据选择框中的值显示或隐藏行?
- nginx - NGINX如何仅在上游缓存被命中时添加标头?
- android - 具有 3gb ram 的设备会关闭应用程序(当内存填满时),而具有 2gb ram 的设备会永远运行它
- python - 使用 Selenium 进行 WebScraping:单击并打开按钮
- mysql - 我可以查询一个 SQL 数据库并一次合并四个表吗?
- javascript - 直接更改 CSS 样式表
- node.js - 在模型 \"user\"" 的路径 \"_id\" 处获取值 \"{ _id: 'allchatroom' }\" (type Object) 在 mongoose Cast to ObjectId 中的错误失败
- excel - VBA中的函数在hms中执行加法并推送导致单元格显示错误
- laravel - laravel + mix + vue 路由器错误:找不到导出“createStaticVNode”(导入为“_createStaticVNode”)
- javascript - 如何解决此问题“警告:失败的道具类型:道具`title`在`Tab`中标记为必填,但其值为`undefined`。”