我发现令人惊讶的是令人沮丧的是,很难找到诸如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)。

07-26 09:20