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);
vert.addSource(_flags & FlagBase::Wireframe ? "#define WIREFRAME_RENDERING\n" : "")
.addSource(_flags & FlagBase::NoGeometryShader ? "#define NO_GEOMETRY_SHADER\n" : "")
#ifndef MAGNUM_TARGET_GLES2
.addSource(_flags & FlagBase::InstancedObjectId ? "#define INSTANCED_OBJECT_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);
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("MeshVisualizer.vert"));
frag.addSource(rs.get("generic.glsl"))
@ -352,6 +356,14 @@ MeshVisualizer3D::MeshVisualizer3D(const Flags flags): Implementation::MeshVisua
#endif
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)
.addSource(flags & Flag::TangentDirection ? "#define 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
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;
#else
flat out highp uint interpolatedVsInstanceObjectId;
@ -140,7 +140,7 @@ flat out highp uint interpolatedVsInstanceObjectId;
#endif
#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;
#else
flat out highp uint interpolatedVsPrimitiveId;
@ -199,7 +199,7 @@ void main() {
#endif
#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
#else
interpolatedVsInstanceObjectId
@ -207,7 +207,7 @@ void main() {
= instanceObjectId;
#endif
#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
#else
interpolatedVsPrimitiveId

Loading…
Cancel
Save