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