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

OpenGL ES编译着色器提示texture未声明标识符等错误如何解决

问题解决方法

错误原因说明

两类报错均为OpenGL ES与桌面版OpenGL的GLSL语法差异导致:

  • 第一类精度报错:GLSL ES要求片段着色器必须显式声明浮点类型的默认精度,桌面版OpenGL 3.3内置了默认精度规则,因此不会触发报错。
  • 第二类采样函数报错:texture是桌面版GLSL和高版本GLSL ES 3.0+的采样函数名,OpenGL ES 2.0环境下的2D纹理采样函数名为texture2D。

修复方案(适配OpenGL ES 2.0,兼容性最广)

在着色器开头添加精度声明,同时替换采样函数即可,修复后完整代码如下:

// 声明浮点类型默认使用中等精度,平衡性能与渲染精度
precision mediump float;
varying vec2 TexCoords;
varying vec4 color;

uniform sampler2D text;
uniform vec3 textColor;

void main()
{    
    vec4 sampled = vec4(1.0, 1.0, 1.0, texture2D(text, TexCoords).r);
    color = vec4(textColor, 1.0) * sampled;
}

可选:适配OpenGL ES 3.0+的方案

如果运行环境支持OpenGL ES 3.0及以上,可以在开头指定版本声明,同时适配ES 3.0的输入输出语法即可保留texture函数写法:

#version 300 es
precision mediump float;
// ES 3.0用in替换旧版本的varying关键字
in vec2 TexCoords;
// 显式声明片段着色器输出变量
out vec4 FragColor;

uniform sampler2D text;
uniform vec3 textColor;

void main()
{    
    vec4 sampled = vec4(1.0, 1.0, 1.0, texture(text, TexCoords).r);
    FragColor = vec4(textColor, 1.0) * sampled;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:24:02