-1

我知道如何加载纹理

std::unique_ptr<glimg::ImageSet> pImgSet(glimg::loaders::dds::LoadFromFile("test.dds"));
GLuint tex = glimg::CreateTexture(pImgSet.get(), 0);

但是我如何把这个纹理放到我的着色器中呢? GL Image - 非官方的 OpenGL SDK

4

1 回答 1

2

将纹理绑定到纹理单元,例如单元 0:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex);

为着色器添加sampler2D制服:

uniform sampler2D myTexture;

将 uniform 设置为纹理单元的编号,为整数:

glUseProgram(program);
GLint location = glGetUniformLocation(program, "myTexture");
glUniform1i(location, 0);

在着色器中,用于texture2D对其进行采样,例如:

gl_FragColor = texture2D(myTexture, texCoords);

要知道的关键是sampler2D制服可以设置为整数;将其设置为 1 意味着使用绑定到 的纹理GL_TEXTURE1,依此类推。uniform 的值默认为 0,激活的纹理单元默认为GL_TEXTURE0,所以如果你只使用一个纹理单元,你甚至不需要设置 uniform。

于 2013-05-20T18:59:05.497 回答