C++ 如何在GTK3上强制核心opengl配置文件?(第330版)
下面是我如何创建GTK OpenGL上下文的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
#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。