diff options
Diffstat (limited to 'src/osd/modules/render/bgfx/effectmanager.cpp')
-rw-r--r-- | src/osd/modules/render/bgfx/effectmanager.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/osd/modules/render/bgfx/effectmanager.cpp b/src/osd/modules/render/bgfx/effectmanager.cpp new file mode 100644 index 00000000000..094abb66b5b --- /dev/null +++ b/src/osd/modules/render/bgfx/effectmanager.cpp @@ -0,0 +1,55 @@ +#include "emu.h" + +#include <rapidjson/document.h> + +#include <bgfx/bgfxplatform.h> +#include <bgfx/bgfx.h> +#include <bx/readerwriter.h> + +#include "effectmanager.h" +#include "effectreader.h" +#include "effect.h" + +using namespace rapidjson; + +effect_manager::~effect_manager() +{ + for (std::pair<std::string, bgfx_effect*> effect : m_effects) + { + delete effect.second; + } + m_effects.clear(); +} + +bgfx_effect* effect_manager::effect(std::string name) +{ + std::map<std::string, bgfx_effect*>::iterator iter = m_effects.find(name); + if (iter != m_effects.end()) + { + return iter->second; + } + + return load_effect(name); +} + +bgfx_effect* effect_manager::load_effect(std::string name) { + std::string path = "bgfx/effects/" + name + ".json"; + + bx::CrtFileReader reader; + bx::open(&reader, path.c_str()); + + int32_t size = (uint32_t)bx::getSize(&reader); + + char* data = new char[size + 1]; + bx::read(&reader, reinterpret_cast<void*>(data), size); + bx::close(&reader); + data[size] = 0; + + Document document; + document.Parse<0>(data); + bgfx_effect* effect = effect_reader::read_from_value(m_shaders, document); + + m_effects[name] = effect; + + return effect; +} |