Antichamber corre muito bem no linux (versão a vapor). Mas não é jogável com o Oculus Rift neste momento.
Os problemas são: 1) sem headtracking 2) os gráficos não estão sendo divididos e distorcidos pelo Oculus SDK
Meu plano atual é usar LD_PRELOAD para adicionar a funcionalidade, este parece ser o equivalente do Linux de injeção de DLL. O Antichamber parece estar usando o SDL, espero que isso possa ser configurado para usar os dados do headtracking como um joystick e aplicar a distorção dos gráficos, mas não tenho certeza de quais funções eu deveria estar procurando.
Existe uma maneira mais simples de resolver esses problemas? A SDL é a escolha certa aqui?
Gostaria de receber informações sobre como o Unreal Engine 3 funciona no linux; e injeção de biblioteca também.
EDITAR:
Aqui estão as informações que tenho até agora, ainda não tenho certeza de quais funções eu deveria estar procurando (não estou familiarizado com SDL ou OpenGL):
Artigos sobre LD_PRELOAD e injeção de objetos compartilhados; here e aqui
O diretório Antichamber (versão steam) é: ~ / .steam / steam / SteamApps / common / Antichamber
O executável está em: Antichamber / Binários / Linux / UDKGame-Linux
Tive que instalar o libvorbisfile3: i386 para que o executável fosse executado a partir da linha de comando. (O Steam conseguiu iniciar o jogo sem instalar isso)
$ldd UDKGame-Linux
linux-gate.so.1 => (0xf775d000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7716000)
libSDL2_mixer-2.0.so.0 => /home/workstation/.steam/steam/SteamApps/common/Antichamber/Binaries/Linux/./lib/libSDL2_mixer-2.0.so.0 (0xf76d0000)
libogg.so.0 => /usr/lib/i386-linux-gnu/libogg.so.0 (0xf76c6000)
libvorbis.so.0 => /usr/lib/i386-linux-gnu/libvorbis.so.0 (0xf769a000)
libvorbisfile.so.3 => /usr/lib/i386-linux-gnu/libvorbisfile.so.3 (0xf7690000)
libSDL2-2.0.so.0 => /home/workstation/.steam/steam/SteamApps/common/Antichamber/Binaries/Linux/./lib/libSDL2-2.0.so.0 (0xf75a7000)
libGL.so.1 => /usr/lib32/nvidia-331-updates/libGL.so.1 (0xf74a3000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf749d000)
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf7494000)
libsteam_api.so => /home/workstation/.steam/steam/SteamApps/common/Antichamber/Binaries/Linux/./lib/libsteam_api.so (0xf7481000)
libtcmalloc.so.0 => /home/workstation/.steam/steam/SteamApps/common/Antichamber/Binaries/Linux/./lib/libtcmalloc.so.0 (0xf7424000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf733b000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf72f4000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf72d7000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7127000)
/lib/ld-linux.so.2 (0xf775e000)
libnvidia-tls.so.331.38 => /usr/lib32/nvidia-331-updates/tls/libnvidia-tls.so.331.38 (0xf7123000)
libnvidia-glcore.so.331.38 => /usr/lib32/nvidia-331-updates/libnvidia-glcore.so.331.38 (0xf4edf000)
libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xf4daa000)
libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xf4d97000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xf4d75000)
libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xf4d71000)
libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xf4d6a000)
$ nm -Du UDKGame-Linux
U abort
U accept
U access
U __assert_fail
U backtrace
U bind
U chdir
U close
U closedir
U connect
U __ctype_b_loc
U __ctype_toupper_loc
U __cxa_atexit
U __cxa_begin_catch
U __cxa_call_unexpected
U __cxa_end_catch
U __cxa_guard_abort
U __cxa_guard_acquire
U __cxa_guard_release
U __cxa_pure_virtual
U difftime
U __divdi3
U dlclose
U dlerror
U dlopen
U dlsym
U __errno_location
U fclose
U fcntl
U feof
U ferror
U fflush
U fgets
U __finitef
U fopen
U fprintf
U fputc
U fread
U free
U frexp
U fseek
U ftell
U fwrite
U __fxstat
U getcwd
U getenv
U gethostname
U getifaddrs
U getpid
U getsockname
U getsockopt
U gettimeofday
U glAlphaFunc
U glBegin
U glBindTexture
U glBlendFunc
U glClear
U glClearColor
U glClearDepth
U glClearStencil
U glColorMask
U glCullFace
U glDeleteTextures
U glDepthFunc
U glDepthMask
U glDepthRange
U glDisable
U glDrawArrays
U glDrawBuffer
U glEnable
U glEnd
U glGenTextures
U glGetIntegerv
U glGetString
U glPixelStorei
U glPolygonMode
U glPolygonOffset
U glReadBuffer
U glReadPixels
U glScissor
U glStencilFunc
U glStencilMask
U glStencilOp
U glTexCoord2f
U glTexEnvf
U glTexImage2D
U glTexParameteri
U glTexSubImage2D
U glVertex2f
U glViewport
U glXGetClientString
U glXGetProcAddressARB
U glXQueryVersion
w __gmon_start__
U gmtime
U gmtime_r
U __gxx_personality_v0
U inet_addr
U ioctl
U isalnum
U isalpha
U __isinff
U __isnanf
U isspace
U iswpunct
w _Jv_RegisterClasses
U __libc_start_main
U listen
U localtime_r
U lseek
U malloc
U memcmp
U memcpy
U memmove
U memset
U MinorityMix_SetPosition
U mkdir
U __moddi3
U open
U opendir
U ov_clear
U ov_info
U ov_open_callbacks
U ov_pcm_seek_page
U ov_pcm_total
U ov_read
U ov_time_total
U pause
U powf
U printf
U pthread_cond_broadcast
U pthread_cond_destroy
U pthread_cond_init
U pthread_cond_signal
U pthread_cond_timedwait
U pthread_cond_wait
U pthread_create
U pthread_detach
U pthread_getspecific
U pthread_key_create
U pthread_key_delete
U pthread_mutexattr_init
U pthread_mutexattr_settype
U pthread_mutex_destroy
U pthread_mutex_init
U pthread_mutex_lock
U pthread_mutex_unlock
U pthread_self
U pthread_setspecific
U qsort
U rand
U read
U readdir
U realloc
U recv
U recvfrom
U rename
U rmdir
U sched_yield
U SDL_BuildAudioCVT
U SDL_ClearError
U SDL_CloseAudio
U SDL_ConvertAudio
U SDL_ConvertSurfaceFormat
U SDL_CreateRGBSurface
U SDL_CreateTextureFromSurface
U SDL_CreateWindow
U SDL_DestroyWindow
U SDL_Error
U SDL_FillRect
U SDL_free
U SDL_FreeSurface
U SDL_GameControllerClose
U SDL_GameControllerOpen
U SDL_GetClosestDisplayMode
U SDL_GetDesktopDisplayMode
U SDL_GetDisplayMode
U SDL_GetError
U SDL_GetKeyboardFocus
U SDL_GetNumDisplayModes
U SDL_GetNumVideoDisplays
U SDL_GetPrefPath
U SDL_GetWindowDisplayIndex
U SDL_GetWindowSize
U SDL_GL_CreateContext
U SDL_GL_DeleteContext
U SDL_GL_MakeCurrent
U SDL_GL_SetAttribute
U SDL_GL_SwapWindow
U SDL_Init
U SDL_IsGameController
U SDL_isspace
U SDL_LockAudioDevice
U SDL_malloc
U SDL_memcmp
U SDL_memcpy
U SDL_memset
U SDL_MixAudioFormat
U SDL_NumJoysticks
U SDL_OpenAudioDevice
U SDL_PauseAudioDevice
U SDL_PollEvent
U SDL_PushEvent
U SDL_Quit
U SDL_ReadBE32
U SDL_ReadLE16
U SDL_ReadLE32
U SDL_realloc
U SDL_RWFromFile
U SDL_SetColorKey
U SDL_SetError
U SDL_SetHint
U SDL_SetMainReady
U SDL_SetWindowGrab
U SDL_SetWindowIcon
U SDL_ShowCursor
U SDL_snprintf
U SDL_sscanf
U SDL_strcmp
U SDL_strncasecmp
U SDL_strncmp
U SDL_UnlockAudioDevice
U SDL_UpperBlit
U SDL_WarpMouseInWindow
U select
U send
U sendto
U setsockopt
U snprintf
U socket
U sprintf
U srand
U sscanf
U SteamAPI_Init
U SteamAPI_RegisterCallback
U SteamAPI_RegisterCallResult
U SteamAPI_RestartAppIfNecessary
U SteamAPI_RunCallbacks
U SteamAPI_Shutdown
U SteamAPI_UnregisterCallback
U SteamAPI_UnregisterCallResult
U SteamApps
U SteamFriends
U SteamGameServer
U SteamGameServer_BSecure
U SteamGameServer_GetSteamID
U SteamGameServer_Init
U SteamGameServerNetworking
U SteamGameServer_RunCallbacks
U SteamGameServer_Shutdown
U SteamGameServerStats
U SteamGameServerUtils
U SteamMatchmaking
U SteamMatchmakingServers
U SteamNetworking
U SteamRemoteStorage
U SteamUser
U SteamUserStats
U SteamUtils
U stpcpy
U strcasecmp
U strchr
U strcmp
U strcpy
U strdup
U strlen
U strncat
U strncmp
U strncpy
U strrchr
U strstr
U strtod
U strtol
U swscanf
U time
U tolower
U toupper
U towupper
U __umoddi3
U unlink
U _Unwind_Resume
U usleep
U utimes
U vsnprintf
U vsprintf
U vswprintf
U wcscat
U wcschr
U wcscmp
U wcscpy
U wcslen
U wcsncmp
U wcsncpy
U wcsrchr
U wcsstr
U wcstod
U wcstoul
U wcstoull
U wprintf
U write
U __xstat
U _ZSt9terminatev