Garnet
2 years ago
1 changed files with 49 additions and 0 deletions
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
`VkInstance` - application and extensions |
||||
- `VkPhysicalDevice` - selected based on properties and capabilities |
||||
|
||||
- `VkDevice` (also known as a logical device), describes which `VkPhysicalDeviceFeatures` will be used, which queue families |
||||
- `VkQueue`, allocated from queue families, examples of families are graphics, compute, and memory transfer |
||||
|
||||
- `VkSurfaceKHR`, a window surface, it's an extension that provides ways to interact with the window manager, |
||||
in our case GLFW will handle the specific details. |
||||
|
||||
- `VkSwapchainKHR`, a swap chain, it's a collection of targets for rendering. its first purpose is ensuring that the image |
||||
that is being rendered is not the same one that is on the screen, the most common ways to use one are double and triple |
||||
buffering, swapchains provide images. |
||||
|
||||
- On some platforms there are extensions (`VK_KHR_display`, `VK_KHR_display_swapchain`) that allow one to draw to the entire |
||||
screen. |
||||
|
||||
- Once an image is obtained from the swapchain it has to be wrapped into: |
||||
- `VkImageView`, an image view references a specific part of an image to be used |
||||
- `VkFramebuffer`, a framebuffer references images that are used for color, depth, and stencil targets. |
||||
in these examples the image views and framebuffers for each image in the swapchain will be created |
||||
ahead of time. |
||||
|
||||
- Render passes describe the type of images that are used during rendering, their usage, and how their |
||||
content will be treated, to draw a simple triangle we can tell vulkan that there will be a single image |
||||
that's a color target and that it needs to be cleared to a solid color before drawing. |
||||
Note: a render pass describes the type of images, a `VkFramebuffer` binds specific images to slots. |
||||
|
||||
- `VkPipeline`, describes the configuration of the graphics card, like viewport size, depth buffer operations, |
||||
the programmable state is specified using `VkShaderModule` objects, which are created from shader bytecode. |
||||
The driver also needs to know which render targets are going to be used in the pipeline. |
||||
All of the settings are configured in advance, and changing them requires creating a new `VkPipeline`. |
||||
|
||||
- Commands are recorded into a `VkCommandBuffer`, the buffers are allocated out of a `VkCommandPool` associated |
||||
with a queue family, in order to do some simple drawing we need to do the following: |
||||
- being a pass |
||||
- bind the pipeline |
||||
- draw 3 vertices |
||||
- end the pass |
||||
Since the image depends on which specific image the swap chain is going to give us, a command buffer for each |
||||
possible image will have to be recorded and the right one will be selected at draw time. |
||||
Recording every frame is also an option but it would be less performant. |
||||
|
||||
- Application main loop |
||||
- acquire image via `vkAcquireNextImageKHR` |
||||
- `vkAcquireNextImageKHR` to acquire an image |
||||
- select appropriate command buffer for the image |
||||
- execute the command buffer with `vkQueueSubmit` |
||||
- return the image to the swapchain for presentation with `vkQueuePresentKHR` |
||||
|
Loading…
Reference in new issue