diff --git a/src/Magnum/Shaders/AbstractVector.h b/src/Magnum/Shaders/AbstractVector.h index 4006746c0..19fb5d588 100644 --- a/src/Magnum/Shaders/AbstractVector.h +++ b/src/Magnum/Shaders/AbstractVector.h @@ -59,6 +59,15 @@ template class AbstractVector: public GL::AbstractShader */ typedef typename Generic::TextureCoordinates TextureCoordinates; + enum: UnsignedInt { + /** + * Color shader output. @ref shaders-generic "Generic output", + * present always. Expects three- or four-component floating-point + * or normalized buffer attachment. + */ + ColorOutput = Generic::ColorOutput + }; + /** @brief Copying is not allowed */ AbstractVector(const AbstractVector&) = delete; diff --git a/src/Magnum/Shaders/DistanceFieldVector.cpp b/src/Magnum/Shaders/DistanceFieldVector.cpp index df9da7d33..8f3f05bf7 100644 --- a/src/Magnum/Shaders/DistanceFieldVector.cpp +++ b/src/Magnum/Shaders/DistanceFieldVector.cpp @@ -61,7 +61,8 @@ template DistanceFieldVector::DistanceFieldV vert.addSource(rs.get("generic.glsl")) .addSource(rs.get(vertexShaderName())); - frag.addSource(rs.get("DistanceFieldVector.frag")); + frag.addSource(rs.get("generic.glsl")) + .addSource(rs.get("DistanceFieldVector.frag")); CORRADE_INTERNAL_ASSERT_OUTPUT(GL::Shader::compile({vert, frag})); diff --git a/src/Magnum/Shaders/DistanceFieldVector.frag b/src/Magnum/Shaders/DistanceFieldVector.frag index c008b2eac..c00bc6fa3 100644 --- a/src/Magnum/Shaders/DistanceFieldVector.frag +++ b/src/Magnum/Shaders/DistanceFieldVector.frag @@ -69,6 +69,9 @@ uniform lowp sampler2D vectorTexture; in mediump vec2 fragmentTextureCoordinates; #ifdef NEW_GLSL +#ifdef EXPLICIT_ATTRIB_LOCATION +layout(location = COLOR_OUTPUT_ATTRIBUTE_LOCATION) +#endif out lowp vec4 fragmentColor; #endif diff --git a/src/Magnum/Shaders/MeshVisualizer.cpp b/src/Magnum/Shaders/MeshVisualizer.cpp index 5bac33b49..6f53d8de2 100644 --- a/src/Magnum/Shaders/MeshVisualizer.cpp +++ b/src/Magnum/Shaders/MeshVisualizer.cpp @@ -85,6 +85,7 @@ MeshVisualizer::MeshVisualizer(const Flags flags): _flags{flags} { .addSource(rs.get("MeshVisualizer.vert")); frag.addSource(flags & Flag::Wireframe ? "#define WIREFRAME_RENDERING\n" : "") .addSource(flags & Flag::NoGeometryShader ? "#define NO_GEOMETRY_SHADER\n" : "") + .addSource(rs.get("generic.glsl")) .addSource(rs.get("MeshVisualizer.frag")); #if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) diff --git a/src/Magnum/Shaders/MeshVisualizer.frag b/src/Magnum/Shaders/MeshVisualizer.frag index 88dd7bda6..19ff354a3 100644 --- a/src/Magnum/Shaders/MeshVisualizer.frag +++ b/src/Magnum/Shaders/MeshVisualizer.frag @@ -92,6 +92,9 @@ in lowp vec3 barycentric; #endif #ifdef NEW_GLSL +#ifdef EXPLICIT_ATTRIB_LOCATION +layout(location = COLOR_OUTPUT_ATTRIBUTE_LOCATION) +#endif out lowp vec4 fragmentColor; #endif diff --git a/src/Magnum/Shaders/MeshVisualizer.h b/src/Magnum/Shaders/MeshVisualizer.h index ce41238dd..c62a0d6ab 100644 --- a/src/Magnum/Shaders/MeshVisualizer.h +++ b/src/Magnum/Shaders/MeshVisualizer.h @@ -128,6 +128,15 @@ class MAGNUM_SHADERS_EXPORT MeshVisualizer: public GL::AbstractShaderProgram { */ typedef GL::Attribute<3, Float> VertexIndex; + enum: UnsignedInt { + /** + * Color shader output. @ref shaders-generic "Generic output", + * present always. Expects three- or four-component floating-point + * or normalized buffer attachment. + */ + ColorOutput = Generic3D::ColorOutput + }; + /** * @brief Flag * diff --git a/src/Magnum/Shaders/Vector.cpp b/src/Magnum/Shaders/Vector.cpp index 6d1c2bdfa..6573eba57 100644 --- a/src/Magnum/Shaders/Vector.cpp +++ b/src/Magnum/Shaders/Vector.cpp @@ -61,7 +61,8 @@ template Vector::Vector() { vert.addSource(rs.get("generic.glsl")) .addSource(rs.get(vertexShaderName())); - frag.addSource(rs.get("Vector.frag")); + frag.addSource(rs.get("generic.glsl")) + .addSource(rs.get("Vector.frag")); CORRADE_INTERNAL_ASSERT_OUTPUT(GL::Shader::compile({vert, frag})); diff --git a/src/Magnum/Shaders/Vector.frag b/src/Magnum/Shaders/Vector.frag index 613ba5c42..63ebb022b 100644 --- a/src/Magnum/Shaders/Vector.frag +++ b/src/Magnum/Shaders/Vector.frag @@ -51,6 +51,9 @@ uniform lowp sampler2D vectorTexture; in mediump vec2 fragmentTextureCoordinates; #ifdef NEW_GLSL +#ifdef EXPLICIT_ATTRIB_LOCATION +layout(location = COLOR_OUTPUT_ATTRIBUTE_LOCATION) +#endif out lowp vec4 fragmentColor; #endif diff --git a/src/Magnum/Shaders/VertexColor.cpp b/src/Magnum/Shaders/VertexColor.cpp index 10f33e51f..923885e5a 100644 --- a/src/Magnum/Shaders/VertexColor.cpp +++ b/src/Magnum/Shaders/VertexColor.cpp @@ -61,7 +61,8 @@ template VertexColor::VertexColor() { vert.addSource(rs.get("generic.glsl")) .addSource(rs.get(vertexShaderName())); - frag.addSource(rs.get("VertexColor.frag")); + frag.addSource(rs.get("generic.glsl")) + .addSource(rs.get("VertexColor.frag")); CORRADE_INTERNAL_ASSERT_OUTPUT(GL::Shader::compile({vert, frag})); diff --git a/src/Magnum/Shaders/VertexColor.frag b/src/Magnum/Shaders/VertexColor.frag index 8eef639f1..f3d5beb4a 100644 --- a/src/Magnum/Shaders/VertexColor.frag +++ b/src/Magnum/Shaders/VertexColor.frag @@ -31,6 +31,9 @@ in lowp vec4 interpolatedColor; #ifdef NEW_GLSL +#ifdef EXPLICIT_ATTRIB_LOCATION +layout(location = COLOR_OUTPUT_ATTRIBUTE_LOCATION) +#endif out lowp vec4 fragmentColor; #endif diff --git a/src/Magnum/Shaders/VertexColor.h b/src/Magnum/Shaders/VertexColor.h index dc24aaee0..97d8618ed 100644 --- a/src/Magnum/Shaders/VertexColor.h +++ b/src/Magnum/Shaders/VertexColor.h @@ -89,6 +89,15 @@ template class MAGNUM_SHADERS_EXPORT VertexColor: public */ typedef typename Generic::Color4 Color4; + enum: UnsignedInt { + /** + * Color shader output. @ref shaders-generic "Generic output", + * present always. Expects three- or four-component floating-point + * or normalized buffer attachment. + */ + ColorOutput = Generic::ColorOutput + }; + #ifdef MAGNUM_BUILD_DEPRECATED /** * @brief Vertex color