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* {
|
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 = 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));
|
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));
|
f.read(buffer_ptr, size * static_cast<unsigned int>(numVertices));
|
||||||
|
|
||||||
engine->get_gfx()->release_buffer_contents(buffer, buffer_ptr);
|
engine->get_gfx()->release_buffer_contents(buffer, buffer_ptr);
|
||||||
|
} else {
|
||||||
|
f.seek(size * static_cast<unsigned int>(numVertices));
|
||||||
|
}
|
||||||
|
|
||||||
return buffer;
|
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);
|
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));
|
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);
|
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);
|
engine->get_gfx()->release_buffer_contents(mesh->index_buffer, index_ptr);
|
||||||
|
|
||||||
|
|
|
@ -8,4 +8,6 @@ public:
|
||||||
const char* get_name() override;
|
const char* get_name() override;
|
||||||
|
|
||||||
bool initialize(const GFXCreateInfo& createInfo) 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_dummy.hpp"
|
||||||
|
|
||||||
|
#include "gfx_commandbuffer.hpp"
|
||||||
|
|
||||||
bool GFXDummy::is_supported() {
|
bool GFXDummy::is_supported() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -11,3 +13,7 @@ const char* GFXDummy::get_name() {
|
||||||
bool GFXDummy::initialize(const GFXCreateInfo& createInfo) {
|
bool GFXDummy::initialize(const GFXCreateInfo& createInfo) {
|
||||||
return true;
|
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;
|
return VK_SAMPLER_ADDRESS_MODE_REPEAT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VkFilter toFilter(GFXFilter filter) {
|
inline VkFilter toFilter(GFXFilter filter) {
|
||||||
switch (filter) {
|
switch (filter) {
|
||||||
case GFXFilter::Nearest:
|
case GFXFilter::Nearest:
|
||||||
return VK_FILTER_NEAREST;
|
return VK_FILTER_NEAREST;
|
||||||
|
@ -121,7 +121,7 @@ VkFilter toFilter(GFXFilter filter) {
|
||||||
return VK_FILTER_LINEAR;
|
return VK_FILTER_LINEAR;
|
||||||
}
|
}
|
||||||
|
|
||||||
VkBorderColor toBorderColor(GFXBorderColor color) {
|
inline VkBorderColor toBorderColor(GFXBorderColor color) {
|
||||||
switch (color) {
|
switch (color) {
|
||||||
case GFXBorderColor::OpaqueBlack:
|
case GFXBorderColor::OpaqueBlack:
|
||||||
return VK_BORDER_COLOR_INT_OPAQUE_BLACK;
|
return VK_BORDER_COLOR_INT_OPAQUE_BLACK;
|
||||||
|
|
|
@ -35,6 +35,7 @@ add_platform(
|
||||||
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in"
|
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in"
|
||||||
LINK_LIBRARIES
|
LINK_LIBRARIES
|
||||||
Core
|
Core
|
||||||
|
GFXDummy
|
||||||
${EXTRA_LIBRARIES}
|
${EXTRA_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Reference in a new issue