【发布时间】:2013-07-04 16:57:20
【问题描述】:
我知道OpenGL 程序中可以有GL_MAX_TEXTURE_IMAGE_UNITS 纹理单元。但是让我们假设我只使用一个。
假设我有 5 个 2D 纹理。我可以将它们“映射”到单个纹理单元(TEXTURE0)以渲染所有它们吗?
我的意思是我会这样做:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex1);
//specify tex data and tex params for tex1
glBindTexture(GL_TEXTURE_2D, tex2);
//specify tex data and tex params for tex1
.. 以此类推所有 5 个纹理
渲染循环:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex1);
//draw
glBindTexture(GL_TEXTURE_2D, tex2);
//draw
..所有 5 个纹理以此类推
在片段着色器中,我只使用了 1 个初始化为零的 sampler2d 变量(对于纹理单元 0)
如果这不能正常工作,那么我应该使用 5 个不同的纹理单元 (TEXTURE0, TEXTURE0+1, ....TEXTURE0+5) 并将每个纹理“映射”到不同的纹理单元。
最重要的问题:如果我的第一种方法是正确的,我可以将多少个 2D 纹理(现在只讨论 2D 纹理)“映射”到一个纹理单元?
【问题讨论】:
-
嗯?你的意思是使用多重纹理而不使用多重纹理?您真正想要实现的目标是什么?"map" 对您的实际意义是什么?如果您的片段着色器只有一个
sampler2D,它怎么可能一次使用多个纹理?