[英]OpenGL multiple Sampler2D (array) examples?
我感到非常沮丧,因为很难找到 sampler2d arrays 的示例,例如
uniform sampler2D myTextureSampler[5];
如何存储这个的统一位置?:
gl.GetUniformLocation(program, "myTextureSampler")
一个人会简单地使用:
gl.GetUniformLocation(program, "myTextureSampler[0]")
gl.GetUniformLocation(program2, "myTextureSampler[2]")
一个 go 如何使用像这样的多个纹理:
gl.BindTexture(gl.TEXTURE_2D, 1)
gl.BindTexture(gl.TEXTURE_2D, 2)
ETC..
gl.ActiveTexture(gl.TEXTURE0)
gl.ActiveTexture(gl.TEXTURE1)
ETC..
注意:此代码不是纯 c++ opengl。只是寻找有关如何完成的基本概念。
传递一个简单的例子,为 sampler2d 数组获取统一位置会很棒。 有没有人有这方面的经验?
我认为它与所有其他着色器数组访问相同,并且:
glGetUniformLocation(program, "myTextureSampler[0]");
会工作。
要使用多个纹理,您应该首先将要放置纹理的插槽设置为活动状态:
glActiveTexture(GL_TEXTURE0);
然后你可以绑定你的纹理:
glBindTexture(GL_TEXTURE_2D, texture.handle);
第二个参数是您从glGenTextures()
获得的句柄。
然后通过调用将sampler2D
与适当的纹理匹配:
glUniform1i(location, 0);
第一个参数是您从调用glGetUniformLocation()
返回的位置。 第二个参数是活动纹理槽(在本例中为GL_TEXTURE0
)。
目前的答案已经在这里很长时间了,但并不正确。
您使用的是统一的 arrays。
对于像这样的着色器声明:
uniform sampler2D myTextureSampler[5];
...您无需指定下标即可获得数组的统一位置:
glGetUniformLocation(my_uniform, "myTextureSampler");
...然后从一个数组中通过一次操作设置它的值:
GLfloat values[5] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f};
glUniform1fv(my_uniform, 5, values);
文档: https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glUniform.xhtml
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.