Final thoughts


These last tutorials gave a glimpse of what it's like to create something more than just a tech demo in OpenGL. We created a complete 2D game from scratch and learned how to abstract from certain low-level graphics concepts, use basic collision detection techniques, create particles and we've shown a practical scenario for an orthographic projection matrix. All this using concepts we've discussed in the previous tutorial series. We did not really learn new and exciting graphics techniques using OpenGL, but more as to how to combine all the knowledge so far into a larger whole.

Creating a simple game like Breakout can be accomplished in thousands of different ways of which this approach is just one of many. The larger a game becomes, the more you start applying abstractions and design patterns. For further reading you can find most of these abstractions and design patterns in the wonderful game programming patterns website.

Keep in mind that it is a difficult feat to create a game with extremely clean and well-thought out code (often close to impossible). Simply make your game in whatever way you think feels right at the time. The more you practice video-game development the more you learn new and better approaches to solve problems. Don't let the struggle to want to create perfect code demotivate you; keep on coding!


The content of these tutorials and the finished game code were all focused on explaining concepts as simple as possible without delving much into optimization details. Therefore, many performance considerations were left out of the tutorials. We'll list some of the more common improvements you'll find in modern 2D OpenGL games to boost performance for when your framerate starts to drop:

These should give you some hints as to what kind of advanced tricks we can apply to further boost the performance of a 2D game. This also gives you a glimpse of the power of OpenGL: by doing most rendering by hand we have full control over how we accomplish the entire process and thus also complete power over how to optimize the process. If you're not satisfied with Breakout's performance then feel free to take any of these as an exercise.

Get creative

Now that you've seen how to create a simple game in OpenGL it is up to you to create your own rendering/game applications. Many of the techniques that we've discussed so far can be used in most 2D games like sprite rendering, basic collision detection, postprocessing, text rendering and particles. It is now up to you to take these techniques and combine/modify them in whichever way you think is right and develop your own handcrafted game.