From ca57de8f996b4c022676c7395a486d3e72a066e8 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Mon, 21 Feb 2022 12:09:14 -0500 Subject: [PATCH] Support GFX dummy a little better There's now more checks to prevent crashing when the mapped buffer is actually null, like when running with the dummy backend. --- engine/asset/src/asset.cpp | 18 ++++++++++++------ engine/gfx/dummy/include/gfx_dummy.hpp | 2 ++ engine/gfx/dummy/src/gfx_dummy.cpp | 6 ++++++ engine/gfx/vulkan/src/gfx_vulkan.cpp | 4 ++-- platforms/sdl/CMakeLists.txt | 1 + 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/engine/asset/src/asset.cpp b/engine/asset/src/asset.cpp index dc36542..207514c 100644 --- a/engine/asset/src/asset.cpp +++ b/engine/asset/src/asset.cpp @@ -52,10 +52,13 @@ std::unique_ptr load_mesh(const prism::path& path) { const auto read_buffer = [&f = file.value(), numVertices](unsigned int size) -> GFXBuffer* { auto buffer = engine->get_gfx()->create_buffer(nullptr, size * static_cast(numVertices), false, GFXBufferUsage::Vertex); auto buffer_ptr = reinterpret_cast(engine->get_gfx()->get_buffer_contents(buffer)); - - f.read(buffer_ptr, size * static_cast(numVertices)); - - engine->get_gfx()->release_buffer_contents(buffer, buffer_ptr); + if(buffer_ptr != nullptr) { + f.read(buffer_ptr, size * static_cast(numVertices)); + + engine->get_gfx()->release_buffer_contents(buffer, buffer_ptr); + } else { + f.seek(size * static_cast(numVertices)); + } return buffer; }; @@ -77,8 +80,11 @@ std::unique_ptr load_mesh(const prism::path& path) { mesh->index_buffer = engine->get_gfx()->create_buffer(nullptr, sizeof(uint32_t) * numIndices, false, GFXBufferUsage::Index); auto index_ptr = reinterpret_cast(engine->get_gfx()->get_buffer_contents(mesh->index_buffer)); - - file->read(index_ptr, sizeof(uint32_t) * numIndices); + if(index_ptr != nullptr) { + file->read(index_ptr, sizeof(uint32_t) * numIndices); + } else { + file->seek(sizeof(uint32_t) * numIndices); + } engine->get_gfx()->release_buffer_contents(mesh->index_buffer, index_ptr); diff --git a/engine/gfx/dummy/include/gfx_dummy.hpp b/engine/gfx/dummy/include/gfx_dummy.hpp index 048a4b4..e678c5c 100755 --- a/engine/gfx/dummy/include/gfx_dummy.hpp +++ b/engine/gfx/dummy/include/gfx_dummy.hpp @@ -8,4 +8,6 @@ public: const char* get_name() override; bool initialize(const GFXCreateInfo& createInfo) override; + + GFXCommandBuffer* acquire_command_buffer(bool for_presentation_use) override; }; diff --git a/engine/gfx/dummy/src/gfx_dummy.cpp b/engine/gfx/dummy/src/gfx_dummy.cpp index 8250524..c735000 100755 --- a/engine/gfx/dummy/src/gfx_dummy.cpp +++ b/engine/gfx/dummy/src/gfx_dummy.cpp @@ -1,5 +1,7 @@ #include "gfx_dummy.hpp" +#include "gfx_commandbuffer.hpp" + bool GFXDummy::is_supported() { return true; } @@ -10,4 +12,8 @@ const char* GFXDummy::get_name() { bool GFXDummy::initialize(const GFXCreateInfo& createInfo) { return true; +} + +GFXCommandBuffer* GFXDummy::acquire_command_buffer(bool for_presentation_use) { + return new GFXCommandBuffer(); } \ No newline at end of file diff --git a/engine/gfx/vulkan/src/gfx_vulkan.cpp b/engine/gfx/vulkan/src/gfx_vulkan.cpp index b49a479..e659262 100755 --- a/engine/gfx/vulkan/src/gfx_vulkan.cpp +++ b/engine/gfx/vulkan/src/gfx_vulkan.cpp @@ -110,7 +110,7 @@ VkSamplerAddressMode toSamplerMode(SamplingMode mode) { return VK_SAMPLER_ADDRESS_MODE_REPEAT; } -VkFilter toFilter(GFXFilter filter) { +inline VkFilter toFilter(GFXFilter filter) { switch (filter) { case GFXFilter::Nearest: return VK_FILTER_NEAREST; @@ -121,7 +121,7 @@ VkFilter toFilter(GFXFilter filter) { return VK_FILTER_LINEAR; } -VkBorderColor toBorderColor(GFXBorderColor color) { +inline VkBorderColor toBorderColor(GFXBorderColor color) { switch (color) { case GFXBorderColor::OpaqueBlack: return VK_BORDER_COLOR_INT_OPAQUE_BLACK; diff --git a/platforms/sdl/CMakeLists.txt b/platforms/sdl/CMakeLists.txt index 11a80bc..6deeadb 100644 --- a/platforms/sdl/CMakeLists.txt +++ b/platforms/sdl/CMakeLists.txt @@ -35,6 +35,7 @@ add_platform( MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in" LINK_LIBRARIES Core + GFXDummy ${EXTRA_LIBRARIES} )