Irrlicht fails to create a GLX context when passed a SDL2-created Window

601 Views Asked by At

I am trying to get Irrlicht to be using a window I created using SDL2 under X11, but it fails within Irrlicht at GLXCreateWindow.

On my box the following MCVE reproduces the issue:

#include <irrlicht/irrlicht.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_syswm.h>

int main()
{
    SDL_Init(SDL_INIT_VIDEO);

    SDL_Window* window = SDL_CreateWindow("Hello",
        SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
        800, 600,
        SDL_WINDOW_OPENGL);

    if (!window)
    {
        return false;
    }

    SDL_SysWMinfo wm_info;
    SDL_VERSION(&wm_info.version);

    if (!SDL_GetWindowWMInfo(window, &wm_info))
    {
        return false;
    }

    irr::SIrrlichtCreationParameters params;
    params.DeviceType = irr::EIDT_BEST;
    params.DriverType = irr::video::EDT_OPENGL;
    params.WindowSize = { 800, 600 };
    params.WindowId = reinterpret_cast<void*>(wm_info.info.x11.window);
    irr::createDeviceEx(params);
}

This results in the following error:

Irrlicht Engine version 1.9.0
Linux 4.16.16-1-ck #1 SMP PREEMPT Tue Jun 19 20:30:54 CEST 2018 x86_64
X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  152 (GLX)
  Minor opcode of failed request:  31 (X_GLXCreateWindow)
  Serial number of failed request:  364
  Current serial number in output stream:  365

If you comment out the WindowId set Irrlicht will create its own window, which succeeds.

Irrlicht Engine version 1.9.0
Linux 4.16.16-1-ck #1 SMP PREEMPT Tue Jun 19 20:30:54 CEST 2018 x86_64
Using renderer: OpenGL 4.4
Radeon RX 580 Series (POLARIS10, DRM 3.23.0, 4.16.16-1-ck, LLVM 7.0.0): X.Org
OpenGL driver version is 1.2 or better.
GLSL version: 4.4

I tried to troubleshoot the issue but unfortunately I have no idea how to debug X11 errors like those. However, as per the docs, "BadMatch is generated if win was not created with a visual that corresponds to config, or if config does not support rendering to windows (i.e., GLX_DRAWABLE_TYPE does not contain GLX_WINDOW_BIT)."

Some of my attempts included, to no avail:

  • Setting params.Bits to 16, 24 and 32.
  • Using Irrlicht 1.7 and 1.9.0 SVN (built as of today).
  • Setting the Irrlicht render backend to software rendering works, as it doesn't try to create a GLX context.
  • Setting params.LoggingLevel = ELL_DEBUG; as it would hopefully print useful info on the problem, but doesn't.
  • Setting params.IgnoreInput = true;.
  • Toggling the SDL_WINDOW_OPENGL flag in SDL_CreateWindow.
  • Using apitrace to try to figure out details on errors, or at least obviously invalid parameters, but I couldn't find it out, especially as it doesn't seem to simply track X11 calls, only GLX and OpenGL calls.
0

There are 0 best solutions below