void TopCanvas::CreateGLX(_XDisplay *_x_display, X11Window x_window, GLXFBConfig *fb_cfg) { x_display = _x_display; glx_context = glXCreateNewContext(_x_display, *fb_cfg, GLX_RGBA_TYPE, nullptr, true); if (glx_context == nullptr) { fprintf(stderr, "Failed to create GLX context\n"); exit(EXIT_FAILURE); } glx_window = glXCreateWindow(_x_display, *fb_cfg, x_window, nullptr); XSync(x_display, false); if (!glXMakeContextCurrent(_x_display, glx_window, glx_window, glx_context)) { fprintf(stderr, "Failed to attach GLX context to GLX window\n"); exit(EXIT_FAILURE); } const PixelSize effective_size = GetNativeSize(); if (effective_size.cx <= 0 || effective_size.cy <= 0) { fprintf(stderr, "Failed to query GLX drawable size\n"); exit(EXIT_FAILURE); } OpenGL::SetupContext(); SetupViewport(effective_size); }
void TopCanvas::SetDisplayOrientation(DisplayOrientation orientation) { const auto native_size = GetNativeSize(); if (native_size.cx <= 0 || native_size.cy <= 0) return; OpenGL::display_orientation = orientation; SetupViewport(PixelSize(OpenGL::window_size.x, OpenGL::window_size.y)); }
bool TopCanvas::CheckResize() { return CheckResize(GetNativeSize()); }