0

我在我的代码中使用 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, 0.0),
    vec3(0.0, 0.0, 1.0)
);

void main() {
    gl_Position = vec4(positions[gl_VertexIndex], 0.0, 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);
}
4

1 回答 1

1

我在我的代码中使用 glslang SDK 来在线编译着色器程序,显然在 glslang 代码中你必须手动调整一些限制参数,以便 glslang 接受通常不接受的着色器变量,这个问题通过设置如下maxDrawBuffers来解决true

resources = DefaultTBuiltInResource;

resources.maxDrawBuffers = true;

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

于 2020-10-28T06:06:41.187 回答