// license:BSD-3-Clause // copyright-holders:Ryan Holtz //============================================================ // // effectmanager.cpp - BGFX shader effect manager // // Maintains a string-to-entry lookup of BGFX shader // effects, defined by effect.h and read by effectreader.h // //============================================================ #include "emu.h" #include #include #include #include #include #include "effectmanager.h" #include "effectreader.h" #include "effect.h" using namespace rapidjson; effect_manager::~effect_manager() { for (std::pair effect : m_effects) { delete effect.second; } m_effects.clear(); } bgfx_effect* effect_manager::effect(std::string name) { std::map::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(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; }