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

GLSL 460顶点着色器编译报错:texture2D无匹配重载函数求助

问题分析与解决方案

错误根源

  1. texture2D函数已废弃:GLSL 1.30及以上版本(含你使用的460)中,旧版纹理采样函数如texture2D、texture3D已被统一的texture()函数取代,编译器找不到匹配的texture2D重载,触发第一个错误。
  2. 类型不匹配错误:由于texture2D无法被正确解析,编译器返回了错误的结果类型(推测为默认float),而你试图将其赋值给vec4类型的输出变量,因此触发类型转换错误,最终终止编译。

修复代码

将所有texture2D调用替换为texture()即可解决问题,修改后的完整代码如下:

#version 460
//Passes variables from uniforms to frag_hud shader

layout(location = 0) in vec3 pos;
layout(location = 1) in vec2 vert_tex_coord;

uniform float vert_col_dist;
uniform sampler2D vert_hud01;
uniform sampler2D vert_hud02;
uniform sampler2D vert_hud03;

out vec2 tex_coord;
out float col_dist;
out vec4 hud01;
out vec4 hud02;
out vec4 hud03;

void main() {
    gl_Position = vec4(pos, 1.0);
    tex_coord = vec2(vert_tex_coord.x, vert_tex_coord.y);
    col_dist = vert_col_dist;
    hud01 = texture(vert_hud01, vert_tex_coord);
    hud02 = texture(vert_hud02, vert_tex_coord);
    hud03 = texture(vert_hud03, vert_tex_coord);
}

额外说明

  • GLSL 1.30起引入通用纹理采样函数texture(),它会根据传入的采样器类型(sampler2D、sampler3D等)自动匹配对应采样逻辑,无需再区分texture2D/texture3D等函数。
  • 若需兼容更低版本GLSL,可保留texture2D并将版本声明改为#version 120或更早,但使用460版本时,推荐采用现代的texture()函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:05:21