据我所知,glActiveTexture
设置活动的“纹理单元”。每个纹理单元可以有多个纹理目标(通常是 GL _ TEXTURE _ 1D、2D、3D 或 CUBE _ MAP)。
如果我理解正确,你必须先调用 glActiveTexture
来设置纹理单元(初始化为 GL_TEXTURE0
) ,然后你绑定(一个或多个)“纹理目标”到该纹理单元?
可用的纹理单元的数量取决于系统。我在我的图书馆中看到多达32个枚举。我想这本质上意味着我可以有我的 GPU 的极限较小(我认为是 168)和32纹理在 GPU 内存在任何时候?我想还有一个额外的限制,我不超过我的 GPU 的最大内存(大概1GB)。
我是否正确理解了纹理目标和纹理单元之间的关系?假设我可以拥有16个单位,每个单位4个目标,这是否意味着可以容纳16 * 4 = 64个目标,或者它不是这样工作的?
接下来,您通常希望加载纹理。你可以通过 glTexImage2D
做到这一点。第一个参数是纹理目标。如果这个 就像 glBufferData
一样,那么我们实际上绑定“句柄”/“纹理名称”到纹理目标,然后将纹理数据加载到该目标中,从而间接地将它与该句柄关联起来。
glTexParameter
呢?我们必须绑定一个纹理目标,然后再次选择相同的目标作为第一个参数?或者纹理目标不需要被绑定,只要我们有正确的活动纹理单元?
glGenerateMipmap
操作一个目标太... 该目标仍然必须绑定到纹理名称为它成功?
然后,当我们想绘制我们的纹理对象,我们必须选择一个活动的纹理单元,然后纹理目标?或者我们选择一个纹理单元,然后我们可以从与该单元相关的4个目标中的任何一个获取数据?这就是让我困惑的地方。