Пример #1
0
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);
}
Пример #2
0
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));
}
Пример #3
0
bool
TopCanvas::CheckResize()
{
  return CheckResize(GetNativeSize());
}