Browse Source

Shaders: simplify a bunch of repeated checks in shader code.

pull/442/head
Vladimír Vondruš 6 years ago
parent
commit
6eccc479f0
  1. 14
      src/Magnum/Shaders/MeshVisualizer.cpp
  2. 8
      src/Magnum/Shaders/MeshVisualizer.vert

14
src/Magnum/Shaders/MeshVisualizer.cpp

@ -111,7 +111,6 @@ GL::Version MeshVisualizerBase::setupShaders(GL::Shader& vert, GL::Shader& frag,
frag = Implementation::createCompatibilityShader(rs, version, GL::Shader::Type::Fragment); frag = Implementation::createCompatibilityShader(rs, version, GL::Shader::Type::Fragment);
vert.addSource(_flags & FlagBase::Wireframe ? "#define WIREFRAME_RENDERING\n" : "") vert.addSource(_flags & FlagBase::Wireframe ? "#define WIREFRAME_RENDERING\n" : "")
.addSource(_flags & FlagBase::NoGeometryShader ? "#define NO_GEOMETRY_SHADER\n" : "")
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
.addSource(_flags & FlagBase::InstancedObjectId ? "#define INSTANCED_OBJECT_ID\n" : "") .addSource(_flags & FlagBase::InstancedObjectId ? "#define INSTANCED_OBJECT_ID\n" : "")
.addSource(_flags >= FlagBase::PrimitiveIdFromVertexId ? "#define PRIMITIVE_ID_FROM_VERTEX_ID\n" : "") .addSource(_flags >= FlagBase::PrimitiveIdFromVertexId ? "#define PRIMITIVE_ID_FROM_VERTEX_ID\n" : "")
@ -196,6 +195,11 @@ MeshVisualizer2D::MeshVisualizer2D(const Flags flags): Implementation::MeshVisua
const GL::Version version = setupShaders(vert, frag, rs); const GL::Version version = setupShaders(vert, frag, rs);
vert.addSource("#define TWO_DIMENSIONS\n") vert.addSource("#define TWO_DIMENSIONS\n")
/* Pass NO_GEOMETRY_SHADER not only when NoGeometryShader but also when
nothing actually needs it, as that makes checks much simpler in
the vertex shader code */
.addSource((flags & Flag::NoGeometryShader) || !(flags & Flag::Wireframe) ?
"#define NO_GEOMETRY_SHADER\n" : "")
.addSource(rs.get("generic.glsl")) .addSource(rs.get("generic.glsl"))
.addSource(rs.get("MeshVisualizer.vert")); .addSource(rs.get("MeshVisualizer.vert"));
frag.addSource(rs.get("generic.glsl")) frag.addSource(rs.get("generic.glsl"))
@ -352,6 +356,14 @@ MeshVisualizer3D::MeshVisualizer3D(const Flags flags): Implementation::MeshVisua
#endif #endif
vert.addSource("#define THREE_DIMENSIONS\n") vert.addSource("#define THREE_DIMENSIONS\n")
/* Pass NO_GEOMETRY_SHADER not only when NoGeometryShader but also when
nothing actually needs it, as that makes checks much simpler in
the vertex shader code */
.addSource((flags & Flag::NoGeometryShader) || !(flags & (Flag::Wireframe
#if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL)
|Flag::TangentDirection|Flag::BitangentDirection|Flag::BitangentFromTangentDirection|Flag::NormalDirection
#endif
)) ? "#define NO_GEOMETRY_SHADER\n" : "")
#if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) #if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL)
.addSource(flags & Flag::TangentDirection ? "#define TANGENT_DIRECTION\n" : "") .addSource(flags & Flag::TangentDirection ? "#define TANGENT_DIRECTION\n" : "")
.addSource(flags & Flag::BitangentFromTangentDirection ? "#define BITANGENT_FROM_TANGENT_DIRECTION\n" : "") .addSource(flags & Flag::BitangentFromTangentDirection ? "#define BITANGENT_FROM_TANGENT_DIRECTION\n" : "")

8
src/Magnum/Shaders/MeshVisualizer.vert

@ -132,7 +132,7 @@ layout(location = OBJECT_ID_ATTRIBUTE_LOCATION)
#endif #endif
in highp uint instanceObjectId; in highp uint instanceObjectId;
#if defined(NO_GEOMETRY_SHADER) || (!defined(WIREFRAME_RENDERING) && !defined(TANGENT_DIRECTION) && !defined(BITANGENT_DIRECTION) && !defined(BITANGENT_FROM_TANGENT_DIRECTION) && !defined(NORMAL_DIRECTION)) #ifdef NO_GEOMETRY_SHADER
flat out highp uint interpolatedInstanceObjectId; flat out highp uint interpolatedInstanceObjectId;
#else #else
flat out highp uint interpolatedVsInstanceObjectId; flat out highp uint interpolatedVsInstanceObjectId;
@ -140,7 +140,7 @@ flat out highp uint interpolatedVsInstanceObjectId;
#endif #endif
#ifdef PRIMITIVE_ID_FROM_VERTEX_ID #ifdef PRIMITIVE_ID_FROM_VERTEX_ID
#if defined(NO_GEOMETRY_SHADER) || (!defined(WIREFRAME_RENDERING) && !defined(TANGENT_DIRECTION) && !defined(BITANGENT_DIRECTION) && !defined(BITANGENT_FROM_TANGENT_DIRECTION) && !defined(NORMAL_DIRECTION)) #ifdef NO_GEOMETRY_SHADER
flat out highp uint interpolatedPrimitiveId; flat out highp uint interpolatedPrimitiveId;
#else #else
flat out highp uint interpolatedVsPrimitiveId; flat out highp uint interpolatedVsPrimitiveId;
@ -199,7 +199,7 @@ void main() {
#endif #endif
#ifdef INSTANCED_OBJECT_ID #ifdef INSTANCED_OBJECT_ID
#if defined(NO_GEOMETRY_SHADER) || (!defined(WIREFRAME_RENDERING) && !defined(TANGENT_DIRECTION) && !defined(BITANGENT_DIRECTION) && !defined(BITANGENT_FROM_TANGENT_DIRECTION) && !defined(NORMAL_DIRECTION)) #ifdef NO_GEOMETRY_SHADER
interpolatedInstanceObjectId interpolatedInstanceObjectId
#else #else
interpolatedVsInstanceObjectId interpolatedVsInstanceObjectId
@ -207,7 +207,7 @@ void main() {
= instanceObjectId; = instanceObjectId;
#endif #endif
#ifdef PRIMITIVE_ID_FROM_VERTEX_ID #ifdef PRIMITIVE_ID_FROM_VERTEX_ID
#if defined(NO_GEOMETRY_SHADER) || (!defined(WIREFRAME_RENDERING) && !defined(TANGENT_DIRECTION) && !defined(BITANGENT_DIRECTION) && !defined(BITANGENT_FROM_TANGENT_DIRECTION) && !defined(NORMAL_DIRECTION)) #ifdef NO_GEOMETRY_SHADER
interpolatedPrimitiveId interpolatedPrimitiveId
#else #else
interpolatedVsPrimitiveId interpolatedVsPrimitiveId

Loading…
Cancel
Save