#include "resource_shader.h" #include "debug.h" #include "substring.h" ResourceShader::ResourceShader(const std::string& vertexShaderName, const std::string& fragmentShaderName, const Resources::KeepLevel& keepLevel) : Resource(&ResourceShader::type) { Resources::StorePointer* ptr = this->acquireResource(vertexShaderName +','+fragmentShaderName); if (ptr) { PRINTF(5)("FOUND SHADER: %s\n", vertexShaderName.c_str()); this->acquireData(static_cast(ptr)->ptr()); } else { PRINTF(5)("NOT FOUND SHADER: %s\n", vertexShaderName.c_str()); std::string vertexFileName = this->Resource::locateFile(vertexShaderName); std::string fragmentFileName; if (!fragmentShaderName.empty()) fragmentFileName = this->Resource::locateFile(fragmentShaderName); this->Shader::load(vertexFileName, fragmentFileName); this->Resource::addResource(new ResourceShader::ShaderResourcePointer(vertexShaderName+','+fragmentShaderName, keepLevel, this->Shader::dataPointer())); } } ResourceShader ResourceShader::createFromString(const std::string& loadString, const Resources::KeepLevel& keepLevel) { std::string vertexShaderName; std::string fragmentShaderName; SubString shaderNames(loadString, ','); if (shaderNames.size() > 0) vertexShaderName = shaderNames[0]; if (shaderNames.size() > 1) fragmentShaderName = shaderNames[1]; return ResourceShader(vertexShaderName, fragmentShaderName, keepLevel); } Resources::tType ResourceShader::type("Shader"); ResourceShader::ShaderResourcePointer::ShaderResourcePointer(const std::string& loadString, const Resources::KeepLevel& keepLevel, const ShaderData::Pointer& data) : Resources::StorePointer(loadString, keepLevel) , pointer(data) {}