如何在LWJGL中将纹理绑定到textureUnit

时间:2014-08-22 19:03:23

标签: opengl textures shader

我现在知道如何在openGL着色器代码中使用sampler2D对象,但是我想在LWJGL中使用它,并且在Internet上找不到任何简单的代码或教程,其中只显示了重要的行。我知道您必须使用

将单元号绑定到sampler2D单元的位置
int loc = getUniformAdress(uniformName);
glUniform1i(loc, unitNr);

然后我还找到了像

这样的代码段
glActiveTexture(GL_TEXTURE0 + unitNr);

最后我知道,毕竟你必须通过

将纹理的整数值绑定到单位
glBindTexture(GL_TEXTURE_2D, textureLoc);

但对我来说,仍然不清楚如何混合所有这些以及如何加载图片并使textureLoc值可用。

对此有基本知识的人可能只是给我一个代码示例如何做到这一点?我不需要着色器编码器或类似的东西,只是如何将纹理文件(可能是PNG)绑定到着色器。

1 个答案:

答案 0 :(得分:1)

我不会写很多Java,但怀疑OpenGL调用的顺序在不同语言中是相同的。

初始化需要在程序运行中至少执行一次,通常在开始时。

  1. 使用glActiveTexture选择纹理单元。所有后续调用都将影响此单位。
  2. 创建一个纹理对象,用glBindTexture绑定它。
  3. 设置滤波模式,钳位模式等纹理参数,并使用glTexImage2d提供图像。
  4. 设置所有其他内容,如着色器程序等。
  5. 在渲染帧功能中:

    1. 选择使用glUseProgram
    2. 纹理的程序对象
    3. 如果需要,将纹理重新绑定到纹理单元(如果您的布局不是经常更改,之前的初始化就足够了),请使用glActiveTexture / glBindTexture。
    4. 使用glUniform *函数设置制服(同样,如果您的布局没有改变,您可以将其移至初始化)
    5. 其他序列也是可能的。我还建议再看一下http://www.opengl.org/wiki/GLSL_Sampler#Binding_textures_to_samplers