在OpenGL中使用sampler2D数组是否有任何限制

时间:2019-07-16 08:13:15

标签: opengl glsl

我在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)上可以使用吗?

其他硬件呢?

我可以使用的纹理数量是否有限制?

1 个答案:

答案 0 :(得分:2)

可以创建多少个纹理没有限制,但着色器可以同时使用多少个纹理没有限制。这由MAX_TEXTURE_IMAGE_UNITS定义。在OpenGL 4.X中,尽管GPU可能允许您使用更多纹理,但至少可以使用16个纹理。在撰写本文时,任何硬件都不太可能允许您同时对80个纹理进行采样。

当您需要更多纹理时,应该考虑使用支持至少256层的array texture。另一种选择是将纹理合并为3D纹理。