SlideShare a Scribd company logo
Linux as a gaming platform
Ideology aside
14-07-2013
Leszek Godlewski
Generalist Programmer
leszek.godlewski@thefarm51.com
www.thefarm51.com
ERRATA
2
I stand corrected!
www.thefarm51.com
On April 19, 2013 I gave a talk on game
development for Linux at the Digital
Dragons European Games Festival. In it, I
made a couple of mistakes and omissions
that I hereby would like to correct.
2
3
What if SDL doesn't cut it?
www.thefarm51.com
Despite its awesomeness, SDL has its
shortcomings
● No explicit GLX/WGL context data sharing
and no direct context access
→ no threaded rendering ☹
(hit this corner while porting Painkiller HD)
● No 3D positioning or DSP support in the
stock SDL audio subsystem
- Partially remedied by SDL_mixer
But we need those! Now what?!
Original slide 24
4
What if SDL doesn't cut it?
www.thefarm51.com
Despite its awesomeness, SDL has its
shortcomings
● No explicit GLX/WGL context data sharing
and no direct context access
→ no threaded rendering ☹
(hit this corner while porting Painkiller HD)
● No 3D positioning or DSP support in the
stock SDL audio subsystem
- Partially remedied by SDL_mixer
But we need those! Now what?!
Original slide 24
5
OpenGL context sharing in SDL2
www.thefarm51.com5
It actually is possible!
●
Just undocumented... ☹ Only mention I could find in
Google is the May 2012 commit that introduces the
feature
● Needs an SDL OpenGL attribute set before window
creation:
SDL_GL_SetAttribute(
SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 1);
● Voila - all contexts created from now on with
SDL_GL_CreateContext() will share data with the
currently bound context (buffers, shaders etc.)!
6
OpenGL context sharing in SDL2
www.thefarm51.com
I re-read the Valve slides about porting
their games to Linux, and noticed their
renderer is multithreaded. I knew from
elsewhere they are using SDL2, so I
thought I should check the source code,
not just the SDL2 documentation.
As soon as I found out about my mistake, I
rewrote the Painkiller Hell & Damnation
client code to use SDL2, too. ☺
6
7
Joystick/gamepad API
www.thefarm51.com
● Not part of X11 input event framework
● Kernel block devices
- Created as /dev/input/js*
- Hotplug events via libudev (also in Steam
Linux Runtime)
- Handled via open() and ioctl()
- Detailed documentation in the kernel
http://kernel.org/doc/Documentation/input/joystick-api.txt
Original slide 28
W
ell, yeah,
W
ell, yeah, but...
but...
8
SDL2 joystick and controller APIs
www.thefarm51.com8
Why hurt yourself with the low-level kernel joystick
interface and libudev?
9
SDL2 joystick and controller APIs
www.thefarm51.com9
Joystick API
● Support for axes, buttons, hats and trackballs
● State polling or events
● Hotplugging
● Force feedback via the haptic SDL2 subsystem
1
0 SDL2 joystick and controller APIs
www.thefarm51.com10
Game controller API
● Built on top of the joystick API
● Maps any joystick/gamepad input to a layout
modelled after the Xbox 360 controller
● Built by Valve with Steam Big Picture in mind
● Bindings may be imported/exported via strings
● Popular controllers have built-in mappings
● API very similar to the regular joystick API, but
buttons and axes are identified by enumerations
● SDL_GameControllerAxis
● SDL_GameControllerButton
1
1 Where do I put the files?
www.thefarm51.com
● Windows
- Game data and binaries: C:Program Files
- User data: %APPDATA%, Documents...
- AoS-like organization
● Linux (conventional)
- Game binaries: /usr/bin/, /usr/games/
- Game data: /usr/share/games/
- User data: $HOME/.config/
($XDG_CONFIG_HOME environment variable)
- SoA-like organization
- Filesystem Hierarchy Standard
Original slide 42
W
ell, yeah,
W
ell, yeah, but...
but...
1
2 Where do I put the files?
www.thefarm51.com
● FHS mainly concerns distro packages
● Proprietary software often installs into
/opt/<package name>/
(“Add-on application software packages”)
● Proprietary software also often installs
“wherever”
● Steam games live in
~/.steam/steam/SteamApps/
● Just put game data and binaries in one
place, and save user data to ~/.config/
Original slide 43
W
ell, yeah,
W
ell, yeah, but...
but...
1
3 $XDG_CONFIG_HOME and friends
www.thefarm51.com13
● Actually, $XDG_CONFIG_HOME (a.k.a. $HOME/.config)
is a for textual configuration files
● User data, which is a more accurate description for
savegames, DLC etc., goes into $XDG_DATA_HOME
(defaults to $HOME/.local/share)
● All of this is regulated by a FreeDesktop.org standard:
http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
1
4 Summary
www.thefarm51.com14
That's all, folks, for now. Sorry for not getting this
errata out earlier – at The Farm 51 we're very busy
finishing Deadfall Adventures. What do you think,
should it be coming to Linux as well? ☺
If you spot any more mistakes, feel free to shoot me an
email.
Many thanks to Michael Larabel at Phoronix for
blowing up my Slideshare with all the traffic from their
news story. ☺
Keep on playing, Linux gamers!
1
5
Thank you!
Like us on Facebook!
http://www.facebook.com/farm51
http://www.facebook.com/deadfalladventures
http://www.facebook.com/PainkillerGame
leszek.godlewski@thefarm51.com
www.thefarm51.com

