我发现令人惊讶的是,很难找到sampler2d数组的例子,例如
uniform sampler2D myTextureSampler[5];
如何存储这个的统一位置?:
gl.GetUniformLocation(program, "myTextureSampler")
只需使用:
gl.GetUniformLocation(program, "myTextureSampler[0]")
gl.GetUniformLocation(program2, "myTextureSampler[2]")
如何使用这样的多个纹理:
gl.BindTexture(gl.TEXTURE_2D, 1)
gl.BindTexture(gl.TEXTURE_2D, 2)
等。
gl.ActiveTexture(gl.TEXTURE0)
gl.ActiveTexture(gl.TEXTURE1)
等。
注意:此代码不是纯c ++ opengl。只是寻找关于它将如何完成的基本概念。
传递一个简单的例子,获得sampler2d数组的统一位置会很棒。有没有人有这方面的经验?
答案 0 :(得分:2)
我认为它与所有其他着色器数组访问相同,并且:
glGetUniformLocation(program, "myTextureSampler[0]");
会奏效。
要使用多个纹理,您应该首先将纹理设置为活动的插槽:
glActiveTexture(GL_TEXTURE0);
然后你可以绑定你的纹理:
glBindTexture(GL_TEXTURE_2D, texture.handle);
第二个参数是你从glGenTextures()得到的句柄。
然后通过调用:
将sampler2D与适当的纹理匹配glUniform1i(location, 0);
第一个参数是您从调用GetUniformLocation()返回的位置。 第二个参数是活动纹理槽(在本例中为GL_TEXTURE0)。