Skip to content

Learning project for graphics programming in Rust

License

Notifications You must be signed in to change notification settings

hokkonsz/lavapond

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lavapond

dependency status

Learning project for graphics programming using Vulkan with Ash in Rust. Here I collected all the useful resources I used through my journey up until this point. It may also be useful for others who have stumbled across it.

VULKAN

I started with the most recommended Vulkan tutorial by Alexander Overvoorde. There is also a licensed version of this on the officialy Khronos site, but because I used the one created by Alexander I can't really compare the two. Although the original has a Rust implementation I didn't really used it, because it uses Vulkano instead of Ash. Speaking of Ash, the exmaple project in Ash was also very useful and I would recommend it, if you have difficulties implementing the C++ code in Rust.

Understanding every aspect of the tutorial could also be problematic, especially if you are new to this field. Fortunately there are a plenty of resources on Vulkan. For example there is a free video series about Vulkan Essentials on the Computer Graphics at TU Wien channel, created by Johannes Unterguggenberger. If at any steps you have difficulties with understanding a part of Vulkan or something is not clear, then I recommend to check the official Vulkan Specification. You can also find many offical examples under the Khronos Group github.

MATH / COMPUTER GRAPHICS

Math and especially matrices are playing the main role to thoroughly understand computer graphics. For example I used the matrices tutorial on opengl-tutorial.org, to refresh my knowledge on the subject. But I found the Learning Modern 3D Graphics Programming by Jason L. McKesson also really helpful for learning about general topics in computer graphics, which cannot be learned by only reading the Vulkan tutorial or Vulkan specifications.

NEXT STEPS

After all of this you will have a base knowledge of how Vulkan and computer graphics works. If you want to step up your game, then there are some other useful resources, like Writing an efficient Vulkan renderer by Arseny Kapoulkine. For anyone who is interested in vector graphics there is Vector graphics on GPU by Aurimas Gasiulis. I also found interesenting of the Drawing Antialiased Lines with OpenGL by Konstantin Käfer. Maybe reading these will put an idea in your head about where to go next.

ABOUT THE PROJECT

Here is a short introduction to the project through the Physics System example. This is still only a WIP and wannabe physics system, where I am trying to simulate the collision of different objects.

cargo run --example physics_app

app_run

Calling app::run() will create a window and an event loop via the winit crate, where the latter handles the user inputs and issues the draw calls. When the main events are cleared we update the physics system, create a draw pool and submit a draw request to the renderer.

draw_request

  1. Syncronization
  2. Clear & Begin Command Buffer ( After All Commands Recorded End )
  3. Begin Render Pass ( After All Drawing Commands Recorded End Pass )
  4. Record Commands: Binding Data (eg. Pipeline, Vertex Buffer, ...), Set Scissor & Viewport, Drawing
  5. Submit Command Buffer To Queue + Present Queue

About

Learning project for graphics programming in Rust

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published