GLSL 460顶点着色器编译报错:texture2D无匹配重载函数求助
问题分析与解决方案
错误根源
texture2D函数已废弃:GLSL 1.30及以上版本(含你使用的460)中,旧版纹理采样函数如texture2D、texture3D已被统一的texture()函数取代,编译器找不到匹配的texture2D重载,触发第一个错误。- 类型不匹配错误:由于
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
相关产品推荐
相关产品推荐

