An open API service indexing awesome lists of open source software.

https://github.com/ka-iden/hyper

Mini Vulkan Engine for testing
https://github.com/ka-iden/hyper

cpp vulkan

Last synced: 11 months ago
JSON representation

Mini Vulkan Engine for testing

Awesome Lists containing this project

README

          

# hyper

Making myself a little Vulkan Engine using C++.
I named it hyper because I want to make a fast-ish engine (probably not how it'll turn out haha).

## Progress

I want to completely understand how the whole vulkan graphics pipeline works, so I will not be using any tools such as [vk-bootstrap].

|

  • - [ ] Vulkan Initialisation |
    • - [ ] The Interesting Stuff |
      • - [ ] Extras |
        |----------------------------------------|----------------------------------------|-----------------------------------------|
        |
        • - [x] Window Creation |
          • - [x] ShaderEXT Creation |
            • - [ ] Deferred Rendering |
              |
              • - [x] Instance Creation |
                • - [x] Eradication of Pipelines |
                  • - [ ] Asset System |
                    |
                    • - [x] Extension Setup |
                      • - [x] Buffer Class |
                        • - [ ] Multiple Shader Setup |
                          |
                          • - [x] Device Handling |
                            • - [x] Image Class |
                              • - [ ] Post-Processing |
                                |
                                • - [x] Queues |
                                  • - [ ] Mesh Class |
                                    • - [ ] Material System |
                                      |
                                      • - [x] Swapchain |
                                        • - [ ] Compute Shaders |
                                          • - [ ] Raytracing (maybe) |
                                            |
                                            • - [x] Buffers |
                                              • - [x] ImGUI Implementation |
                                                • - [ ] Meshlet Rendering (maybe) |
                                                  |
                                                  • - [x] Textures |
                                                    • - [ ] Instancing ||
                                                      |
                                                      • - [ ] GLTF Loading |
                                                        • - [ ] Multithreading ||
                                                          | |
                                                          • - [ ] Mipmaps ||

                                                            ## Building

                                                            You can build this on Windows using the included Visual Studio 2022 solution.
                                                            I plan to one day use [CMake] or [Premake], but until then, VS2022 FTW
                                                            Builds may be found [here] sometimes, but I probably won't upload them too often until I am way later in development.

                                                            ## Tools

                                                            - [GLFW] for window creation
                                                            - [Vulkan-Hpp] as a C++ wrapper for the vulkan API
                                                            - [stb_image] from stb for image loading
                                                            - [VulkanMemoryAllocator] for memory management
                                                            - [ImGui] for a simple GUI

                                                            ## Learning Resources

                                                            - [Vulkan Tutorial] for in-depth Vulkan setup
                                                            - [Vulkan Guide] for a more high-level look into Vulkan
                                                            - [Vulkan Registry] for API usage/spec
                                                            - [VkResult spec] - Good to remember/check when finding errors
                                                            - [Vulkan Docs] for more API use/spec
                                                            - [VK_EXT_shader_object tutorial] - Good, but only a 11% implementation rate on gpus
                                                            - [VMA Docs] for API use/spec for VulkanMemoryAllocator
                                                            - [GIGD Vulkan Project] for a more in-depth look into Vulkan
                                                            - [Sascha Willems' Vulkan Examples] for examples of specific Vulkan features
                                                            - [Vulkan Minimal Example] for an example of unique handles
                                                            - [VK_KHR_dynamic_rendering tutorial] - Used this extension early on, good stuff
                                                            - [Buffer device addersses in Vulkan and VMA] - Another good extension
                                                            - [Managing bindless descriptors in Vulkan] - Not used yet

                                                            ## Licenses

                                                            This project is licensed under the [MIT License].
                                                            GLFW is licensed under the [zlib/libpng][vendor/GLFW] license, and the license file is in [here][vendor/GLFW].
                                                            stb_image is both in the public domain ([Unlicense]) and underneath the [MIT License]. Their custom license file is found [here][vendor/stb].
                                                            ImGui is licensed under the [MIT License][vendor/imgui].
                                                            Vulkan-Hpp is licensed under the [Apache License 2.0].
                                                            VulkanMemoryAllocator is licensed under the [MIT License].
                                                            tinyobjloader is licensed under the [MIT License][vendor/tinyobjloader], and the license file is in [here][vendor/tinyobjloader].

                                                            [vk-bootstrap]: https://github.com/charles-lunarg/vk-bootstrap/
                                                            [CMake]: https://cmake.org/
                                                            [Premake]: https://premake.github.io/
                                                            [here]: https://github.com/fl2mex/hyper/releases/

                                                            [GLFW]: https://github.com/glfw/glfw/
                                                            [Vulkan-Hpp]: https://github.com/KhronosGroup/Vulkan-Hpp/
                                                            [stb_image]: https://github.com/nothings/stb/blob/master/stb_image.h
                                                            [VulkanMemoryAllocator]: https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
                                                            [ImGui]: https://github.com/ocornut/imgui

                                                            [Vulkan Tutorial]: https://vulkan-tutorial.com/
                                                            [Vulkan Guide]: https://vkguide.dev/
                                                            [Vulkan Registry]: https://registry.khronos.org/vulkan/specs/latest/registry.html
                                                            [Vulkan Docs]: https://docs.vulkan.org/spec/latest/
                                                            [VMA Docs]: https://gpuopen-librariesandsdks.github.io/VulkanMemoryAllocator/html
                                                            [GIGD Vulkan Project]: https://github.com/amengede/getIntoGameDev/tree/main/vulkan
                                                            [Sascha Willems' Vulkan Examples]: https://github.com/SaschaWillems/Vulkan
                                                            [Vulkan Minimal Example]: https://github.com/dokipen3d/vulkanHppMinimalExample

                                                            [MIT License]: https://opensource.org/license/MIT
                                                            [Unlicense]: https://unlicense.org/#the-unlicense
                                                            [Apache License 2.0]: https://www.apache.org/licenses/LICENSE-2.0
                                                            [vendor/GLFW]: vendor/GLFW/LICENSE.md
                                                            [vendor/stb]: vendor/stb/LICENSE.txt
                                                            [vendor/imgui]: vendor/imgui/LICENSE.txt
                                                            [vendor/tinyobjloader]: vendor/tinyobjloader/LICENSE

                                                            [VkResult spec]: https://registry.khronos.org/vulkan/specs/latest/man/html/VkResult.html
                                                            [VK_KHR_dynamic_rendering tutorial]: https://lesleylai.info/en/vk-khr-dynamic-rendering/
                                                            [VK_EXT_shader_object tutorial]: https://docs.vulkan.org/samples/latest/samples/extensions/shader_object/README.html
                                                            [Managing bindless descriptors in Vulkan]: https://dev.to/gasim/implementing-bindless-design-in-vulkan-34no
                                                            [Buffer device addersses in Vulkan and VMA]: https://dev.to/gasim/buffer-device-addresses-in-vulkan-and-vma-7ne