如何修复“链接错误:不支持将 ES 着色器与非 ES 着色器链接”?

问题描述

我目前正在学习 OpenGL 和 C,但遇到了着色器链接问题。
我正在使用 GLSL 和 Raylib,我的目标是生成 Mandelbrot 集。
我的电脑运行 MacOS 10.12.6,带有 NVIDIA GeForce 320M 256 MB 显卡。
当我编译并运行程序时,我得到的只是没有着色器的黑色矩形纹理(在代码中指定),关闭时,此信息:

...
INFO: SHADER: [ID 1] Compiled successfully
INFO: SHADER: [ID 2] Compiled successfully
INFO: SHADER: [ID 3] Program loaded successfully
INFO: SHADER: [ID 3] Default shader loaded successfully
INFO: RLGL: Internal vertex buffers initialized successfully in RAM (cpu)
INFO: RLGL: Render batch vertex buffers loaded successfully
INFO: RLGL: Default state initialized successfully
INFO: TEXTURE: [ID 2] Texture created successfully (128x128 - 1 mipmaps)
INFO: FONT: Default font loaded successfully
INFO: FILEIO: [shader.glsl] Text file loaded successfully
INFO: SHADER: [ID 4] Compiled successfully
WARNING: SHADER: [ID 5] Failed to link shader program
WARNING: SHADER: [ID 5] Link error: ERROR: Error: Linking ES shaders with non-ES shaders is not supported.

WARNING: SHADER: Failed to load custom shader code
...

与着色器代码包含的内容无关,我总是收到此警告和相同的黑色窗口,但是当我的朋友编译并运行相同的代码时,没有出现此类错误。他正在运行 Linux 并使用 GCC 进行编译。

错误是关于链接 ES 着色器和非 ES 着色器,这不是我认为我所做的。我要做的就是将非 ES 着色器链接到我的 C 程序。 (至少我是这么认为的)

在网上查找,我根本找不到任何有类似问题的人,而且我对着色器缺乏经验也无济于事,所以我在这一点上很困惑。

任何帮助将不胜感激。

我的 C 代码

#include <raylib.h>

const int width = 1280;
const int height = 1280;

int main() {
    Initwindow(width,height,"brotshader");

    Shader shader = LoadShader(0,"shader.glsl");
    RenderTexture2D target = LoadRenderTexture(width,height);

    SetTargetFPS(60);

    while (!WindowShouldClose()) {
        BeginDrawing();

        ClearBackground(RAYWHITE);

        BeginTextureMode(target);
        DrawRectangle(0,width,BLACK);
        EndTextureMode();

        BeginShaderMode(shader);
        DrawTexture(target.texture,WHITE);
        EndShaderMode();

        EndDrawing();
    }
    UnloadShader(shader);
    UnloadRenderTexture(target);

    CloseWindow();
}

以及我的 GLSL 着色器文件内容(最小可重现示例):

#version 100

void main() {
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)