【发布时间】:2012-01-16 18:36:54
【问题描述】:
在我尝试在 Linux 下使用 SDL 制作一个简单的游戏时,我注意到使用普通的 X11 后端,它在 800x600x32 下以大约 60 FPS 的速度运行,在 1024x768x32 下以 20 FPS 左右的速度运行,这是相当不错的带有精灵和一些 32x32 瓷砖的简单 2D 游戏的大量下降。我做了一些研究,发现 X server 不允许他的客户端直接访问视频硬件,迫使程序使用软件表面和许多 CPU 周期。一些提供的解决方案据说将 envvar SDL_VIDEODRIVER 设置为“dga”,并使用 XFree86 DGA 驱动程序绕过 X 服务器。我已经安装了 DGA 开发包 libxxf86dga-dev(在 Ubuntu 下),但是当尝试这个时:
putenv("SDL_VIDEODRIVER=dga");
if(SDL_Init(SDL_INIT_VIDEO) == -1)
{
std::cout << "Init video error" << std::endl;
return -1;
}
程序刚刚退出,出现“没有可用的视频设备”错误。我已经给它超级用户权限,但它没有帮助。有任何想法吗?这种方法是否仍然有效,或者除了切换到 OpenGL 之外还有其他解决方案吗?我正在使用 SDL 1.2。
【问题讨论】:
-
你说程序出错退出,那是什么错误?
-
从谷歌的快速浏览来看,OpenGL 似乎是获得硬件加速的推荐方式。 Dga 似乎也有几个缺点,以超级用户身份运行对我来说是最明显的,但糟糕的驱动程序支持似乎也是一个问题。
-
@JoachimPileborg 抱歉,忘了说。错误是“没有可用的视频设备”。
-
@r_ahlskog 好吧,从我在使用 SDL 创建的许多 2D 游戏中看到的情况来看,它们使用 DGA 驱动程序,这就是为什么尝试在我的机器上运行这些游戏会导致同样的错误。我想避免为这么简单的游戏学习 OpenGL。
-
@Narrakan:我绝不是 DGA 或其他方面的专家,我只是该领域的高级 Google 过滤器。但是我发现this 表明除鼠标输入之外的 DGA 可能不再可用。