From 00a8383214c6dfd0992d7a44b269a0cba8b4ac61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 3 Nov 2013 00:18:54 +0100 Subject: [PATCH] Shaders: ability to specify background color in Vector shader. Makes it possible to use the shader without blending. --- src/Shaders/Vector.cpp | 3 ++- src/Shaders/Vector.frag | 6 ++++-- src/Shaders/Vector.h | 15 +++++++++++++++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/Shaders/Vector.cpp b/src/Shaders/Vector.cpp index e89db7f86..301ef4770 100644 --- a/src/Shaders/Vector.cpp +++ b/src/Shaders/Vector.cpp @@ -38,7 +38,7 @@ namespace { template<> constexpr const char* vertexShaderName<3>() { return "AbstractVector3D.vert"; } } -template Vector::Vector(): transformationProjectionMatrixUniform(0), colorUniform(1) { +template Vector::Vector(): transformationProjectionMatrixUniform(0), backgroundColorUniform(1), colorUniform(2) { Utility::Resource rs("MagnumShaders"); #ifndef MAGNUM_TARGET_GLES @@ -76,6 +76,7 @@ template Vector::Vector(): transformationPro #endif { transformationProjectionMatrixUniform = AbstractShaderProgram::uniformLocation("transformationProjectionMatrix"); + backgroundColorUniform = AbstractShaderProgram::uniformLocation("backgroundColor"); colorUniform = AbstractShaderProgram::uniformLocation("color"); } diff --git a/src/Shaders/Vector.frag b/src/Shaders/Vector.frag index 8dd88fd4c..aa61ad4c4 100644 --- a/src/Shaders/Vector.frag +++ b/src/Shaders/Vector.frag @@ -29,8 +29,10 @@ #endif #ifdef EXPLICIT_UNIFORM_LOCATION -layout(location = 1) uniform vec4 color; +layout(location = 1) uniform vec4 backgroundColor; +layout(location = 2) uniform vec4 color; #else +uniform lowp vec4 backgroundColor; uniform lowp vec4 color; #endif @@ -48,5 +50,5 @@ out lowp vec4 fragmentColor; void main() { lowp float intensity = texture(vectorTexture, fragmentTextureCoordinates).r; - fragmentColor = intensity*color; + fragmentColor = mix(backgroundColor, color, intensity); } diff --git a/src/Shaders/Vector.h b/src/Shaders/Vector.h index 92e3b3860..10808325d 100644 --- a/src/Shaders/Vector.h +++ b/src/Shaders/Vector.h @@ -56,9 +56,23 @@ template class MAGNUM_SHADERS_EXPORT Vector: public Abst return *this; } + /** + * @brief Set background color + * @return Reference to self (for method chaining) + * + * Default is transparent black. + * @see @ref setColor() + */ + Vector& setBackgroundColor(const Color4& color) { + AbstractShaderProgram::setUniform(backgroundColorUniform, color); + return *this; + } + /** * @brief Set fill color * @return Reference to self (for method chaining) + * + * @see @ref setBackgroundColor() */ Vector& setColor(const Color4& color) { AbstractShaderProgram::setUniform(colorUniform, color); @@ -67,6 +81,7 @@ template class MAGNUM_SHADERS_EXPORT Vector: public Abst private: Int transformationProjectionMatrixUniform, + backgroundColorUniform, colorUniform; };