Just putting some links for documentation and articles that are relevant.
-
"How to write a renderer for modern graphics APIs" by Jasper St. Pierre
-
"The Missing Guide to Modern Graphics APIs – 1. Intro" by Jasper St. Pierre
-
"An Opinionated Post on Modern Rendering Abstraction Layers" by Alex Tardif
-
"API without Secrets: Introduction to Vulkan" by Pawel Lapinski at Intel
I decided to use a rust wrapper around bgfx instead of trying to learn Vulkan. Currently, the main.rs has a hello_winit example, that I adapted for newer version of winit. Next, I need to work on getting a custom shader, rendering a 3d terrain like in the SimonDev videos, and eventually getting a camera and input-movement system so I can explore the world.
Here are the new resources I'll be using now that I'm using bgfx-rs.
The hello_winit has basically no 3D boilerplate. Our first step should be to figure out what state we need to pass onto a new module where our "game" will live. It might also be tied into receiving event loop signals, not sure. Next, we could look at the examples (see bgfx-rs and bgfx) and get a demo working, then we should look into following the "shaders for beginners" guide, along with rust crates for compiling shader scripts, and finally plugging those into bgfx-rs.
The most difficult thing might be shaders. I looked a bit at how bgfx handles shaders, and they use a tool called Shader Compiler (shaderc, also has a rust crate). The bgfx docs mention "predefined uniforms" with helper macros, and using makefiles, so I'm not entirely certain how this will be done.
I need to read up about the terminology used, "uniforms", "vertex shader attributes". The first thing to tackle is getting a basic cubes example work, where I handle compiling the shader myself, so I can explore adding other features next.