diff --git a/src/Magnum/GL/AbstractShaderProgram.cpp b/src/Magnum/GL/AbstractShaderProgram.cpp index 39e6ad7c6..a246694d5 100644 --- a/src/Magnum/GL/AbstractShaderProgram.cpp +++ b/src/Magnum/GL/AbstractShaderProgram.cpp @@ -626,7 +626,7 @@ bool AbstractShaderProgram::checkLink() { bool AbstractShaderProgram::link(std::initializer_list> 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; } diff --git a/src/Magnum/GL/Shader.cpp b/src/Magnum/GL/Shader.cpp index ec2510356..b4bcf94ee 100644 --- a/src/Magnum/GL/Shader.cpp +++ b/src/Magnum/GL/Shader.cpp @@ -804,7 +804,7 @@ bool Shader::compile(std::initializer_list> 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; } diff --git a/src/Magnum/Shaders/FlatGL.cpp b/src/Magnum/Shaders/FlatGL.cpp index 650c583c7..91a052fd1 100644 --- a/src/Magnum/Shaders/FlatGL.cpp +++ b/src/Magnum/Shaders/FlatGL.cpp @@ -192,12 +192,14 @@ template typename FlatGL::CompileState FlatG vert.submitCompile(); frag.submitCompile(); - CompileState cs{std::move(frag), std::move(vert), version, flags - #ifndef MAGNUM_TARGET_GLES - , materialCount, drawCount + FlatGL 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 typename FlatGL::CompileState FlatG } #endif - cs.submitLink(); + out.submitLink(); - return cs; + return CompileState{std::move(out), std::move()}; } template FlatGL::FlatGL(CompileState&& cs) @@ -317,16 +319,6 @@ template FlatGL::FlatGL(Flags flags #endif {} -template FlatGL::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 FlatGL::FlatGL(const Flags flags): FlatGL{flags, 1, 1} {} #endif diff --git a/src/Magnum/Shaders/FlatGL.h b/src/Magnum/Shaders/FlatGL.h index 38070f079..2278fa18c 100644 --- a/src/Magnum/Shaders/FlatGL.h +++ b/src/Magnum/Shaders/FlatGL.h @@ -1021,18 +1021,10 @@ template 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 class MAGNUM_SHADERS_EXPORT FlatGL: public GL:: template class FlatGL::CompileState : public FlatGL { 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&& shader, GL:Shader&& vert, GL::Shader&& frag, GL::Version version) : + FlatGL{std::move(shader)}, _vert{std::move(vert)}, _frag{std::move(frag)}, _version{version} {} GL::Shader _vert, _frag; GL::Version _version;