获取“位置”:对于使用glslang

问题描述

我在代码中使用glslang SDK在线编译着色器程序,但是我的片段着色器出现以下错误

GLSL解析失败:Text.frag错误:0:6:“位置”:太大 对于片段输出错误:1个编译错误。没有代码生成

GLSL链接失败:Text.frag错误:0:6:“位置”:太大 对于片段输出错误:1个编译错误。没有代码生成

断言失败:node-> getop(),文件 C:\ projects \ glslang \ SPIRV \ GlslangToSpv.cpp,第2412行

我的顶点着色器:

#version 450
#extension GL_ARB_separate_shader_objects : enable

layout(location = 0) out vec3 fragColor;

vec2 positions[3] = vec2[](
    vec2(0.0,-0.5),vec2(0.5,0.5),vec2(-0.5,0.5)
);

vec3 colors[3] = vec3[](
    vec3(1.0,0.0,0.0),vec3(0.0,1.0,1.0)
);

void main() {
    gl_Position = vec4(positions[gl_VertexIndex],1.0);
    fragColor = colors[gl_VertexIndex];
}

我的片段着色器

#version 450
#extension GL_ARB_separate_shader_objects : enable

layout(location = 0) in vec3 fragColor;

layout(location = 0) out vec4 outColor;

void main() {
    outColor = vec4(fragColor,1.0);
}

解决方法

我在我的代码中使用glslang SDK在线编译着色器程序,显然在glslang代码中,您必须手动调整一些限制参数才能使glslang接受通常不接受的着色器变量,此问题已通过设置{{ 1}}到maxDrawBuffers如下

true

我不确定这样做到底是什么,以及为什么它不是本机设置的,但也许有人可以进一步解释。