summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/render/bgfx/effectmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/modules/render/bgfx/effectmanager.cpp')
-rw-r--r--src/osd/modules/render/bgfx/effectmanager.cpp34
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;
}