Browse Source

Refactor FlatGL::CompileState

pull/576/head
Vladislav Oleshko 4 years ago
parent
commit
37b47f148c
  1. 4
      src/Magnum/GL/AbstractShaderProgram.cpp
  2. 19
      src/Magnum/GL/AbstractShaderProgram.h
  3. 25
      src/Magnum/Shaders/FlatGL.cpp
  4. 64
      src/Magnum/Shaders/FlatGL.h

4
src/Magnum/GL/AbstractShaderProgram.cpp

@ -649,10 +649,6 @@ bool AbstractShaderProgram::isLinkFinished() {
return success == GL_TRUE;
}
bool AbstractShaderProgram::CompileState::isLinkFinished() {
return AbstractShaderProgram::isLinkFinished();
}
void AbstractShaderProgram::cleanLogImplementationNoOp(std::string&) {}
#if defined(CORRADE_TARGET_WINDOWS) && !defined(MAGNUM_TARGET_GLES)

19
src/Magnum/GL/AbstractShaderProgram.h

@ -449,8 +449,6 @@ class MAGNUM_GL_EXPORT AbstractShaderProgram: public AbstractObject {
friend Implementation::ShaderProgramState;
public:
struct CompileState;
#ifndef MAGNUM_TARGET_GLES2
/**
* @brief Buffer mode for transform feedback
@ -1260,6 +1258,12 @@ class MAGNUM_GL_EXPORT AbstractShaderProgram: public AbstractObject {
AbstractShaderProgram& dispatchCompute(const Vector3ui& workgroupCount);
#endif
/**
* @brief Non-blocking linking status check
*
*/
bool isLinkFinished();
protected:
/**
* @brief Link the shaders
@ -1487,12 +1491,6 @@ class MAGNUM_GL_EXPORT AbstractShaderProgram: public AbstractObject {
*/
bool checkLink();
/**
* @brief Non-blocking linking status check
*
*/
bool isLinkFinished();
/**
* @brief Get uniform location
* @param name Uniform name
@ -1769,11 +1767,6 @@ class MAGNUM_GL_EXPORT AbstractShaderProgram: public AbstractObject {
#endif
};
struct AbstractShaderProgram::CompileState : public AbstractShaderProgram {
using AbstractShaderProgram::AbstractShaderProgram;
bool isLinkFinished();
};
}}
#endif

25
src/Magnum/Shaders/FlatGL.cpp

@ -191,8 +191,8 @@ template<UnsignedInt dimensions> typename FlatGL<dimensions>::CompileState FlatG
GL::Shader::submitCompile({vert, frag});
CompileState cs{std::move(frag), std::move(vert), flags
#ifndef MAGNUM_TARGET_GLES2
CompileState cs{std::move(frag), std::move(vert), version, flags
#ifndef MAGNUM_TARGET_GLES
, materialCount, drawCount
#endif
};
@ -235,19 +235,12 @@ template<UnsignedInt dimensions> typename FlatGL<dimensions>::CompileState FlatG
}
template<UnsignedInt dimensions> FlatGL<dimensions>::FlatGL(CompileState&& cs)
: AbstractShaderProgram{static_cast<AbstractShaderProgram&&>(std::move(cs))},
_flags(cs._flags), _materialCount{cs._materialCount}, _drawCount(cs._drawCount) {
: FlatGL{static_cast<FlatGL&&>(std::move(cs))} {
CORRADE_INTERNAL_ASSERT_OUTPUT(GL::Shader::checkCompile({cs._vert, cs._frag}));
CORRADE_INTERNAL_ASSERT_OUTPUT(checkLink());
const GL::Context& context = GL::Context::current();
#ifndef MAGNUM_TARGET_GLES
const GL::Version version = context.supportedVersion({GL::Version::GL320, GL::Version::GL310, GL::Version::GL300, GL::Version::GL210});
#else
const GL::Version version = context.supportedVersion({GL::Version::GLES300, GL::Version::GLES200});
#endif
const GL::Version version = cs._version;
#ifndef MAGNUM_TARGET_GLES
if(!context.isExtensionSupported<GL::Extensions::ARB::explicit_uniform_location>(version))
@ -322,6 +315,16 @@ 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

64
src/Magnum/Shaders/FlatGL.h

@ -613,38 +613,6 @@ template<UnsignedInt dimensions> class MAGNUM_SHADERS_EXPORT FlatGL: public GL::
#endif
);
struct CompileState : public GL::AbstractShaderProgram::CompileState {
friend CompileState FlatGL::compile(Flags
#ifndef MAGNUM_TARGET_GLES2
, UnsignedInt, UnsignedInt
#endif
);
friend FlatGL::FlatGL(CompileState&&);
explicit CompileState(NoCreateT) noexcept: GL::AbstractShaderProgram::CompileState({NoCreate}),
_vert(NoCreate), _frag(NoCreate) {}
CompileState(GL::Shader&& vert, GL::Shader&& frag, Flags flags
#ifndef MAGNUM_TARGET_GLES2
, UnsignedInt materialCount, UnsignedInt drawCount
#endif
)
: _vert(std::move(vert)), _frag(std::move(frag)), _flags(flags)
#ifndef MAGNUM_TARGET_GLES2
,_materialCount(materialCount), _drawCount(drawCount)
#endif
{}
private:
GL::Shader _vert, _frag;
Flags _flags;
#ifndef MAGNUM_TARGET_GLES2
UnsignedInt _materialCount;
UnsignedInt _drawCount;
#endif
};
/** @brief Copying is not allowed */
FlatGL(const FlatGL<dimensions>&) = delete;
@ -1053,6 +1021,17 @@ 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:
/* Prevent accidentally calling irrelevant functions */
#ifndef MAGNUM_TARGET_GLES
@ -1081,6 +1060,27 @@ template<UnsignedInt dimensions> class MAGNUM_SHADERS_EXPORT FlatGL: public GL::
#endif
};
template<UnsignedInt dimensions> class FlatGL<dimensions>::CompileState : public FlatGL<dimensions> {
private:
friend class FlatGL;
using FlatGL::FlatGL;
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) {}
GL::Shader _vert, _frag;
GL::Version _version;
};
/**
@brief 2D flat OpenGL shader
@m_since_latest

Loading…
Cancel
Save