SDL2 无法创建窗口,因为它找不到匹配的 GLX 可视化界面。

14

我可以帮助您进行翻译,以下是关于it技术的内容。您需要在Windows 10上运行Ubuntu终端,并安装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问题,但似乎找不到解决方案。非常感谢您的帮助!


我之前遇到过这个错误,原因是没有足够的图形驱动程序或设备可用,因为我试图通过配置不良的虚拟机来运行它。很抱歉我不能更具体地说明。 - ygrichman
@ygrichman 嗯...好吧,这只是一个简单的“Hello World”应用程序,我认为我的显卡很不错。而且这是Wsl,所以它在Windows上而不是虚拟机中。 - amanuel2
我在虚拟机上运行更高级的代码时也遇到了错误,但是上面的代码并没有出现这个错误。 - user2023370
当我尝试创建32位深度缓冲的OpenGL上下文时,也遇到了相同的错误,使用glxinfo查看后发现只支持16位和24位。 - leanid.chaika
1个回答

17

运行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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接