我在glsl程序中使用了sampler2d数组:
uniform sampler2D diffuseMaps[100];
我通过了如下的纹理:
for (int i = 0 ; i < textures.size() ; i++)
{
glActiveTexture(GL_TEXTURE0 + i);
glBindTexture(GL_TEXTURE_2D, textures[i]->textureId);
std::string name = "diffuseMaps[" + std::to_string(i) + "]";
GLuint loc = glGetUniformLocation(shader->getHandle(), name.c_str());
glUniform1i(loc, i);
}
效果很好,我具有 80个纹理,并且OpenGl的索引不超过 GL_TEXTURE31 。
仅在我的硬件(GTX 1070Ti)上可以使用吗?
其他硬件呢?
我可以使用的纹理数量是否有限制?
答案 0 :(得分:2)
可以创建多少个纹理没有限制,但着色器可以同时使用多少个纹理没有限制。这由MAX_TEXTURE_IMAGE_UNITS
定义。在OpenGL 4.X中,尽管GPU可能允许您使用更多纹理,但至少可以使用16个纹理。在撰写本文时,任何硬件都不太可能允许您同时对80个纹理进行采样。
当您需要更多纹理时,应该考虑使用支持至少256层的array texture。另一种选择是将纹理合并为3D纹理。