From e3b0d1d4ceb2bfe6ca01db71fe596a4e98cdc345 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 6 Apr 2014 22:42:54 +0200 Subject: [PATCH] Shaders: use texture multi-bind functionality in Phong shader. --- src/Magnum/Shaders/Phong.cpp | 5 +++++ src/Magnum/Shaders/Phong.h | 18 +++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/Magnum/Shaders/Phong.cpp b/src/Magnum/Shaders/Phong.cpp index e7bf2594e..21f346d16 100644 --- a/src/Magnum/Shaders/Phong.cpp +++ b/src/Magnum/Shaders/Phong.cpp @@ -130,4 +130,9 @@ Phong& Phong::setSpecularTexture(Texture2D& texture) { return *this; } +Phong& Phong::setTextures(Texture2D* ambient, Texture2D* diffuse, Texture2D* specular) { + AbstractTexture::bind(AmbientTextureLayer, {ambient, diffuse, specular}); + return *this; +} + }} diff --git a/src/Magnum/Shaders/Phong.h b/src/Magnum/Shaders/Phong.h index c2cd09356..902496ca7 100644 --- a/src/Magnum/Shaders/Phong.h +++ b/src/Magnum/Shaders/Phong.h @@ -132,7 +132,7 @@ class MAGNUM_SHADERS_EXPORT Phong: public AbstractShaderProgram { * @return Reference to self (for method chaining) * * Has effect only if @ref Flag::AmbientTexture is set. - * @see @ref setAmbientColor() + * @see @ref setTextures(), @ref setAmbientColor() */ Phong& setAmbientTexture(Texture2D& texture); @@ -150,7 +150,7 @@ class MAGNUM_SHADERS_EXPORT Phong: public AbstractShaderProgram { * @return Reference to self (for method chaining) * * Has effect only if @ref Flag::DiffuseTexture is set. - * @see @ref setDiffuseColor() + * @see @ref setTextures(), @ref setDiffuseColor() */ Phong& setDiffuseTexture(Texture2D& texture); @@ -169,10 +169,22 @@ class MAGNUM_SHADERS_EXPORT Phong: public AbstractShaderProgram { * @return Reference to self (for method chaining) * * Has effect only if @ref Flag::SpecularTexture is set. - * @see @ref setSpecularColor() + * @see @ref setTextures(), @ref setSpecularColor() */ Phong& setSpecularTexture(Texture2D& texture); + /** + * @brief Set textures + * @return Reference to self (for method chaining) + * + * A particular texture has effect only if particular texture flag from + * @ref Phong::Flag "Flag" is set, you can use `nullptr` for the rest. + * More efficient than setting each texture separately. + * @see @ref setAmbientTexture(), @ref setDiffuseTexture(), + * @ref setSpecularTexture() + */ + Phong& setTextures(Texture2D* ambient, Texture2D* diffuse, Texture2D* specular); + /** * @brief Set shininess * @return Reference to self (for method chaining)