2016-12-27 88 views
5

我有一个问题,因为我目前在Windows 10上运行Ubuntu终端。我还将XMing安装为我的X服务器(我使用XMing for qemu,等等...)。我正在尝试运行这个SDL2程序。所以我有这样的main.cpp中:SDL2无法创建窗口,因为它找不到匹配的GLX视觉

#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但不能似乎找到了解决办法。帮助将不胜感激!

+0

我之前曾经有过这样的错误,造成没有提供足够的图形驱动程序或设备,因为我想通过一个糟糕来运行它配置的虚拟机。对不起,我不能更具体。 – ygrichman

+0

@ygrichman嗯...嗯,这只是一个你好世界的应用程序,我想我有一个很好的图形卡。这是Wsl,所以它在windows上不是虚拟的 – amanuel2

回答

6

确保通过运行glxinfo正确安装GLX。在底部,您会看到支持的视觉效果列表。这里是我的:

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硬编码视觉到视觉ID:

export SDL_VIDEO_X11_VISUALID=0x022