Browse Source

Refactor FlatGL::CompileState

pull/576/head
Vladislav Oleshko 4 years ago
parent
commit
8bcd04a1e2
  1. 2
      src/Magnum/GL/AbstractShaderProgram.cpp
  2. 2
      src/Magnum/GL/Shader.cpp
  3. 26
      src/Magnum/Shaders/FlatGL.cpp
  4. 27
      src/Magnum/Shaders/FlatGL.h

2
src/Magnum/GL/AbstractShaderProgram.cpp

@ -626,7 +626,7 @@ bool AbstractShaderProgram::checkLink() {
bool AbstractShaderProgram::link(std::initializer_list<Containers::Reference<AbstractShaderProgram>> shaders) {
for(AbstractShaderProgram& shader: shaders) shader.submitLink();
bool allSuccess = true;
for(AbstractShaderProgram& shader: shaders) allSuccess &= shader.checkLink();
for(AbstractShaderProgram& shader: shaders) allSuccess = allSuccess && shader.checkLink();
return allSuccess;
}

2
src/Magnum/GL/Shader.cpp

@ -804,7 +804,7 @@ bool Shader::compile(std::initializer_list<Containers::Reference<Shader>> shader
/* Invoke (possibly parallel) compilation on all shaders */
for(Shader& shader: shaders) shader.submitCompile();
bool allSuccess = true;
for(Shader& shader: shaders) allSuccess &= shader.checkCompile();
for(Shader& shader: shaders) allSuccess = allSuccess && shader.checkCompile();
return allSuccess;
}

26
src/Magnum/Shaders/FlatGL.cpp

@ -192,12 +192,14 @@ template<UnsignedInt dimensions> typename FlatGL<dimensions>::CompileState FlatG
vert.submitCompile();
frag.submitCompile();
CompileState cs{std::move(frag), std::move(vert), version, flags
#ifndef MAGNUM_TARGET_GLES
, materialCount, drawCount
FlatGL<dimensions> out{NoInit};
out._flags = flags;
#ifndef MAGNUM_TARGET_GLES2
out._materialCount = materialCount;
out._drawCount = drawCount;
#endif
};
cs.attachShaders({cs._frag, cs._vert});
out.attachShaders({vert, frag});
/* ES3 has this done in the shader directly and doesn't even provide
bindFragmentDataLocation() */
@ -230,9 +232,9 @@ template<UnsignedInt dimensions> typename FlatGL<dimensions>::CompileState FlatG
}
#endif
cs.submitLink();
out.submitLink();
return cs;
return CompileState{std::move(out), std::move()};
}
template<UnsignedInt dimensions> FlatGL<dimensions>::FlatGL(CompileState&& cs)
@ -317,16 +319,6 @@ template<UnsignedInt dimensions> FlatGL<dimensions>::FlatGL(Flags flags
#endif
{}
template<UnsignedInt dimensions> FlatGL<dimensions>::FlatGL(NoInitT, Flags flags
#ifndef MAGNUM_TARGET_GLES2
, UnsignedInt materialCount, UnsignedInt drawCount
#endif
) : GL::AbstractShaderProgram{}, _flags(flags),
#ifndef MAGNUM_TARGET_GLES2
_materialCount(materialCount), _drawCount(drawCount)
#endif
{}
#ifndef MAGNUM_TARGET_GLES2
template<UnsignedInt dimensions> FlatGL<dimensions>::FlatGL(const Flags flags): FlatGL{flags, 1, 1} {}
#endif

27
src/Magnum/Shaders/FlatGL.h

@ -1021,18 +1021,10 @@ template<UnsignedInt dimensions> class MAGNUM_SHADERS_EXPORT FlatGL: public GL::
}
#endif
protected:
/**
* @brief Construct without running shader compilation and linking
*
*/
FlatGL(NoInitT, Flags flags
#ifndef MAGNUM_TARGET_GLES2
, UnsignedInt materialCount, UnsignedInt drawCount
#endif
);
private:
/* Creates the GL shader program object but nothing else. Internal, used by compile(). */
explicit FlatGL(NoInitT) {}
/* Prevent accidentally calling irrelevant functions */
#ifndef MAGNUM_TARGET_GLES
using GL::AbstractShaderProgram::drawTransformFeedback;
@ -1063,19 +1055,12 @@ template<UnsignedInt dimensions> class MAGNUM_SHADERS_EXPORT FlatGL: public GL::
template<UnsignedInt dimensions> class FlatGL<dimensions>::CompileState : public FlatGL<dimensions> {
private:
friend class FlatGL;
using FlatGL::FlatGL;
using FlatGL::isLinkFinished;
CompileState(NoCreateT) : FlatGL(NoCreate), _vert{NoCreate}, _frag{NoCreate} {}
CompileState(GL::Shader&& vert, GL::Shader&& frag, GL::Version version, Flags flags
#ifndef MAGNUM_TARGET_GLES2
, UnsignedInt materialCount, UnsignedInt drawCount
#endif
) : FlatGL(NoInit, flags
#ifndef MAGNUM_TARGET_GLES2
, materialCount, drawCount
#endif
), _vert(std::move(vert)), _frag(std::move(frag)), _version(version) {}
CompileState(FlatGL<dimensions>&& shader, GL:Shader&& vert, GL::Shader&& frag, GL::Version version) :
FlatGL<dimensions>{std::move(shader)}, _vert{std::move(vert)}, _frag{std::move(frag)}, _version{version} {}
GL::Shader _vert, _frag;
GL::Version _version;

Loading…
Cancel
Save