Inilah cara saya membuat konteks GTK OpenGL saya

#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.");
    }
}

Namun, saya tidak dapat menggunakan #version 330 di shader saya. Saya telah mencari di banyak tempat tetapi saya hanya dapat menemukan cara melakukannya di GLEW. Saya ingin melakukannya di perpustakaan GTK/GL (saya tidak tahu bagaimana membedakan apa yang dari Open GL dan apa yang dari GTK)

0
Guerlando OCs 8 Agustus 2019, 05:13

1 menjawab

Jawaban Terbaik

Saya berhenti mencoba mengubah opsi konfigurasi dan hanya memodifikasi contoh ini: https:// github.com/agrechnev/gtkmm-fun/tree/master/glarea0 yang hanya berfungsi

1
Lucas Zanella 9 Agustus 2019, 10:20