Archived
1
Fork 0

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.
This commit is contained in:
Joshua Goins 2022-02-21 12:09:14 -05:00
parent f932f83b89
commit ca57de8f99
5 changed files with 23 additions and 8 deletions

View file

@ -52,10 +52,13 @@ std::unique_ptr<Mesh> 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<unsigned int>(numVertices), false, GFXBufferUsage::Vertex);
auto buffer_ptr = reinterpret_cast<unsigned char*>(engine->get_gfx()->get_buffer_contents(buffer));
if(buffer_ptr != nullptr) {
f.read(buffer_ptr, size * static_cast<unsigned int>(numVertices));
engine->get_gfx()->release_buffer_contents(buffer, buffer_ptr);
} else {
f.seek(size * static_cast<unsigned int>(numVertices));
}
return buffer;
};
@ -77,8 +80,11 @@ std::unique_ptr<Mesh> 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<uint32_t*>(engine->get_gfx()->get_buffer_contents(mesh->index_buffer));
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);

View file

@ -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;
};

View file

@ -1,5 +1,7 @@
#include "gfx_dummy.hpp"
#include "gfx_commandbuffer.hpp"
bool GFXDummy::is_supported() {
return true;
}
@ -11,3 +13,7 @@ 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();
}

View file

@ -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;

View file

@ -35,6 +35,7 @@ add_platform(
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in"
LINK_LIBRARIES
Core
GFXDummy
${EXTRA_LIBRARIES}
)