diff options
Diffstat (limited to 'include/vk-renderer.hpp')
| -rw-r--r-- | include/vk-renderer.hpp | 69 |
1 files changed, 58 insertions, 11 deletions
diff --git a/include/vk-renderer.hpp b/include/vk-renderer.hpp index ba9b5a0..76dfffc 100644 --- a/include/vk-renderer.hpp +++ b/include/vk-renderer.hpp @@ -1,21 +1,20 @@ #ifndef __VK_RENDERER_HPP_ #define __VK_RENDERER_HPP_ +#include <stdint.h> #include <vector> #include "vk-api.hpp" -#include "vulkan-loader.hpp" +#include "vulkan/vulkan_core.h" -#include "compute-renderpass.hpp" -class scene; +class Renderpass; +class ComputeRenderpass; class window; -class Texture { - public: - - image device_image; -}; +class Texture; +class Buffer; +class Sampler; class vkrenderer { public: @@ -33,19 +32,26 @@ class vkrenderer { void recreate_swapchain(); - void update_image(image img, void* data, size_t size); + void update_image(Texture* texture, void* data, size_t size); - Texture* create_2d_texture(size_t width, size_t height); + Buffer* create_buffer(size_t size, bool isStatic); + + Texture* create_2d_texture(size_t width, size_t height, VkFormat format); + + Sampler* create_sampler(VkFilter filter, VkSamplerAddressMode address_mode); ComputeRenderpass* create_compute_renderpass(); void render(); + uint32_t frame_index() { return this->virtual_frame_index; } + + private: + vkapi api; std::vector<Renderpass*> renderpasses; - private: void handle_swapchain_result(VkResult function_result); @@ -81,4 +87,45 @@ class vkrenderer { static constexpr uint32_t virtual_frames_count = 2; }; +// TODO: Move those to there own files +class Texture { + public: + + sampler sampler; + + image device_image; +}; + +class Sampler { + public: + sampler device_sampler; +}; + +class Buffer { + public: + + Buffer(vkrenderer* renderer, size_t size, bool isStatic) + : renderer(renderer), size(size), isStatic(isStatic) {} + + void* ptr() { + size_t offset = isStatic ? 0 : size * renderer->frame_index(); + return (uint8_t*)device_buffer.alloc_info.pMappedData + offset; + } + + unsigned long long device_address() { + size_t offset = isStatic ? 0 : size * renderer->frame_index(); + return device_buffer.device_address + offset; + } + + buffer device_buffer; + + private: + + bool isStatic; + + size_t size; + + vkrenderer* renderer; +}; + #endif // !__VK_RENDERER_HPP_ |
