[英]Is there any limitation of using sampler2D array in OpenGL
我在我的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)上運行嗎?
那其他硬件呢?
我可以使用的紋理數量是否有限制?
可以創建多少個紋理沒有限制,但是着色器可以同時使用多少個紋理沒有限制。 這是由MAX_TEXTURE_IMAGE_UNITS
定義的。 在OpenGL 4.X中,盡管GPU可能允許您使用更多紋理,但至少可以使用16個紋理。 在撰寫本文時,任何硬件都不太可能允許您同時采樣80個紋理。
當需要更多紋理時,應考慮使用至少支持256層的陣列紋理 。 另一種選擇是將紋理合並為3D紋理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.