0

我目前正在学习 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, 0, width, height, BLACK);
        EndTextureMode();

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

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

    CloseWindow();
}

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

#version 100

void main() {
}
4

0 回答 0