FPS游戏和OpenGL

时间:2011-10-09 07:34:00

标签: linux opengl

我正在尝试使用LD_PRELOAD方法捕获来自我游戏的图像,方法是提供我自己的库,以便拦截OpenGL调用。这个方法适用于简单的演示OpenGL代码(参见this project's文件demo.cpp,make.sh,load.sh),但是对于我认为使用OpenGL的FPS游戏UrbanTerror不起作用。我自己提供的函数gettimeofday被正确调用,但是由于某种原因我的glXSwapBuffers不是。这些游戏使用OpenGL的方式有何不同?如果是这样,怎么样?有关如何加入UrT和/或其他FPS游戏的任何提示都将受到欢迎。我在Ubuntu 11上。

Related Question 1

Related Question 2

1 个答案:

答案 0 :(得分:6)

AFAIK Quake3引擎(用于Urban Terror)实现了一个自定义动态OpenGL加载器系统,即二进制文件不直接链接到 libGL.so ,而是使用dlopen加载 libGL.so ,然后加载dlsym以检索所有OpenGL符号。为避免与任何直接链接代码发生冲突,所有内部符号都以“命名空间”为前缀。

然而,LD_PRELOAD环境变量无效。要挂钩动态加载的库,你将不得不做一些主要的诡计。有几种可能性。我建议也拦截dlopendlsym调用,对于你想要挂钩的函数,返回你的 trampoline (最终将调用所请求的函数)而不是返回函数直接指针。

顺便说一句:你现在问这个问题很好,因为我要写一个类似的预加载libGL.so作为我正在研究的窗口合成器的支持;我可能陷入了同样的陷阱。