// 激活0号纹理单元,把rawData纹理数据绑定到0号纹理单元
glActiveTexture(GLenum(GL_TEXTURE0))
glBindTexture(GLenum(GL_TEXTURE_2D), texture)
glTexImage2D(GLenum(GL_TEXTURE_2D), 0, GL_RGBA, GLsizei(width), GLsizei(height), 0, GLenum(GL_RGBA), GLenum(GL_UNSIGNED_BYTE), rawData)
// 激活1号纹理单元,把rawData纹理数据绑定到1号纹理单元
glActiveTexture(GLenum(GL_TEXTURE1))
glBindTexture(GLenum(GL_TEXTURE_2D), texture)
glTexImage2D(GLenum(GL_TEXTURE_2D), 0, GL_RGBA, GLsizei(width), GLsizei(height), 0, GLenum(GL_RGBA), GLenum(GL_UNSIGNED_BYTE), rawData)
// 激活2号纹理单元,把rawData纹理数据绑定到2号纹理单元
glActiveTexture(GLenum(GL_TEXTURE2))
glBindTexture(GLenum(GL_TEXTURE_2D), texture)
glTexImage2D(GLenum(GL_TEXTURE_2D), 0, GL_RGBA, GLsizei(width), GLsizei(height), 0, GLenum(GL_RGBA), GLenum(GL_UNSIGNED_BYTE), rawData)
// 设置caodi采样器采样的第0号纹理单元
shader.setInt(name: "caodi", value: 0)
// 设置huangtu采样器采样的第1号纹理单元
shader.setInt(name: "huangtu", value: 1)
// 设置noise采样器采样的第2号纹理单元
shader.setInt(name: "noise", value: 2)
func setInt(name:String, value:Int) {
//通过location设置uniform的值
glUniform1i(glGetUniformLocation(shaderProgram, name), GLint(value))
}
#version 300 es
precision mediump float;
out vec4 FragColor;
in vec2 uv;
// 草地采样器/
uniform sampler2D caodi;
// 黄土采样器
uniform sampler2D huangtu;
// 噪声采样
uniform sampler2D noise;
void main()
{
// 从一张纹理图片中采样uv对应位置的颜色
vec4 caodiColor = texture(caodi, uv);
vec4 huangtuColor = texture(huangtu, uv);
vec4 noiceColor = texture(noise, uv);
// 将三张纹理图片的颜色混合
vec4 finalColor = mix(caodiColor, huangtuColor, noiceColor.r);
FragColor = vec4(finalColor.rgb, 1.0);
}