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) { bool AbstractShaderProgram::link(std::initializer_list<Containers::Reference<AbstractShaderProgram>> shaders) {
for(AbstractShaderProgram& shader: shaders) shader.submitLink(); for(AbstractShaderProgram& shader: shaders) shader.submitLink();
bool allSuccess = true; bool allSuccess = true;
for(AbstractShaderProgram& shader: shaders) allSuccess &= shader.checkLink(); for(AbstractShaderProgram& shader: shaders) allSuccess = allSuccess && shader.checkLink();
return allSuccess; 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 */ /* Invoke (possibly parallel) compilation on all shaders */
for(Shader& shader: shaders) shader.submitCompile(); for(Shader& shader: shaders) shader.submitCompile();
bool allSuccess = true; bool allSuccess = true;
for(Shader& shader: shaders) allSuccess &= shader.checkCompile(); for(Shader& shader: shaders) allSuccess = allSuccess && shader.checkCompile();
return allSuccess; return allSuccess;
} }

26
src/Magnum/Shaders/FlatGL.cpp

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

27
src/Magnum/Shaders/FlatGL.h

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

Loading…
Cancel
Save