FPS Game и OpenGL - PullRequest
       3

FPS Game и OpenGL

3 голосов
/ 09 октября 2011

Я пытаюсь захватывать изображения из моей игры, используя метод LD_PRELOAD, предоставляя свою собственную библиотеку, которая будет перехватывать вызовы OpenGL.Этот метод отлично работает для простого демонстрационного кода OpenGL (см. файл этого проекта demo.cpp, make.sh, load.sh), однако не работает для FPS-игры UrbanTerror, которая, как я думал, использовала OpenGL.Моя собственная поставляемая функция gettimeofday вызывается правильно, однако, по некоторым причинам, мой glXSwapBuffers - нет.Эти игры используют OpenGL по-другому?Если так, то как?Любые советы о том, как подключиться к UrT и / или другой FPS-игре, будут приветствоваться.Я в Ubuntu 11.

Смежный вопрос 1

Смежный вопрос 2

1 Ответ

6 голосов
/ 09 октября 2011

AFAIK движок Quake3 (который используется для Urban Terror) реализует настраиваемую динамическую систему загрузчика OpenGL, то есть двоичный файл не связывается непосредственно с libGL.so , но использует dlopen для загрузки libGL.so , затем dlsym, чтобы получить все символы OpenGL. Чтобы избежать конфликтов с любым напрямую связанным кодом, все внутренние символы имеют префикс «пространство имен».

Однако переменная окружения LD_PRELOAD не будет иметь никакого эффекта. Чтобы подключиться к динамически загружаемым библиотекам, вам придется сделать несколько хитростей. Есть несколько возможностей. Я также рекомендую перехватывать вызовы dlopen и dlsym, а для функций, к которым вы собираетесь подключиться, возвращайте батут (который в конечном итоге вызовет запрошенную функцию), вместо этого возвращая указатель функции напрямую.

Кстати: хорошо, что вы задали этот вопрос сейчас, так как я собираюсь написать аналогичную предварительную загрузку libGL.so в качестве поддержки оконного композитора, над которым я работаю; и я, вероятно, попал в ту же ловушку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...