我的目标是通过 C++ 和 OpenGL 使用计算着色器。问题是,当我在创建和初始化纹理后调用 glBindImageTexture() 时,它只会终止程序。我试着到处检查可能是罪魁祸首,但我无法追溯。我使用 glfw 作为我的窗口和上下文管理器,并很高兴(Core 4.6)作为 OpenGL 的包装器。(在我看来)代码的相关部分如下:
int tex_w = 512, tex_h = 512;
GLuint tex_output;
glGenTextures(1, &tex_output);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex_output);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, tex_w, tex_h, 0, GL_RGBA, GL_FLOAT,
nullptr);
glBindImageTexture(0, tex_output, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_RGBA32F);
这是我用来编译程序的命令(我在 Windows 上使用 MinGW,64 位):
g++ *.cpp *.c -o bin/main.exe -Iinclude -Llib -lmingw32 -lglfw3 -lopengl32 -lgdi32 -luser32
一切正常,直到调用最后一个函数。我已经检查过我的系统确实有 OpenGL 4.6(至少这是检查员告诉我的),所以它也应该有 glBindImageTexture。如果您认为问题不是来自这部分,这是我之前的所有代码:https ://pastebin.com/AYFaWpfL