【问题标题】:Calling glBindImageTexture() terminates program [closed]调用 glBindImageTexture() 终止程序 [关闭]
【发布时间】:2021-07-07 03:32:46
【问题描述】:

我的目标是通过 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

【问题讨论】:

    标签: c++ opengl glfw compute-shader glad


    【解决方案1】:

    glBindImageTexture() 仅在 GL 4.2+ 中可用。然而,您正在请求 GL 3.3 上下文:

    ...
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    GLFWwindow* window = glfwCreateWindow(800, 600, "Hello", nullptr, nullptr);
    ...
    

    如果您想使用 glBindImageTexture(),请请求 4.2+ 上下文。

    如果您想继续使用您的 GL 3.3 代码,请使用 ARB_shader_image_load_store 扩展入口点。

    【讨论】:

    • 无绑定纹理不会使图像加载/存储自动可用。链接页面中标题为“与 OpenGL 4.2 的交互,ARB_shader_image_load_store”的部分进一步解释。
    • 哦,你说得对。我忘记了这一切,甚至没有注意到。非常感谢,这解决了我的问题!
    猜你喜欢
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多