我有点了解纹理阵列是什么,但在互联网上我无处可找到它们实际上是什么的信息.它们是否像一个大的纹理图集(单个连续的记忆块被划分为相同尺寸的部分),或者它们是否像纹理单元(完全独立的纹理,你可以同时绑定)?这个问题的结果是,单个纹理数组的大小限制是多少,以及如何有效地使用它们?例如,如果我的GPU处理4096x4096纹理和64个单位,我可以创建64个4096x4096纹理的纹理数组吗?或者是每个阵列的实际限制为4096*4096像素?或者别的什么?如何查询限制?
And*_*man 10
它们是图像阵列(该概念通常被称为分层图像,因为存在多种类型的纹理实际存储多个图像).数组纹理的特殊之处在于它的每个图层具有相同的尺寸.此外,尽管存储器的分配方式与3D纹理相同,但是对于数组纹理而言,跨图像层的过滤是不可能的,并且2D数组纹理的mipmap链仍然是2D.
有史以来引入的阵列纹理的第一种形式是立方体贴图,它有6个2D图层......但它也有一组特殊的查找函数,所以它远不是通用的2D数组纹理.
然而,您讨论的限制是数组纹理中的每个图像维度.也就是说,如果您的最大纹理大小为4096,则意味着对于最高细节的mipmap级别,2D纹理限制为每个图像 4096x4096 .
在你的阵列结构层不一样的纹理图像单位的.它们是单独的图像,但它们都属于单个纹理对象,可以绑定到单个纹理图像单元.
GLint max_layers;
glGetIntegerv (GL_MAX_ARRAY_TEXTURE_LAYERS, &max_layers);
Run Code Online (Sandbox Code Playgroud)
关于有效使用数组纹理的主题,您可以考虑一个名为稀疏数组纹理(via GL_ARB_sparse_texture)的新功能.
假设您想为4096 x 4096 x 64阵列纹理保留足够的存储空间,但实际上最初只使用了4或5个这些图层.通常情况下会非常浪费,但是使用稀疏纹理时,只有4或5层在使用中必须驻留(已提交).其余的层像操作系统中的需求页面虚拟内存一样处理; 在首次使用之前,实际上没有分配后备存储.
| 归档时间: |
|
| 查看次数: |
6625 次 |
| 最近记录: |