developing ronimo's multiplatform graphics engine joost van dongen co-founder lead programmer
DESCRIPTION
Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer. Ronimo Games. Currently 21 people (7 coders) Utrecht city centre Exists over 7 years now Indie game developer De Blob, Swords & Soldiers, Awesomenauts, Swords & Soldiers 2. Joost van Dongen. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/1.jpg)
Developing Ronimo's multiplatform graphics
engine
Joost van DongenCo-founder
Lead programmer
![Page 2: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/2.jpg)
Ronimo Games Currently 21 people (7 coders) Utrecht city centre Exists over 7 years now Indie game developer De Blob, Swords & Soldiers, Awesomenauts,
Swords & Soldiers 2
![Page 3: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/3.jpg)
Joost van Dongen
Lead programmer and co-founder Studied Game & Media Technology And Game Design & Development at HKU Also hobby games: Proun, Cello Fortress
![Page 4: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/4.jpg)
Video?
Video!
![Page 5: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/5.jpg)
Awesomenauts 2D MOBA League of Legends + Super Smash Brothers Over 1.7 million copies sold 3 VS 3 online Fast action game Launched mid-2012 Very active user base
![Page 6: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/6.jpg)
2D games tech
Often underestimated compared to 3D Many things similar: certification, file handling,
online multiplayer, etc Just as interesting!
![Page 7: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/7.jpg)
Console development
![Page 8: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/8.jpg)
Normal programming
Standard C++ Normal Visual Studio Special compiler
![Page 9: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/9.jpg)
Deviations from C++ standard
Visual Studio adds to C++ standard Other compilers do not Cannot use those extras Differences:
std::vector<std::vector<int>> #include <cmath> inline for templates
![Page 10: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/10.jpg)
Pragma
Cannot use #pragma once Must use this instead:
#ifndef MYCLASS_H
#define MYCLASS_H
//code goes here
#endif
![Page 11: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/11.jpg)
Other APIs
Biggest difference Special APIs for all kinds of things File access, graphics, sound, controllers,
networking, etc
![Page 12: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/12.jpg)
Multiplatform
Must write specifics for every platform! Or use existing engine (Unreal, Unity, etc) Or partially use specialised middleware (e.g.
FMOD)
![Page 13: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/13.jpg)
Compiling multiplatform
Must hide platform-specific code behind defines
![Page 14: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/14.jpg)
void writeFile(const std::string& text)
{
#ifdef _PC
std::ofstream.write(text);
#elif _X360
xWriteData(text);
#elif _PS3
ninWrite(text.c_str());
#else
implement_me;
#endif
}
![Page 15: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/15.jpg)
Practical multiplatform
Big challenge: how to structure this? Huge structural differences per platform Lots of platform-specific code Must keep as much multi-platform as possible
![Page 16: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/16.jpg)
Our structure
Example class structure for file handling:
As much as possible in FileTools itself Similar systems for other topics
![Page 17: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/17.jpg)
class FileTools
{
virtual void write(string) = 0;
};
class PS3FileTools: public FileTools
{
virtual void write(string)
{
//blabla real code yo
}
};
![Page 18: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/18.jpg)
FileTools* create()
{
#ifdef _PC
return new PCFileTools();
#elif _PS3
return new PS3FileTools();
#else
implement_me;
#endif
}
![Page 19: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/19.jpg)
Console certification
Console manufacturers test game extensively Must adhere to certification requirements Long lists Hundreds of detailed requirements Months of work per platform!
![Page 20: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/20.jpg)
Example requirements
"Pause game if controller disconnected" "Do not crash" "Load in less than 30 seconds"
![Page 21: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/21.jpg)
Consistency requirements
Not all requirements make sense from developer's standpoint
Make experience similar across platform "Home menu always accessible" "Use standard terminology"
![Page 22: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/22.jpg)
Console development flow
Gain development license for console Order devkits Ask for concept permission Get age ratings Send in for certification Get failed for stupid oversight or lame detail Make fixes Send in again Wait for release slot
![Page 23: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/23.jpg)
Limited RAM
Traditional challenge on console Much less RAM than on PC Won't overflow onto hard disc when out of RAM Less of an issue on PS4/XBoxOne Big challenge on Wii/360/PS3 (88 / 512 / 2x256mb)
![Page 24: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/24.jpg)
Graphics API differences
![Page 25: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/25.jpg)
Graphics API
Library for communicating with videocard Call functions to render triangles, use textures,
etc
![Page 26: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/26.jpg)
Per platform
PC: DirectX, OpenGL, Mantle Mac / Linux: OpenGL iOS / Android: OpenGL ES PS3: OpenGL, GCM X360: DirectX 9 Wii: GX Wii U: GX2
Special versions of GL and DX per platform!
![Page 27: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/27.jpg)
Similarities
Basic primitive is always triangle Textures Hardware is similar, so APIs wrap around
similar concepts
![Page 28: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/28.jpg)
Differences
APIs do same thing differently Each console has special hardware features Some consoles lack major features
![Page 29: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/29.jpg)
API difference: texture sampling
![Page 30: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/30.jpg)
API difference: texture sampling
GL: per texture DX: per stage For performance must only set when needed Must decide differently per platform
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_LINEAR);
device->SetSamplerState(textureIndex, D3DSAMP_MINFILTER,
D3DTEXF_LINEAR);
![Page 31: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/31.jpg)
Speed
Consoles are slower than PCs... ...but targeting specific hardware gives huge
boost Also much more efficient drivers Plus economics: no one targets high end PCs
![Page 32: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/32.jpg)
Texture handling
Console: just memory PC/Mac/Linux: abstracted, no direct access
Console: notify that piece of memory is texture PC/Mac/Linux: copy texture to video memory
Much more control, much faster streaming on console
![Page 33: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/33.jpg)
EDRam
Xbox 360 only 10mb of super fast GPU memory Benefit: super fast Downside: super small Full HD with anti-aliasing requires two render
passes Much more complex with deferred shading
![Page 34: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/34.jpg)
Shaders
DirectX on 360: HLSL OpenGL on PS3: Cg Need to write all shaders twice? Nope: languages are 90% same Can make everything without touching
differences
![Page 35: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/35.jpg)
GLSL shaders
GLSL is different Still very similar Required on Wii U and iOS We modified Cg shaders by hand
![Page 36: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/36.jpg)
No shaders on Wii
Wii was technically a Gamecube Technology from time of Napoleon No shaders Instead the ultimate puzzle fun: TEV stages!
![Page 37: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/37.jpg)
TEV stages
Repeat this 16 times:
out = a*(1 - c) + b*c + d Set what a/b/c/d/out are per stage Can switch states to:
if(a.r > b.r) out = c; else out = d; Can do surprisingly much Difficult puzzle for advanced stuff!
![Page 38: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/38.jpg)
PS4 and Xbox One
Boring hardware Just really fast PCs Awesomenauts port outsourced to Abstraction I don't know API details
![Page 39: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/39.jpg)
Ronitechrenderingstructure
![Page 40: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/40.jpg)
Inspired by Ogre
Basic structure inspired by Ogre engine Object oriented C++ graphics engine Extremely neat class design Great engine, good low level access Few tools for modern standards Used for De Blob,
Snowball Earth,
Proun,
Cello Fortress
![Page 41: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/41.jpg)
Renderable
Core object for rendering Functions like these:
setPosition setScale setParallax setTexture setTextureWrap setBlendMode setColour
![Page 42: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/42.jpg)
Flexible for GPU types
Basic structure not based on shaders Properties can be implemented in various ways Shaders of course used on most platforms Looks exact same on Wii without shaders!
setTexture setColour setColourCombineMode //add, multiply, blend, etc setSecondaryTexture setSecondaryTextureOperation
![Page 43: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/43.jpg)
Inherited to provide geometry
virtual void getVertices(Vector2*& vertices,
Vector2*& textureCoordinates0,
Vector2*& textureCoordinates1,
unsigned int& count,
bool& isTriStrip) = 0;
Implemented by various shape/geometry types: Rectangle Circle RenderText ParticleSystem Terrain
![Page 44: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/44.jpg)
Automatic registration
SceneManager keeps track of all Renderables Renderable registers itself automaticallyRenderable::Renderable()
{
SceneManager::get()->addRenderable(this);
}
Renderable::~Renderable()
{
SceneManager::get()->removeRenderable(this);
}
![Page 45: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/45.jpg)
Rendering order
Everything has alpha in a 2D game Must render back to front Order by parallax and depth
![Page 46: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/46.jpg)
Viewports
Viewport defines part of screen to render to Viewport has a camera Viewport has a RenderGroup Automatically renders all Renderables in that
RenderGroup
![Page 47: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/47.jpg)
Flexible Viewports
Not just for splitscreen...
![Page 48: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/48.jpg)
Flexible Viewports
...also for overlays and such
![Page 49: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/49.jpg)
Performance
![Page 50: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/50.jpg)
Performance
Videocards insanely fast Can draw 1000 objects per frame at 60fps Our main performance bottlenecks:
CPU in general Fillrate
![Page 51: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/51.jpg)
Fillrate
Number of pixels drawn per frame or second 1920x1080 screen: 2073600 pixels Need to draw them all every frame No problem for modern videocard
![Page 52: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/52.jpg)
Overdraw
Drawing the same pixel several times Transparent objects like glass or smoke Rare in 3D games, super common in 2D games Quickly 10x overdraw or more Video! Video?
![Page 53: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/53.jpg)
Modifying art assets
![Page 54: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/54.jpg)
Rendering background at low res Background in Awesomenauts is blurred Improves visual focus and clarity Looks really good Can render background very low-res! Massive overdraw reduction
![Page 55: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/55.jpg)
Multi-threading
![Page 56: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/56.jpg)
Modern consoles
Modern consoles have many CPU cores Newest generation is simple: just a bunch of
cores Previous generation more complex: SPUs on
PS3 How to use these efficiently? Limited time to spend because small indie
studio
![Page 57: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/57.jpg)
Basic multi-threading approach
Don't use multi-threading Ignore the other cores Ignore the SPUs Ignore compute shaders Fine for most games (not for AAA of course)
![Page 58: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/58.jpg)
GPU timing
GPU is like an extra thread Runs any commands you feed it Commands go into queue, fire-and-forget How is the timing of that?
![Page 59: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/59.jpg)
What I thought (wrong!)
![Page 60: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/60.jpg)
What it is
![Page 61: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/61.jpg)
Must analyse
No use optimising GPU if CPU bound And other way around Must accurately measure before optimising!
![Page 62: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/62.jpg)
PS3 performance trouble
PS3 heavily reliant on SPUs Main cores are slow Couldn't get good framerate on just one core
![Page 63: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/63.jpg)
What to multithread?
Multithreading gameplay too difficult No heavy fluids/physics/lighting More doable: split renderer to separate thread
![Page 64: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/64.jpg)
Multithreading renderer
Cross-thread GL/DX calls not allowed Must split gameplay and renderer Gameplay updates for next frame while
rendering previous frame Must keep copies of all objects
![Page 65: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/65.jpg)
Awesomenauts threading model
This all happens on CPU! GPU not shown here
![Page 66: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/66.jpg)
Tools
![Page 67: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/67.jpg)
Video!
Video?
![Page 68: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/68.jpg)
Character animation Art in Photoshop Animate in After Effects Mostle deformation/skeletal, some frame-to-
frame
![Page 69: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/69.jpg)
![Page 70: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/70.jpg)
In-engine animation
Mostly special effects Particles Squash/rotate/skew Recolours Everything animated In-game Animation and Particle editors
![Page 71: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/71.jpg)
The power of recolours
Video! VIDEO!
![Page 72: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/72.jpg)
GPU compatibility
![Page 73: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/73.jpg)
PC videocards vary a lot
Several types (Nvidia, AMD, Intel) New types every year Many driver versions New versions of OpenGL / DirectX Random feature differences Random rare bugs Must support them all!
![Page 74: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/74.jpg)
2D relatively simply here
No need for advanced stuff like compute shaders
Can just skip most difficult compatibility topics
![Page 75: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/75.jpg)
Testing
Test on varied PCs Ask friends to test Closed beta close to launch
![Page 76: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/76.jpg)
In-house testing
Ultimate test-case: very old Intel cards Suck at everything If these run, almost everything will Intel GMA 950, 2005
![Page 77: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/77.jpg)
Our approach
Fix issues Work around weird bugs Add LOW graphics quality for super bad cards Result: Awesomenauts runs on REALLY crappy
Netbooks
![Page 78: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/78.jpg)
NPOT
Non-power-of-two textures Supported for ages Except by old Intel cards Only do 1024x512, 64x64, 128x256, etc Rescaled ALL textures for SD Half resolution, power-of-two, very little video
memory 1gb to 400mb
![Page 79: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/79.jpg)
Render textures
Not supported on old Intel cards Game significantly uglier Still wanted to support such cards
![Page 80: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/80.jpg)
Ati x900
Old videocards Lie about their features Had to recognise by name and make special
shaders for Proun
![Page 81: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/81.jpg)
Asus laptops
Certain series only Cannot initialise OpenGL at all Needed to add DirectX option to PC Also fixes for people with broken drivers
![Page 82: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/82.jpg)
Wrapping it up
![Page 83: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/83.jpg)
Ronimo looking for interns
September: C++ programmer on Awesomenauts
February: New positions in February C++ coder, 2D art, game/level design
Minimum 4 months, no research thesis projects
![Page 84: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/84.jpg)
Conclusion
Console development is just normal C++ With special secret libraries Very high technical requirements through
certification Big challenge: keep as much code multiplatform
as possible
![Page 85: Developing Ronimo's multiplatform graphics engine Joost van Dongen Co-founder Lead programmer](https://reader035.vdocument.in/reader035/viewer/2022062314/5681497e550346895db6c9c8/html5/thumbnails/85.jpg)
Questions?
Development blog:
www.joostvandongen.com
?