More Related Content

ODP
OpenGL (ES) debugging
ODP
Advanced Linux Game Programming
PDF
Gamedev-grade debugging
PDF
Linux as a gaming platform, ideology aside
PDF
One Year of Porting - Post-mortem of two Linux/SteamOS launches
PDF
Digging for Android Kernel Bugs
PDF
Android Attacks
PDF
Kernel Recipes 2015: Anatomy of an atomic KMS driver
OpenGL (ES) debugging
Advanced Linux Game Programming
Gamedev-grade debugging
Linux as a gaming platform, ideology aside
One Year of Porting - Post-mortem of two Linux/SteamOS launches
Digging for Android Kernel Bugs
Android Attacks
Kernel Recipes 2015: Anatomy of an atomic KMS driver

What's hot (20)

PPTX
Software to the slaughter
ODP
4Developers 2015: Gamedev-grade debugging - Leszek Godlewski
PDF
Don't Give Credit: Hacking Arcade Machines
PDF
A War Story: Porting Android 4.0 to a Custom Board (ELCE 2012)
PDF
Linux: the first second
PPTX
Ice Age melting down: Intel features considered usefull!
PDF
The Listening: Email Client Backdoor
PDF
Kernel Recipes 2014 - Writing Code: Keep It Short, Stupid!
PDF
Why kernelspace sucks?
ODP
Q4.11: Porting Android to new Platforms
PDF
Jollen's Presentation: Introducing Android low-level
PDF
Android Variants, Hacks, Tricks and Resources presented at AnDevConII
PPTX
Alessandro Abbruzzetti - Kernal64
PDF
Android Variants, Hacks, Tricks and Resources
PDF
Android Hacks, Variants, Tricks and Resources ESC SV 2012
PDF
Inside Android's UI
KEY
Emulating With JavaScript
PDF
There is more to C
PDF
XenSummit NA 2012: Xen on ARM Cortex A15
PDF
Build your own embedded linux distributions by yocto project
Software to the slaughter
4Developers 2015: Gamedev-grade debugging - Leszek Godlewski
Don't Give Credit: Hacking Arcade Machines
A War Story: Porting Android 4.0 to a Custom Board (ELCE 2012)
Linux: the first second
Ice Age melting down: Intel features considered usefull!
The Listening: Email Client Backdoor
Kernel Recipes 2014 - Writing Code: Keep It Short, Stupid!
Why kernelspace sucks?
Q4.11: Porting Android to new Platforms
Jollen's Presentation: Introducing Android low-level
Android Variants, Hacks, Tricks and Resources presented at AnDevConII
Alessandro Abbruzzetti - Kernal64
Android Variants, Hacks, Tricks and Resources
Android Hacks, Variants, Tricks and Resources ESC SV 2012
Inside Android's UI
Emulating With JavaScript
There is more to C
XenSummit NA 2012: Xen on ARM Cortex A15
Build your own embedded linux distributions by yocto project
Ad

Viewers also liked (15)

PDF
Social Media For Busy Entrepreneurs and Small Businesses
PDF
Suir img
PPTX
Crisis Subprime en España
PPTX
Green Peace y WWF
PDF
Gamedev-grade debugging
PPT
El presidencialismo mexicano antes y después
PPT
Ecosistemas
PDF
Imágenes inmersivas
PPSX
CriminalEFS-PowerPoint
PPTX
El barrroco
PDF
Cross-platform game engine development with SDL 2.0
PDF
Хипстеры в энтерпрайзе
PPTX
каталог керасис
PDF
Docker In Bank Unrated
PDF
Service Discovery. Spring Cloud Internals
Social Media For Busy Entrepreneurs and Small Businesses
Suir img
Crisis Subprime en España
Green Peace y WWF
Gamedev-grade debugging
El presidencialismo mexicano antes y después
Ecosistemas
Imágenes inmersivas
CriminalEFS-PowerPoint
El barrroco
Cross-platform game engine development with SDL 2.0
Хипстеры в энтерпрайзе
каталог керасис
Docker In Bank Unrated
Service Discovery. Spring Cloud Internals
Ad

