我发现令人惊讶的是令人沮丧的是,很难找到诸如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数组的统一位置将非常棒。有人有经验吗?
最佳答案
我认为它与所有其他着色器数组访问相同,并且:
glGetUniformLocation(program, "myTextureSampler[0]");
将工作。
要使用多个纹理,应首先设置要用于激活纹理的插槽:
glActiveTexture(GL_TEXTURE0);
然后可以绑定纹理:
glBindTexture(GL_TEXTURE_2D, texture.handle);
第二个参数是您从glGenTextures()获得的句柄。
然后,通过调用以下命令将sampler2D与适当的纹理进行匹配:
glUniform1i(location, 0);
第一个参数是您通过调用GetUniformLocation()返回的位置。
第二个参数是 Activity 纹理插槽(在这种情况下为GL_TEXTURE0)。