From 6eccc479f06e07722336d5aecc0347c4468ea0e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 3 May 2020 15:16:42 +0200 Subject: [PATCH] Shaders: simplify a bunch of repeated checks in shader code. --- src/Magnum/Shaders/MeshVisualizer.cpp | 14 +++++++++++++- src/Magnum/Shaders/MeshVisualizer.vert | 8 ++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/Magnum/Shaders/MeshVisualizer.cpp b/src/Magnum/Shaders/MeshVisualizer.cpp index 114e47bac..03c78a1ba 100644 --- a/src/Magnum/Shaders/MeshVisualizer.cpp +++ b/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" : "") diff --git a/src/Magnum/Shaders/MeshVisualizer.vert b/src/Magnum/Shaders/MeshVisualizer.vert index e8ff213e6..4443dd8c7 100644 --- a/src/Magnum/Shaders/MeshVisualizer.vert +++ b/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