【发布时间】:2020-03-31 09:45:21
【问题描述】:
我需要将两个纹理加载到着色器中,但是当应用程序启动时,第一个纹理显示正确,第二个只是一个黑色方块
加载纹理
GLES20.glGenTextures(1, textures, 0);
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bmp, 0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);
激活纹理
GLES20.glEnableVertexAttribArray(ShaderProgram.posHandle);
GLES20.glEnableVertexAttribArray(ShaderProgram.texcordHandle);
GLES20.glVertexAttribPointer(ShaderProgram.posHandle,3, GLES20.GL_FLOAT, false, 0, vbuffer);
GLES20.glVertexAttribPointer(ShaderProgram.texcordHandle,2, GLES20.GL_FLOAT, false, 0, tbuffer);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texture.getTexid());
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glUniform1i(ShaderProgram.texHandle, texture.getTexid());
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, blend.getTexid());
GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
GLES20.glUniform1i(ShaderProgram.tex01Handle, blend.getTexid());
GLES20.glDrawElements(GLES20.GL_TRIANGLES, 6, GLES20.GL_UNSIGNED_BYTE, ibuffer);
片段着色器
precision mediump float;
uniform sampler2D tex;
uniform sampler2D tx;
uniform vec4 u_color;
uniform float alpha;
varying vec2 v_tex;
void main(){
vec4 t = texture2D(tex, v_tex);
vec4 te = texture2D(tx, v_tex);
gl_FragColor = te;
}
【问题讨论】:
标签: java android android-studio opengl-es glsl