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).
( only in
)
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).
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.
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).
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.
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”
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.