Top Banner
Open Source Tools for Game Development Ryan C. Gordon, icculus.org
69

Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Oct 10, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Open Source Tools for Game Development

Ryan C. Gordon, icculus.org

Page 2: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

A few notes...

• Please tweet with #flourish

• Feel free to interrupt!

• Slides are at http://icculus.org/flourish/

Page 3: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Who am I?

• Game developer, porter, hacker

• Ports video games, builds tools

• @icculus on Twitter

[email protected]

• http://icculus.org/resume

Page 4: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org
Page 5: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org
Page 6: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org
Page 7: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org
Page 8: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org
Page 9: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org
Page 10: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

But enough about me.

Page 11: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

DISCLAIMER: This is by no means a

complete list.

Page 12: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

SDL

Page 13: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Simple Directmedia Layer

• Video, Audio, Input, Plumbing

• Low level

• Lots of platforms

• Easy to use!

• http://libsdl.org/

Page 14: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

A simple Direct3D example.

Page 15: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

WNDCLASSEX winClass; MSG uMsg; memset(&uMsg,0,sizeof(uMsg)); winClass.lpszClassName = "MY_WINDOWS_CLASS"; winClass.cbSize = sizeof(WNDCLASSEX); winClass.style = CS_HREDRAW | CS_VREDRAW; winClass.lpfnWndProc = WindowProc; winClass.hInstance = hInstance; winClass.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_DIRECTX_ICON); winClass.hIconSm = LoadIcon(hInstance, (LPCTSTR)IDI_DIRECTX_ICON); winClass.hCursor = LoadCursor(NULL, IDC_ARROW); winClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); winClass.lpszMenuName = NULL; winClass.cbClsExtra = 0; winClass.cbWndExtra = 0; if( RegisterClassEx(&winClass) == 0 ) return E_FAIL; g_hWnd = CreateWindowEx( NULL, "MY_WINDOWS_CLASS", "Direct3D (DX9) - Full Screen", WS_POPUP | WS_SYSMENU | WS_VISIBLE, 0, 0, 640, 480, NULL, NULL, hInstance, NULL ); if( g_hWnd == NULL ) return E_FAIL; ShowWindow( g_hWnd, nCmdShow ); UpdateWindow( g_hWnd );

