繁体   English   中英

OpenGL 多个 Sampler2D(数组)示例?

[英]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。

对于像这样的着色器声明:

...您无需指定下标即可获得数组的统一位置:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM