Skip to content
Snippets Groups Projects
Commit 19429326 authored by sdegrande's avatar sdegrande
Browse files

Rewrite ProgramExtension : put the implementation in the .cpp file

parent 70e864ad
No related branches found
No related tags found
No related merge requests found
......@@ -11,6 +11,48 @@ ProgramExtension::ProgramExtension(const std::string& config)
if (!config.empty()) programConf = jsonFromString(config);
}
ProgramExtension::~ProgramExtension()
{
if (next) delete next;
next = nullptr;
}
void ProgramExtension::linkExtension(ProgramExtension* ext)
{
if (!next)
next = ext;
else
next->linkExtension(ext);
}
void ProgramExtension::destroy()
{
extensionDestroy();
if (next) next->destroy();
}
void ProgramExtension::getUniformsID(GLuint programID)
{
extensionGetUniformsID(programID);
if (next) next->getUniformsID(programID);
}
void ProgramExtension::setUniforms(GLuint programID, Renderer* renderer, const glm::mat4& modelMat)
{
extensionSetUniforms(programID, renderer, modelMat);
if (next) next->setUniforms(programID, renderer, modelMat);
}
Json::Value ProgramExtension::getProgramConf() const
{
Json::Value localConf { programConf };
if (next) {
Json::Value nextConf { next->getProgramConf() };
mergeJson(localConf, nextConf, true);
}
return localConf;
}
//=============================================================================
SkeletonProgramExtension::SkeletonProgramExtension()
......
......@@ -22,56 +22,18 @@ class Renderer;
class ProgramExtension
{
protected:
using ProgramData = Program::ProgramData;
public:
ProgramExtension() = default;
explicit ProgramExtension(const std::string& config);
virtual ~ProgramExtension()
{
if (next) delete next;
next = nullptr;
}
virtual ~ProgramExtension();
void linkExtension(ProgramExtension* ext)
{
if (!next)
next = ext;
else
next->linkExtension(ext);
}
void linkExtension(ProgramExtension* ext);
// Hooks in Program
void destroy()
{
extensionDestroy();
if (next) next->destroy();
}
void getUniformsID(GLuint programID)
{
extensionGetUniformsID(programID);
if (next) next->getUniformsID(programID);
}
void setUniforms(GLuint programID, Renderer* renderer, const glm::mat4& modelMat)
{
extensionSetUniforms(programID, renderer, modelMat);
if (next) next->setUniforms(programID, renderer, modelMat);
}
void setInstanceUniforms(GLuint programID, Renderer* renderer, ProgramData* programData)
{
extensionSetInstanceUniforms(programID, renderer, programData);
if (next) next->setInstanceUniforms(programID, renderer, programData);
}
Json::Value getProgramConf() const
{
Json::Value localConf { programConf };
if (next) {
Json::Value nextConf { next->getProgramConf() };
mergeJson(localConf, nextConf, true);
}
return localConf;
}
void destroy();
void getUniformsID(GLuint programID);
void setUniforms(GLuint programID, Renderer* renderer, const glm::mat4& modelMat);
Json::Value getProgramConf() const;
protected:
ProgramExtension* next { nullptr };
......@@ -81,7 +43,6 @@ protected:
virtual void extensionDestroy() {}
virtual void extensionGetUniformsID(GLuint programID) {}
virtual void extensionSetUniforms(GLuint programID, Renderer* renderer, const glm::mat4& modelMat) const {}
virtual void extensionSetInstanceUniforms(GLuint programID, Renderer* renderer, ProgramData* programData) const {}
virtual Json::Value extensionGetProgramConf() const
{
return {};
......
......@@ -43,7 +43,6 @@ void ProgramWrapper::bindAndSetUniforms(Renderer* renderer, const glm::mat4& mod
shaderProgram->setInstanceUniforms(renderer, programData);
if (nextExtension) {
nextExtension->setUniforms(shaderProgram->getProgramId(), renderer, modelMat);
nextExtension->setInstanceUniforms(shaderProgram->getProgramId(), renderer, programData);
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment