我目前正在学习 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() {
}