Page 16: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ); if( g_pD3D == NULL ) { // TO DO: Respond to failure of Direct3DCreate8 return; } // // For the default adapter, examine all of its display modes to see if any // of them can give us the hardware support we desire. // int nMode = 0; D3DDISPLAYMODE d3ddm; bool bDesiredAdapterModeFound = false; int nMaxAdapterModes = g_pD3D->GetAdapterModeCount( D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8 ); for( nMode = 0; nMode < nMaxAdapterModes; ++nMode ) { if( FAILED( g_pD3D->EnumAdapterModes( D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8, nMode, &d3ddm ) ) ) { // TO DO: Respond to failure of EnumAdapterModes return; } // Does this adapter mode support a mode of 640 x 480? if( d3ddm.Width != 640 || d3ddm.Height != 480 ) continue; // Does this adapter mode support a 32-bit RGB pixel format? if( d3ddm.Format != D3DFMT_X8R8G8B8 ) continue; // Does this adapter mode support a refresh rate of 75 MHz? if( d3ddm.RefreshRate != 75 ) continue; // We found a match! bDesiredAdapterModeFound = true; break; } if( bDesiredAdapterModeFound == false ) { // TO DO: Handle lack of support for desired adapter mode... return; }

Page 17: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

// Can we get a 32-bit back buffer? if( FAILED( g_pD3D->CheckDeviceType( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, D3DFMT_X8R8G8B8, FALSE ) ) ) { // TO DO: Handle lack of support for a 32-bit back buffer... return; } // Can we get a z-buffer that's at least 16 bits? if( FAILED( g_pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, D3DFMT_D16 ) ) ) { // TO DO: Handle lack of support for a 16-bit z-buffer... return; } // // Do we support hardware vertex processing? if so, use it. // If not, downgrade to software. // D3DCAPS9 d3dCaps; if( FAILED( g_pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &d3dCaps ) ) ) { // TO DO: Respond to failure of GetDeviceCaps return; } DWORD flags = 0; if( d3dCaps.VertexProcessingCaps != 0 ) flags = D3DCREATE_HARDWARE_VERTEXPROCESSING; else flags = D3DCREATE_SOFTWARE_VERTEXPROCESSING;

Page 18: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

// // Everything checks out - create a simple, full-screen device. // D3DPRESENT_PARAMETERS d3dpp; memset(&d3dpp, 0, sizeof(d3dpp)); d3dpp.Windowed = FALSE; d3dpp.EnableAutoDepthStencil = TRUE; d3dpp.AutoDepthStencilFormat = D3DFMT_D16; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferWidth = 640; d3dpp.BackBufferHeight = 480; d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, g_hWnd, flags, &d3dpp, &g_pd3dDevice ) ) ) { // TO DO: Respond to failure of CreateDevice return; }

Page 19: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

// TO DO: Respond to failure of Direct3DCreate8

Page 20: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

ಠ_ಠ

Page 21: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

The complex SDL version.

Page 22: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

SDL_Init(SDL_INIT_VIDEO);

SDL_SetVideoMode(640, 480, 0, SDL_FULLSCREEN | SDL_OPENGL);

Page 23: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

ಠ_ಠ

Page 24: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

• Video (2D and OpenGL)

• Audio (DSP and CD)

• Events

• Timers

• Joysticks

• OS stuff: Threads, DLLs, C runtime

SDL 1.2

Page 25: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

SDL 2.0

• Remove limitations, modernizes features.

• Multi-window, multi-audio, multi-input.

• Android, iOS, etc.

• Work in progress, but try it now!

Page 26: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

OpenAL

Page 27: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

OpenAL

• 3D positional audio

• Cross-platform

• Easy to use

• Good for 2D games, too!

• http://openal.org/

Page 28: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

bool initOpenAL(void) { ALCdevice *dev = alcOpenDevice(NULL); if (!dev) return false; ALCcontext *ctx = alcCreateContext(dev, NULL); if (!ctx) { alcCloseDevice(dev); return false; } alcMakeContextCurrent(ctx); return true; }

Page 29: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org
Page 30: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

OpenAL

• Stateful objects, like OpenGL

• One Listener

• A handful of Sources

• Many Buffers

• Buffer queues

Page 31: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

SQLite

Page 32: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

SQLite

• Powerful embedded SQL engine.

• One file per database, in-process.

• One .c file, dropped into your project.

• You’re already using it.

• http://sqlite.org/

Page 33: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Know your tools.

“SQLite doesn’t compete with Oracle. It competes with fopen().”

-- D. Richard Hipp, primary developer

Page 34: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

PhysicsFS

Page 35: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Blatant self-promotion!

• I wrote PhysicsFS.

• It’s awesome.

• You should use it, so you can be awesome.

• http://icculus.org/physfs/

Page 36: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

PhysicsFS

• Virtual File System.

• Transparent archives and files.

• Makes game updates and mods easier.

• Security, functionality, flexibility.

Page 37: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Look, I already know it doesn’t have anything to do with physics.

Page 38: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

So what about physics?

• Open Dynamics Engine (ODE)

• Box2D

Page 39: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Ogg Vorbis and Speex

Page 40: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org
Page 41: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Ogg Vorbis and Speex

• Vorbis: compressed audio data

• Speex: compressed voice data

• Patent unencumbered, BSD licensed.

• http://xiph.org/

Page 42: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

ProTip

• Don’t use libvorbis directly.

• Use libvorbisfile.

Page 43: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Ogg Theora

Page 44: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org
Page 45: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Ogg Theora

• Video equivalent of Ogg Vorbis.

• Based on On2’s VP3 codec.

• HD video at reasonable bitrates.

• Patent unencumbered, BSD licensed.

• http://theora.org/

Page 46: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

ProTip

There is no libvorbisfile for Theora!

Page 47: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Blatant self-promotion!

• TheoraPlay makes Ogg Theora way easier.

• http://icculus.org/theoraplay/

Page 48: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Lua

Page 49: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Lua

• Dirt-simple scripting language.

• Crazy powerful, yet efficient.

• Easy to embed and bridge with C.

• Very popular in current AAA titles.

• http://lua.org/

Page 50: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

zlib, libpng, libjpeg

Page 51: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

ProTip...don’t use these libraries.

Page 52: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

stb_*

Page 53: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

stb_*

• Sean Barrett is a ninja.

• Decoders, decompressors, etc.

• Everything is in the public domain.

• http://nothings.org/

Page 54: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

miniz

• zlib in 300 lines of C.

• Faster than zlib.

• Other features.

• http://code.google.com/p/miniz/

Page 55: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

enet

Page 56: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

enet

• Networking is hard.

• Unreliable, fragmented, sequenced packets.

• Reliable streams over UDP.

• Channels.

• http://enet.bespin.org/

Page 57: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

MojoShader

Page 58: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Blatant self-Promotion!

• MojoShader makes your compiled Direct3D shaders work on OpenGL!

• GLSL shaders, ARB programs.

• Shader assembler and preprocessor.

• HLSL compiler coming soon!

• http://icculus.org/mojoshader/

Page 59: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

I thought you said “tools!”

Hey!

Page 60: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Google Breakpad

Page 61: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Valgrind

Page 62: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

gdb7

Page 63: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

clang

Page 64: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Blender

Page 65: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Git and Mercurial

Page 66: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

The whole package?

Page 67: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

Game engines

• ioquake3, iodoom3

• Ogre

• Crystal Space

• Cube/Sauerbraten

• HGE

Page 68: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org
Page 69: Open Source Tools for Game Development - icculus.org · Open Source Tools for Game Development Ryan C. Gordon, icculus.org

That’s all folks.

• Questions? Answers!

• Hire me.

• http://icculus.org/flourish/

• Ryan C. Gordon: [email protected]

• http://twitter.com/icculus

• http://gplus.to/icculus