Marc Games

( only in english )

About me

I'm an engineer in computer science, with a strong interest on applied mathematics. I'm currently working on the video-game industry, and I'm keeping developping on my free time too (alongside my other hobby ... the jazz music).

Email: landon.marc@outlook.fr

Behind the scene

I choose to not use an existing game engine, such as Unity or Unreal. Indeed, I like to program, within all aspects. I created TRE (TinyRenderEngine), which is a toolkit built on the top of SDL2 and OpenGL. This is the basement of my games. However, TRE is not a game-engine, but it helps with mesh operations, UI, shaders, contact algorithms and sound thread.

Some though about C++ feature-sets for games

TRE is using the STL, that uses exceptions for error handling. Exceptions have no impact on performances, while they are not triggered. Indeed, c++ has a nice paradigm that says: "don't pay for what you don't use". As far as exceptions are considered as nonrecoverable fatal errors, then the STL can still be used (in a solo-developer point of view).

Rendering API: modern OpenGL vs. Vulkan

Even though OpenGL is a pretty old rendering API, it is still used in legacy applications and small projects. Vulkan offers a great opportunity to tune the code that submits commands to the GPU, including multi-thread possibilities. While my games won't be limited by the rendering CPU thread, OpenGL will stay the default rendering API.

Oriented-Object vs. Data-Driven paradigm for games

The oriented-object paradigm is often adopted by software engineers. For generic game engines, this paradigm implies to have an "entity" oriented architecture (Data Driven Entity Component System in C++17 for example). But, at a coarse level, a game is basically a software that transforms data into rendering of frames (video and sound).
For games, the data can be split by the usage: the player's data (mouse, keyboard, joystick), the game's data (game logic, physics) and the rendering data. The data-driven paradigm allows better scopes for data, and facilitates parallelism. I found those two talks that helped me to put in practice data-driven programming: CppCon 2014: Mike Acton "Data-Oriented Design and C++" and CppCon 2018: Stoyan Nikolov “OOP Is Dead, Long Live Data-oriented Design”

Porting a C++/OpenGL game to web browsers

The web-assembly platform allows to run application inside web browsers. From a C++ desktop application using SDL2 and OpenGL, I found the Emscripten toolchain that offers a way to port them on web browsers. Web browsers have specific restrictions, like using WebGL2 for rendering and security limitations.