我已经看到许多示例来硬编码程序中纹理单元的数量。例如:
glActiveTexture(GL_TEXTURE0 + 0);
glBindTexture(GL_TEXTURE_2D, object1BaseImage);
glActiveTexture(GL_TEXTURE0 + 2);
glBindTexture(GL_TEXTURE_2D, object1NormalMap);
glActiveTexture(GL_TEXTURE0 + 4);
glBindTexture(GL_TEXTURE_2D, shadowMap);
问题是两个同时使用的纹理在渲染场景时可能会因为使用相同的纹理单元而相互冲突。我的问题是如何通过实现类或函数来自动分配 OpenGL 中的纹理单元?因为有许多不同的常量定义了我可以使用多少个采样器对象:
GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS,
GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS,
GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS,
GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS,
GL_MAX_TEXTURE_IMAGE_UNITS and
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS.
我对常数感到困惑,不应该有一个常数GL_MAX_FRAGMENT_TEXTURE_IMAGE_UNITS
吗?我想我需要在分配纹理单元时获得最大数量的纹理单元。所以有两个问题:
- 如何理解上面提到的六个常数,为什么没有一个名为 的常数
GL_MAX_FRAGMENT_TEXTURE_IMAGE_UNITS
。 - 如何编写一个类或函数使用常量自动分配纹理单元。
有任何想法吗?代码片段将不胜感激。