You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java/Android Studio中使用OpenGL ES 2.0绘制2D纹理图片

问题排查与修复方案

1. 确认着色器编译、程序链接无错误

首次使用OpenGL着色器必须加状态校验逻辑,避免编译/链接失败导致代码不生效:

  • 着色器编译完成后调用GLES20.glGetShaderiv(shaderId, GLES20.GL_COMPILE_STATUS, status, 0)检查编译状态,若返回失败可通过GLES20.glGetShaderInfoLog(shaderId)获取错误详情
  • 程序链接完成后调用GLES20.glGetProgramiv(programId, GLES20.GL_LINK_STATUS, status, 0)检查链接状态

2. 补全纹理初始化参数

OpenGL ES 2.0默认纹理采样参数需要MIPMAP支持,若你没有生成MIPMAP、或使用了非2次幂尺寸的纹理,会直接导致纹理渲染失败。在纹理初始化绑定后添加如下参数配置:

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);

3. 给color uniform赋值

你当前的片元着色器逻辑是纹理采样结果乘color变量,若没有给color赋值,默认值为全透明的(0,0,0,0),会导致纹理完全不可见。在draw方法中添加如下代码:

GLES20.glUniform4f(color_uniform, 1.0f, 1.0f, 1.0f, 1.0f);

4. 检查纹理坐标正确性

确认texture_buffer中存储的纹理坐标范围正确,常规矩形的四个顶点纹理坐标应为(0,0)、(1,0)、(1,1)、(0,1),和顶点坐标一一对应,避免坐标翻转或范围超出导致采样全黑/透明。

5. 补全顶点属性释放逻辑

你当前绘制完成后仅释放了position的顶点属性,没有释放纹理坐标属性,可能导致后续其他绘制逻辑异常,在draw方法末尾添加:

GLES20.glDisableVertexAttribArray(tex_position);

6. 校验纹理加载状态

确认纹理加载完成后texture.texture_id不为0,加载完成后可调用GLES20.glGetError()检查是否有纹理加载相关的报错。

内容的提问来源于stack exchange,提问作者user3684046

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:06:06