diff options
Diffstat (limited to 'src/osd/modules/render/bgfx/effectmanager.cpp')
-rw-r--r-- | src/osd/modules/render/bgfx/effectmanager.cpp | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/src/osd/modules/render/bgfx/effectmanager.cpp b/src/osd/modules/render/bgfx/effectmanager.cpp index c7410406f13..a34b5c52d82 100644 --- a/src/osd/modules/render/bgfx/effectmanager.cpp +++ b/src/osd/modules/render/bgfx/effectmanager.cpp @@ -12,6 +12,7 @@ #include "emu.h" #include <rapidjson/document.h> +#include <rapidjson/error/en.h> #include <bgfx/bgfxplatform.h> #include <bgfx/bgfx.h> @@ -44,13 +45,21 @@ bgfx_effect* effect_manager::effect(std::string name) return load_effect(name); } -bgfx_effect* effect_manager::load_effect(std::string name) { - std::string path = "bgfx/effects/" + name + ".json"; +bgfx_effect* effect_manager::load_effect(std::string name) +{ + if (name.length() < 5 || (name.compare(name.length() - 5, 5, ".json") != 0)) { + name = name + ".json"; + } + std::string path = std::string(m_options.bgfx_path()) + "/effects/" + name; bx::CrtFileReader reader; - bx::open(&reader, path.c_str()); + if (!bx::open(&reader, path.c_str())) + { + printf("Unable to open effect file %s\n", path.c_str()); + return nullptr; + } - int32_t size = (uint32_t)bx::getSize(&reader); + int32_t size (bx::getSize(&reader)); char* data = new char[size + 1]; bx::read(&reader, reinterpret_cast<void*>(data), size); @@ -59,9 +68,22 @@ bgfx_effect* effect_manager::load_effect(std::string name) { Document document; document.Parse<0>(data); - bgfx_effect* effect = effect_reader::read_from_value(m_shaders, document); - m_effects[name] = effect; + if (document.HasParseError()) { + std::string error(GetParseError_En(document.GetParseError())); + printf("Unable to parse effect %s. Errors returned:\n", path.c_str()); + printf("%s\n", error.c_str()); + return nullptr; + } + + bgfx_effect* effect = effect_reader::read_from_value(document, "Effect '" + name + "': ", m_shaders); + + if (effect == nullptr) { + printf("Unable to load effect %s\n", path.c_str()); + return nullptr; + } + + m_effects[name] = effect; return effect; } |