我知道如何加载纹理
std::unique_ptr<glimg::ImageSet> pImgSet(glimg::loaders::dds::LoadFromFile("test.dds"));
GLuint tex = glimg::CreateTexture(pImgSet.get(), 0);
但是我如何把这个纹理放到我的着色器中呢? GL Image - 非官方的 OpenGL SDK
我知道如何加载纹理
std::unique_ptr<glimg::ImageSet> pImgSet(glimg::loaders::dds::LoadFromFile("test.dds"));
GLuint tex = glimg::CreateTexture(pImgSet.get(), 0);
但是我如何把这个纹理放到我的着色器中呢? GL Image - 非官方的 OpenGL SDK
将纹理绑定到纹理单元,例如单元 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。