OpenGL多个Sampler2D(数组)示例?

时间:2016-07-05 12:05:41

标签: opengl graphics shader

我发现令人惊讶的是,很难找到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数组的统一位置会很棒。有没有人有这方面的经验?

1 个答案:

答案 0 :(得分:2)

我认为它与所有其他着色器数组访问相同,并且:

glGetUniformLocation(program, "myTextureSampler[0]");

会奏效。

要使用多个纹理,您应该首先将纹理设置为活动的插槽:

glActiveTexture(GL_TEXTURE0);

然后你可以绑定你的纹理:

glBindTexture(GL_TEXTURE_2D, texture.handle);

第二个参数是你从glGenTextures()得到的句柄。

然后通过调用:

将sampler2D与适当的纹理匹配
glUniform1i(location, 0);

第一个参数是您从调用GetUniformLocation()返回的位置。 第二个参数是活动纹理槽(在本例中为GL_TEXTURE0)。