我试图摆脱碎片着色器中的分支逻辑,所以我尝试说uniform sampler2d texunit[6];
,然后使用frag=texture(texunit[id],vtex);
访问它,其中id
是{{ 1}}(来自顶点着色器)。它运行没有错误,但是没有画任何东西。
Google并没有太大帮助,只是有人说如果在运行时知道索引就可以,但是我不知道它们的含义。
编辑:为了更全面,这里是相关的客户端代码: glUniform1i(glGetUniformLocation(shaderid,“ texture_unit [0]”,0),0); 等等,只需将0替换为相关ID。
编辑:我按应有的方式工作了。我以前不知道怎么了。但它可以正常工作,sampler2DArray [id]
edit:我确定了起初为什么不起作用的原因:当您选择使用sampler2d或sampler2darray中的哪个索引时,要选择哪个tex单位,那就是唯一可以在碎片着色器中使用的索引。幸运的是,您可以使用变量,但是您不能在其他地方使用文字,否则它将损坏。