Similar to Linux as a gaming platform - Errata (20)

ODP
SDL2 Game Development VT Code Camp 2013
PDF
Taking the hard out of hardware
PDF
Schizophrenic files v2
PDF
Video Drivers
PDF
GS-4136, Optimizing Game Development using AMD’s GPU PerfStudio 2, by Gordon ...
TXT
Sweet fx readme
PDF
Shall We Play A Game - BSides Cape Town 2018
PDF
Hardware hacking
TXT
Readme
ODP
Embedded Linux Multimedia
PDF
PiFlash: Linux utility to flash SD cards for Raspberry Pi computers
PDF
OSC-Fall-Tokyo-2012-v9.pdf
PPT
Console development
PDF
Jftut1.3.7
PDF
[Ubucon Europe 2018] Introduction to mesa, the open-source graphics API imple...
PDF
Introduction to Mesa. The Open-Source Graphics API Implementation Library (Ub...
PPTX
Lessons Learned with Unity and WebGL
PPT
Ps3 linux
PDF
Linux gaming landscape
PDF
Porting your favourite cmdline tool to Android
SDL2 Game Development VT Code Camp 2013
Taking the hard out of hardware
Schizophrenic files v2
Video Drivers
GS-4136, Optimizing Game Development using AMD’s GPU PerfStudio 2, by Gordon ...
Sweet fx readme
Shall We Play A Game - BSides Cape Town 2018
Hardware hacking
Readme
Embedded Linux Multimedia
PiFlash: Linux utility to flash SD cards for Raspberry Pi computers
OSC-Fall-Tokyo-2012-v9.pdf
Console development
Jftut1.3.7
[Ubucon Europe 2018] Introduction to mesa, the open-source graphics API imple...
Introduction to Mesa. The Open-Source Graphics API Implementation Library (Ub...
Lessons Learned with Unity and WebGL
Ps3 linux
Linux gaming landscape
Porting your favourite cmdline tool to Android

Recently uploaded (20)

PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
cuic standard and advanced reporting.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
sap open course for s4hana steps from ECC to s4
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Empathic Computing: Creating Shared Understanding
PPTX
Big Data Technologies - Introduction.pptx
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Spectroscopy.pptx food analysis technology
PDF
Electronic commerce courselecture one. Pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Approach and Philosophy of On baking technology
Digital-Transformation-Roadmap-for-Companies.pptx
Chapter 3 Spatial Domain Image Processing.pdf
cuic standard and advanced reporting.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Understanding_Digital_Forensics_Presentation.pptx
sap open course for s4hana steps from ECC to s4
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Reach Out and Touch Someone: Haptics and Empathic Computing
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
MIND Revenue Release Quarter 2 2025 Press Release
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
Empathic Computing: Creating Shared Understanding
Big Data Technologies - Introduction.pptx
Network Security Unit 5.pdf for BCA BBA.
NewMind AI Weekly Chronicles - August'25 Week I
Spectroscopy.pptx food analysis technology
Electronic commerce courselecture one. Pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Approach and Philosophy of On baking technology

Linux as a gaming platform - Errata

  • 1. Linux as a gaming platform Ideology aside 14-07-2013 Leszek Godlewski Generalist Programmer leszek.godlewski@thefarm51.com www.thefarm51.com ERRATA
  • 2. 2 I stand corrected! www.thefarm51.com On April 19, 2013 I gave a talk on game development for Linux at the Digital Dragons European Games Festival. In it, I made a couple of mistakes and omissions that I hereby would like to correct. 2
  • 3. 3 What if SDL doesn't cut it? www.thefarm51.com Despite its awesomeness, SDL has its shortcomings ● No explicit GLX/WGL context data sharing and no direct context access → no threaded rendering ☹ (hit this corner while porting Painkiller HD) ● No 3D positioning or DSP support in the stock SDL audio subsystem - Partially remedied by SDL_mixer But we need those! Now what?! Original slide 24
  • 4. 4 What if SDL doesn't cut it? www.thefarm51.com Despite its awesomeness, SDL has its shortcomings ● No explicit GLX/WGL context data sharing and no direct context access → no threaded rendering ☹ (hit this corner while porting Painkiller HD) ● No 3D positioning or DSP support in the stock SDL audio subsystem - Partially remedied by SDL_mixer But we need those! Now what?! Original slide 24
  • 5. 5 OpenGL context sharing in SDL2 www.thefarm51.com5 It actually is possible! ● Just undocumented... ☹ Only mention I could find in Google is the May 2012 commit that introduces the feature ● Needs an SDL OpenGL attribute set before window creation: SDL_GL_SetAttribute( SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 1); ● Voila - all contexts created from now on with SDL_GL_CreateContext() will share data with the currently bound context (buffers, shaders etc.)!
  • 6. 6 OpenGL context sharing in SDL2 www.thefarm51.com I re-read the Valve slides about porting their games to Linux, and noticed their renderer is multithreaded. I knew from elsewhere they are using SDL2, so I thought I should check the source code, not just the SDL2 documentation. As soon as I found out about my mistake, I rewrote the Painkiller Hell & Damnation client code to use SDL2, too. ☺ 6
  • 7. 7 Joystick/gamepad API www.thefarm51.com ● Not part of X11 input event framework ● Kernel block devices - Created as /dev/input/js* - Hotplug events via libudev (also in Steam Linux Runtime) - Handled via open() and ioctl() - Detailed documentation in the kernel http://kernel.org/doc/Documentation/input/joystick-api.txt Original slide 28 W ell, yeah, W ell, yeah, but... but...
  • 8. 8 SDL2 joystick and controller APIs www.thefarm51.com8 Why hurt yourself with the low-level kernel joystick interface and libudev?
  • 9. 9 SDL2 joystick and controller APIs www.thefarm51.com9 Joystick API ● Support for axes, buttons, hats and trackballs ● State polling or events ● Hotplugging ● Force feedback via the haptic SDL2 subsystem
  • 10. 1 0 SDL2 joystick and controller APIs www.thefarm51.com10 Game controller API ● Built on top of the joystick API ● Maps any joystick/gamepad input to a layout modelled after the Xbox 360 controller ● Built by Valve with Steam Big Picture in mind ● Bindings may be imported/exported via strings ● Popular controllers have built-in mappings ● API very similar to the regular joystick API, but buttons and axes are identified by enumerations ● SDL_GameControllerAxis ● SDL_GameControllerButton
  • 11. 1 1 Where do I put the files? www.thefarm51.com ● Windows - Game data and binaries: C:Program Files - User data: %APPDATA%, Documents... - AoS-like organization ● Linux (conventional) - Game binaries: /usr/bin/, /usr/games/ - Game data: /usr/share/games/ - User data: $HOME/.config/ ($XDG_CONFIG_HOME environment variable) - SoA-like organization - Filesystem Hierarchy Standard Original slide 42 W ell, yeah, W ell, yeah, but... but...
  • 12. 1 2 Where do I put the files? www.thefarm51.com ● FHS mainly concerns distro packages ● Proprietary software often installs into /opt/<package name>/ (“Add-on application software packages”) ● Proprietary software also often installs “wherever” ● Steam games live in ~/.steam/steam/SteamApps/ ● Just put game data and binaries in one place, and save user data to ~/.config/ Original slide 43 W ell, yeah, W ell, yeah, but... but...
  • 13. 1 3 $XDG_CONFIG_HOME and friends www.thefarm51.com13 ● Actually, $XDG_CONFIG_HOME (a.k.a. $HOME/.config) is a for textual configuration files ● User data, which is a more accurate description for savegames, DLC etc., goes into $XDG_DATA_HOME (defaults to $HOME/.local/share) ● All of this is regulated by a FreeDesktop.org standard: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
  • 14. 1 4 Summary www.thefarm51.com14 That's all, folks, for now. Sorry for not getting this errata out earlier – at The Farm 51 we're very busy finishing Deadfall Adventures. What do you think, should it be coming to Linux as well? ☺ If you spot any more mistakes, feel free to shoot me an email. Many thanks to Michael Larabel at Phoronix for blowing up my Slideshare with all the traffic from their news story. ☺ Keep on playing, Linux gamers!
  • 15. 1 5 Thank you! Like us on Facebook! http://www.facebook.com/farm51 http://www.facebook.com/deadfalladventures http://www.facebook.com/PainkillerGame leszek.godlewski@thefarm51.com www.thefarm51.com