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:
parent
f932f83b89
commit
ca57de8f99
5 changed files with 23 additions and 8 deletions
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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();
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -35,6 +35,7 @@ add_platform(
|
|||
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in"
|
||||
LINK_LIBRARIES
|
||||
Core
|
||||
GFXDummy
|
||||
${EXTRA_LIBRARIES}
|
||||
)
|
||||
|
||||
|
|
Reference in a new issue