SDL2 Не удается создать окно, так как не удалось найти соответствующий визуальный элемент GLX.

У меня проблема, так как в настоящее время я использую Ubuntu Terminal в Windows 10. У меня также установлен XMing в качестве моего X-сервера (я использую XMing для qemu и т. д.). И я пытаюсь запустить эту программу SDL2. Итак, у меня есть это для main.cpp:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

#include <SDL2/SDL.h> 
#include <GL/gl.h> 

int main(int argc, char *argv[]) 
{ 
        int final_status = 1; 
        SDL_Window *window; 
        SDL_GLContext openGL_context; 

        if (SDL_Init(SDL_INIT_VIDEO)) { 
                fprintf(stderr, "Unable to initialize SDL: %s\n", 
                        SDL_GetError()); 
                return 1; 
        } 
        window = SDL_CreateWindow("My Demo", SDL_WINDOWPOS_CENTERED, 
                                  SDL_WINDOWPOS_CENTERED, 640, 480, 
                                  SDL_WINDOW_OPENGL); 
        if (!window) { 
                fprintf(stderr, "Can't create window: %s\n", SDL_GetError()); 
                goto finished; 
        } 

        openGL_context = SDL_GL_CreateContext(window); 
        if (!openGL_context) { 
                fprintf(stderr, "Can't create openGL context: %s\n", 
                        SDL_GetError()); 
                goto close_window; 
        } 

        /* drawing code removed */ 

        final_status = 0; 
        SDL_GL_DeleteContext(openGL_context); 
close_window: 
        SDL_DestroyWindow(window); 
finished: 
        SDL_Quit(); 
        fprintf(stdout, "done\n"); 
        fflush(stdout); 
        return final_status; 
}  

И затем, когда я запускаю g++ main.cpp -lSDL2 , я получаю этот вывод:

Can't create window: Couldn't find matching GLX visual
done

Я пытался найти, как решить эту проблему GLX, но не могу найти для нее решения. Помощь будет принята с благодарностью!


person amanuel2    schedule 27.12.2016    source источник
comment
У меня была эта ошибка однажды раньше, вызванная отсутствием достаточного графического драйвера или устройства, поскольку я пытался запустить его через плохо настроенную виртуальную машину. Извините, что не могу быть более конкретным.   -  person ygrichman    schedule 06.01.2017
comment
@ygrichman хм ... Ну, это просто приложение для приветствия, и я думаю, что у меня хорошая видеокарта. И это Wsl, так что он не виртуальный, а Windows.   -  person amanuel2    schedule 06.01.2017
comment
У меня также есть ошибка для более сложного кода на виртуальной машине. Однако приведенный выше код не дает мне ошибки.   -  person user2023370    schedule 15.08.2018
comment
У меня также есть такая же ошибка при попытке создать контекст OpenGL с 32-битным буфером глубины, глядя с помощью glxinfo и выясняя, что поддерживаются только 16 и 24   -  person leanid.chaika    schedule 04.01.2020


Ответы (1)


Убедитесь, что GLX установлен правильно, запустив glxinfo. Внизу вы найдете список поддерживаемых визуальных элементов. Вот мой:

1 GLX Visuals
    visual  x   bf lv rg d st  colorbuffer  sr ax dp st accumbuffer  ms  cav
  id dep cl sp  sz l  ci b ro  r  g  b  a F gb bf th cl  r  g  b  a ns b eat
----------------------------------------------------------------------------
0x022 24 tc  0  24  0 r  y .   8  8  8  0 .  .  0 16  0  0  0  0  0  0 0 None

Попробуйте выполнить следующее перед запуском программы SDL2:

export SDL_VIDEO_X11_VISUALID=

Это заставляет SDL идти по другому пути кода, чтобы найти визуал. Вы также можете попробовать жестко закодировать визуальный элемент для визуального идентификатора из glxinfo:

export SDL_VIDEO_X11_VISUALID=0x022
person kill -1    schedule 12.03.2017