CsPaint uses the Vulkan API to render and draw graphics and text to the screen. There are multiple parts to this process, however it can be summarized into general areas. Each section involves multiple steps which will be expanded upon.
- Initial setup: order dependent
- Create an instance
- Create a surface
- Select a graphics device from the available hardware
- Configuration: order independent
- Load fragment shaders
- Load vertex shaders
- Load any other required shaders
- Retrieve graphics queue
- Retrieve transfer queue
- Retrieve presentation queue
- Retrieve swapchain
- Retrieve command pool
- Create command buffer
- Descriptors
- Create a descriptor layout binding
- Create a descriptor layout
- Create a descriptor pool
- Allocate a descriptor set
- Setup a pipeline
- Create a pipeline shader stage
- Create a pipeline layout (using the descriptor layout)
- Create a render pass
- Create fixed function pipeline
- Drawing
- Create vertex buffer
- Create uniform buffer
- Create image view which can be used as the depth buffer
- Create a pipeline
- Use the pipeline setup to create a graphics pipeline
- Screen rendering: Call these every time the screen needs to be updated
- begin command buffer
- begin render pass
- do drawing commands
- end render pass
- begin command buffer
- submit command buffer