- Includes all the project include dependencies in a single palace pre-configures by the macros for them to work
- Consists of a command line parses to take options from the command line
- Utility Macros for
main()
method for easy runnning of examples- This is automatically included by the base class onto the example file that derives this, this all the examples can be built concurrently
- Provides default vulkan objects to render simple geometry such as
- default Command Pool to allocate command buuffers, default descriptorsets, default swapchain images and framebuffers
- All these can be customized by overriding the virtual methods
Draw()
is used for recording the command buffers, renderpasses and actual draw commands. They are called everyframe- Automatic synchronization management for swapchain and framebuffers, the primitives and image index are passed properly to the
BuildSwapchain
andBuildFramebuffer
methods to be completely customizable. Broken further intoRenderFrame
: Default image acquire + submission and command buffer submission functionPresentFrame
: Presents the current image to the swap chain
- All the methods as well their entire children calls are Virtual with default fool-proof behavior, this provides way for reusable and completely customizable application
Initxxxx
--> InitVulkan
--> Prepare
(Virtual) --> RenderLoop
(Virtual) --> Implicit resources clean up --> Client CleanUp
In-detail function calls flow
InitVulkan
Instance
Device Init
Command Pool Init
(default)- [Optional] Shaders Reflection
SetupSynchronization
primitives
Prepare
BuildSwapchain
BuildCommandPool
Build Pipeline Fixed Functions or cache
CreateTextureResources
CreateBufferResources
BuildShaders
ReflectShaders
[Used later need to refactor this]BuildGraphicsPipeline
BuildCommandBuffers
BuildDescriptors
BuildRenderpasses
RenderLoop
- Init while loop
- Calculation of delta time, fps etc. + Profiling
ImGuiFrameInit
OnUpdate
+ Camera UpdateOnRender
- Begins and records draw commands and render passes- Default Behaviour (Virtual and can be overridden by the Client application)
- Query for descriptorsets and Command buffers
- Being recording render pass and command buffer
Draw
RenderFrame
PresentFrame