C++ 如何在GTK3上强制核心opengl配置文件?(第330版)

C++ 如何在GTK3上强制核心opengl配置文件?(第330版),c++,opengl,gtk,C++,Opengl,Gtk,下面是我如何创建GTK OpenGL上下文的 #include <GL/glew.h> #include <GL/glx.h> #... void OpenGLArea::on_realize() { Gtk::DrawingArea::on_realize(); on_glx_init(); // Initialize GLEW glewExperimental = true; // Needed for core profile

下面是我如何创建GTK OpenGL上下文的

#include <GL/glew.h>
#include <GL/glx.h>
#...

void OpenGLArea::on_realize()
{
    Gtk::DrawingArea::on_realize();

    on_glx_init();

    // Initialize GLEW
    glewExperimental = true; // Needed for core profile
    if (glewInit() != GLEW_OK)
    {
        throw std::runtime_error("Failed to initialize GLEW");
    }

    std::cout << "Vendor: ........... " << glGetString(GL_VENDOR) << std::endl;
    std::cout << "Renderer: ......... " << glGetString(GL_RENDERER) << std::endl;
    std::cout << "Version: .......... " << glGetString(GL_VERSION) << std::endl;
    std::cout << "GLSL version: ..... " << glGetString(GL_SHADING_LANGUAGE_VERSION) << std::endl;

    glInit();
}

void OpenGLArea::on_glx_init()
{
    GLint glx_attrs[] = {
        GLX_RGBA,
        GLX_RED_SIZE,
        8,
        GLX_GREEN_SIZE,
        8,
        GLX_BLUE_SIZE,
        8,
        GLX_ALPHA_SIZE,
        8,
        GLX_DEPTH_SIZE,
        24,
        GLX_STENCIL_SIZE,
        8,
        GLX_DOUBLEBUFFER,
        False,
        None,
    };

    xdisplay = GDK_WINDOW_XDISPLAY(Glib::unwrap(get_window()));
    drawable = GDK_WINDOW_XID(Glib::unwrap(get_window()));
    const std::unique_ptr<XVisualInfo, XVisualInfoDeleter> visual_info(glXChooseVisual(xdisplay, DefaultScreen(xdisplay), glx_attrs));

    if (!visual_info)
    {
        throw std::runtime_error("failed glXChooseVisual.");
    }

    context = glXCreateContext(xdisplay, visual_info.get(), nullptr, True);
    if (!context)
    {
        throw std::runtime_error("failed glXCreateContext.");
    }

    if (!glXMakeCurrent(xdisplay, drawable, context))
    {
        throw std::runtime_error("failed glXMakeCurrent.");
    }
}

但是,我无法在着色器中使用版本330。我已经搜索了很多地方,但我只能在GLEW中找到如何做到这一点。我想在GTK/GL库中做些什么我不知道如何区分什么是开放式GL,什么是GTK

我放弃了调整配置选项的尝试,只是简单地修改了这个示例:它很简单

一个示例注意上下文属性[],将大/小设置为3/3,并添加GLX\u上下文配置文件\u掩码\u ARB,GLX\u上下文\u核心\u配置文件\u位_ARB@Ripi2我找不到GTK3的类似函数。在本例中,它直接使用X11。