MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ setup_backend_service()

void MayaFlux::Core::BackendResourceManager::setup_backend_service ( const std::shared_ptr< Registry::Service::BufferService > &  buffer_service)

Definition at line 19 of file BackendResoureManager.cpp.

20{
21 buffer_service->initialize_buffer = [this](const std::shared_ptr<void>& vk_buf) -> void {
22 auto buffer = std::static_pointer_cast<Buffers::VKBuffer>(vk_buf);
23 this->initialize_buffer(buffer);
24 };
25
26 buffer_service->destroy_buffer = [this](const std::shared_ptr<void>& vk_buf) {
27 auto buffer = std::static_pointer_cast<Buffers::VKBuffer>(vk_buf);
28 this->cleanup_buffer(buffer);
29 };
30
31 buffer_service->execute_immediate = [this](const std::function<void(void*)>& recorder) {
32 this->execute_immediate_commands([recorder](vk::CommandBuffer cmd) {
33 recorder(static_cast<void*>(cmd));
34 });
35 };
36
37 buffer_service->record_deferred = [this](const std::function<void(void*)>& recorder) {
38 this->record_deferred_commands([recorder](vk::CommandBuffer cmd) {
39 recorder(static_cast<void*>(cmd));
40 });
41 };
42
43 buffer_service->flush_range = [this](void* memory, size_t offset, size_t size) {
44 vk::DeviceMemory mem(reinterpret_cast<VkDeviceMemory>(memory));
45 vk::MappedMemoryRange range { mem, offset, size == 0 ? VK_WHOLE_SIZE : size };
46 if (auto result = m_context.get_device().flushMappedMemoryRanges(1, &range); result != vk::Result::eSuccess) {
48 "Failed to flush mapped memory range: {}", vk::to_string(result));
49 }
50 };
51
52 buffer_service->invalidate_range = [this](void* memory, size_t offset, size_t size) {
53 vk::DeviceMemory mem(reinterpret_cast<VkDeviceMemory>(memory));
54 vk::MappedMemoryRange range { mem, offset, size == 0 ? VK_WHOLE_SIZE : size };
55 if (auto result = m_context.get_device().invalidateMappedMemoryRanges(1, &range); result != vk::Result::eSuccess) {
57 "Failed to invalidate mapped memory range: {}", vk::to_string(result));
58 }
59 };
60
61 buffer_service->map_buffer = [this](void* memory, size_t offset, size_t size) -> void* {
62 vk::DeviceMemory mem(reinterpret_cast<VkDeviceMemory>(memory));
63 return m_context.get_device().mapMemory(mem, offset, size == 0 ? VK_WHOLE_SIZE : size);
64 };
65
66 buffer_service->unmap_buffer = [this](void* memory) {
67 vk::DeviceMemory mem(reinterpret_cast<VkDeviceMemory>(memory));
68 m_context.get_device().unmapMemory(mem);
69 };
70}
#define MF_ERROR(comp, ctx,...)
void cleanup_buffer(const std::shared_ptr< Buffers::VKBuffer > &buffer)
Cleanup a buffer and release associated resources.
void execute_immediate_commands(const std::function< void(vk::CommandBuffer)> &recorder)
Execute immediate command recording for buffer operations.
void initialize_buffer(const std::shared_ptr< Buffers::VKBuffer > &buffer)
Initialize a buffer for use with the graphics backend.
void record_deferred_commands(const std::function< void(vk::CommandBuffer)> &recorder)
Record deferred command recording for buffer operations.
vk::Device get_device() const
Get logical device.
Definition VKContext.hpp:49
@ GraphicsBackend
Graphics/visual rendering backend (Vulkan, OpenGL)
@ Core
Core engine, backend, subsystems.

References cleanup_buffer(), MayaFlux::Journal::Core, execute_immediate_commands(), MayaFlux::Core::VKContext::get_device(), MayaFlux::Journal::GraphicsBackend, initialize_buffer(), m_context, MF_ERROR, and record_deferred_commands().

+ Here is the call graph for this function: