From 9d326d4ff136bfc5c26ace4739a9a2444638c6c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Tue, 12 May 2015 22:09:45 +0200 Subject: [PATCH] Better handling of compiled-in resources in static build. Each class/function that needs to access the resources first checks whether the group exists and the group is registered if not. Thus there is now no difference and annoying special cases when using static build. --- src/Magnum/Shaders/CMakeLists.txt | 4 -- src/Magnum/Shaders/DistanceFieldVector.cpp | 5 +++ src/Magnum/Shaders/Flat.cpp | 5 +++ .../CreateCompatibilityShader.h | 6 +++ src/Magnum/Shaders/MeshVisualizer.cpp | 5 +++ src/Magnum/Shaders/Phong.cpp | 5 +++ .../Test/DistanceFieldVectorGLTest.cpp | 4 -- src/Magnum/Shaders/Test/FlatGLTest.cpp | 4 -- .../Shaders/Test/MeshVisualizerGLTest.cpp | 4 -- src/Magnum/Shaders/Test/PhongGLTest.cpp | 4 -- src/Magnum/Shaders/Test/VectorGLTest.cpp | 4 -- src/Magnum/Shaders/Test/VertexColorGLTest.cpp | 4 -- src/Magnum/Shaders/Vector.cpp | 5 +++ src/Magnum/Shaders/VertexColor.cpp | 5 +++ src/Magnum/Shaders/resourceImport.hpp | 42 ------------------- src/Magnum/TextureTools/CMakeLists.txt | 4 -- src/Magnum/TextureTools/DistanceField.cpp | 9 ++++ src/Magnum/TextureTools/resourceImport.hpp | 42 ------------------- 18 files changed, 45 insertions(+), 116 deletions(-) delete mode 100644 src/Magnum/Shaders/resourceImport.hpp delete mode 100644 src/Magnum/TextureTools/resourceImport.hpp diff --git a/src/Magnum/Shaders/CMakeLists.txt b/src/Magnum/Shaders/CMakeLists.txt index 18a12277f..22e8e80c6 100644 --- a/src/Magnum/Shaders/CMakeLists.txt +++ b/src/Magnum/Shaders/CMakeLists.txt @@ -52,10 +52,6 @@ set(MagnumShaders_HEADERS # Header files to display in project view of IDEs only set(MagnumShaders_PRIVATE_HEADERS Implementation/CreateCompatibilityShader.h) -if(BUILD_STATIC) - set(MagnumShaders_HEADERS ${MagnumShaders_HEADERS} resourceImport.hpp) -endif() - # Shaders library add_library(MagnumShaders ${SHARED_OR_STATIC} ${MagnumShaders_SRCS} diff --git a/src/Magnum/Shaders/DistanceFieldVector.cpp b/src/Magnum/Shaders/DistanceFieldVector.cpp index 9a4ef621b..6459d5005 100644 --- a/src/Magnum/Shaders/DistanceFieldVector.cpp +++ b/src/Magnum/Shaders/DistanceFieldVector.cpp @@ -42,6 +42,11 @@ namespace { } template DistanceFieldVector::DistanceFieldVector(): transformationProjectionMatrixUniform(0), colorUniform(1), outlineColorUniform(2), outlineRangeUniform(3), smoothnessUniform(4) { + #ifdef MAGNUM_BUILD_STATIC + /* Import resources on static build, if not already */ + if(!Utility::Resource::hasGroup("MagnumShaders")) + importShaderResources(); + #endif Utility::Resource rs("MagnumShaders"); #ifndef MAGNUM_TARGET_GLES diff --git a/src/Magnum/Shaders/Flat.cpp b/src/Magnum/Shaders/Flat.cpp index 5f8415336..912f3780c 100644 --- a/src/Magnum/Shaders/Flat.cpp +++ b/src/Magnum/Shaders/Flat.cpp @@ -45,6 +45,11 @@ namespace { } template Flat::Flat(const Flags flags): transformationProjectionMatrixUniform(0), colorUniform(1), _flags(flags) { + #ifdef MAGNUM_BUILD_STATIC + /* Import resources on static build, if not already */ + if(!Utility::Resource::hasGroup("MagnumShaders")) + importShaderResources(); + #endif Utility::Resource rs("MagnumShaders"); #ifndef MAGNUM_TARGET_GLES diff --git a/src/Magnum/Shaders/Implementation/CreateCompatibilityShader.h b/src/Magnum/Shaders/Implementation/CreateCompatibilityShader.h index 353358f8d..1cccfa369 100644 --- a/src/Magnum/Shaders/Implementation/CreateCompatibilityShader.h +++ b/src/Magnum/Shaders/Implementation/CreateCompatibilityShader.h @@ -31,6 +31,12 @@ #include "Magnum/Extensions.h" #include "Magnum/Shader.h" +#ifdef MAGNUM_BUILD_STATIC +static void importShaderResources() { + CORRADE_RESOURCE_INITIALIZE(MagnumShaders_RCS) +} +#endif + namespace Magnum { namespace Shaders { namespace Implementation { inline Shader createCompatibilityShader(const Utility::Resource& rs, Version version, Shader::Type type) { diff --git a/src/Magnum/Shaders/MeshVisualizer.cpp b/src/Magnum/Shaders/MeshVisualizer.cpp index 4dd5af687..79fd6ef5a 100644 --- a/src/Magnum/Shaders/MeshVisualizer.cpp +++ b/src/Magnum/Shaders/MeshVisualizer.cpp @@ -47,6 +47,11 @@ MeshVisualizer::MeshVisualizer(const Flags flags): flags(flags), transformationP MAGNUM_ASSERT_EXTENSION_SUPPORTED(Extensions::GL::OES::standard_derivatives); #endif + #ifdef MAGNUM_BUILD_STATIC + /* Import resources on static build, if not already */ + if(!Utility::Resource::hasGroup("MagnumShaders")) + importShaderResources(); + #endif Utility::Resource rs("MagnumShaders"); #ifndef MAGNUM_TARGET_GLES diff --git a/src/Magnum/Shaders/Phong.cpp b/src/Magnum/Shaders/Phong.cpp index ac11e1e25..f665e93b9 100644 --- a/src/Magnum/Shaders/Phong.cpp +++ b/src/Magnum/Shaders/Phong.cpp @@ -45,6 +45,11 @@ namespace { } Phong::Phong(const Flags flags): transformationMatrixUniform(0), projectionMatrixUniform(1), normalMatrixUniform(2), lightUniform(3), diffuseColorUniform(4), ambientColorUniform(5), specularColorUniform(6), lightColorUniform(7), shininessUniform(8), _flags(flags) { + #ifdef MAGNUM_BUILD_STATIC + /* Import resources on static build, if not already */ + if(!Utility::Resource::hasGroup("MagnumShaders")) + importShaderResources(); + #endif Utility::Resource rs("MagnumShaders"); #ifndef MAGNUM_TARGET_GLES diff --git a/src/Magnum/Shaders/Test/DistanceFieldVectorGLTest.cpp b/src/Magnum/Shaders/Test/DistanceFieldVectorGLTest.cpp index f658b4835..c208d6d6f 100644 --- a/src/Magnum/Shaders/Test/DistanceFieldVectorGLTest.cpp +++ b/src/Magnum/Shaders/Test/DistanceFieldVectorGLTest.cpp @@ -26,10 +26,6 @@ #include "Magnum/Shaders/DistanceFieldVector.h" #include "Magnum/Test/AbstractOpenGLTester.h" -#ifdef MAGNUM_BUILD_STATIC -#include "Magnum/Shaders/resourceImport.hpp" -#endif - namespace Magnum { namespace Shaders { namespace Test { struct DistanceFieldVectorGLTest: Magnum::Test::AbstractOpenGLTester { diff --git a/src/Magnum/Shaders/Test/FlatGLTest.cpp b/src/Magnum/Shaders/Test/FlatGLTest.cpp index 6b89dfea7..7383f7e2e 100644 --- a/src/Magnum/Shaders/Test/FlatGLTest.cpp +++ b/src/Magnum/Shaders/Test/FlatGLTest.cpp @@ -26,10 +26,6 @@ #include "Magnum/Shaders/Flat.h" #include "Magnum/Test/AbstractOpenGLTester.h" -#ifdef MAGNUM_BUILD_STATIC -#include "Magnum/Shaders/resourceImport.hpp" -#endif - namespace Magnum { namespace Shaders { namespace Test { struct FlatGLTest: Magnum::Test::AbstractOpenGLTester { diff --git a/src/Magnum/Shaders/Test/MeshVisualizerGLTest.cpp b/src/Magnum/Shaders/Test/MeshVisualizerGLTest.cpp index 0ce071067..7cd6ca48c 100644 --- a/src/Magnum/Shaders/Test/MeshVisualizerGLTest.cpp +++ b/src/Magnum/Shaders/Test/MeshVisualizerGLTest.cpp @@ -28,10 +28,6 @@ #include "Magnum/Shaders/MeshVisualizer.h" #include "Magnum/Test/AbstractOpenGLTester.h" -#ifdef MAGNUM_BUILD_STATIC -#include "Magnum/Shaders/resourceImport.hpp" -#endif - namespace Magnum { namespace Shaders { namespace Test { struct MeshVisualizerGLTest: Magnum::Test::AbstractOpenGLTester { diff --git a/src/Magnum/Shaders/Test/PhongGLTest.cpp b/src/Magnum/Shaders/Test/PhongGLTest.cpp index 516c69ad7..0b52d0038 100644 --- a/src/Magnum/Shaders/Test/PhongGLTest.cpp +++ b/src/Magnum/Shaders/Test/PhongGLTest.cpp @@ -26,10 +26,6 @@ #include "Magnum/Shaders/Phong.h" #include "Magnum/Test/AbstractOpenGLTester.h" -#ifdef MAGNUM_BUILD_STATIC -#include "Magnum/Shaders/resourceImport.hpp" -#endif - namespace Magnum { namespace Shaders { namespace Test { struct PhongGLTest: Magnum::Test::AbstractOpenGLTester { diff --git a/src/Magnum/Shaders/Test/VectorGLTest.cpp b/src/Magnum/Shaders/Test/VectorGLTest.cpp index 0ca53fd77..c83c93c16 100644 --- a/src/Magnum/Shaders/Test/VectorGLTest.cpp +++ b/src/Magnum/Shaders/Test/VectorGLTest.cpp @@ -26,10 +26,6 @@ #include "Magnum/Shaders/Vector.h" #include "Magnum/Test/AbstractOpenGLTester.h" -#ifdef MAGNUM_BUILD_STATIC -#include "Magnum/Shaders/resourceImport.hpp" -#endif - namespace Magnum { namespace Shaders { namespace Test { struct VectorGLTest: Magnum::Test::AbstractOpenGLTester { diff --git a/src/Magnum/Shaders/Test/VertexColorGLTest.cpp b/src/Magnum/Shaders/Test/VertexColorGLTest.cpp index 02e0baae0..67a65d9dd 100644 --- a/src/Magnum/Shaders/Test/VertexColorGLTest.cpp +++ b/src/Magnum/Shaders/Test/VertexColorGLTest.cpp @@ -26,10 +26,6 @@ #include "Magnum/Shaders/VertexColor.h" #include "Magnum/Test/AbstractOpenGLTester.h" -#ifdef MAGNUM_BUILD_STATIC -#include "Magnum/Shaders/resourceImport.hpp" -#endif - namespace Magnum { namespace Shaders { namespace Test { struct VertexColorGLTest: Magnum::Test::AbstractOpenGLTester { diff --git a/src/Magnum/Shaders/Vector.cpp b/src/Magnum/Shaders/Vector.cpp index 290b32fbb..05e3c3d50 100644 --- a/src/Magnum/Shaders/Vector.cpp +++ b/src/Magnum/Shaders/Vector.cpp @@ -42,6 +42,11 @@ namespace { } template Vector::Vector(): transformationProjectionMatrixUniform(0), backgroundColorUniform(1), colorUniform(2) { + #ifdef MAGNUM_BUILD_STATIC + /* Import resources on static build, if not already */ + if(!Utility::Resource::hasGroup("MagnumShaders")) + importShaderResources(); + #endif Utility::Resource rs("MagnumShaders"); #ifndef MAGNUM_TARGET_GLES diff --git a/src/Magnum/Shaders/VertexColor.cpp b/src/Magnum/Shaders/VertexColor.cpp index 1c07939ec..9183a3db5 100644 --- a/src/Magnum/Shaders/VertexColor.cpp +++ b/src/Magnum/Shaders/VertexColor.cpp @@ -42,6 +42,11 @@ namespace { } template VertexColor::VertexColor(): transformationProjectionMatrixUniform(0) { + #ifdef MAGNUM_BUILD_STATIC + /* Import resources on static build, if not already */ + if(!Utility::Resource::hasGroup("MagnumShaders")) + importShaderResources(); + #endif Utility::Resource rs("MagnumShaders"); #ifndef MAGNUM_TARGET_GLES diff --git a/src/Magnum/Shaders/resourceImport.hpp b/src/Magnum/Shaders/resourceImport.hpp deleted file mode 100644 index 2962a373d..000000000 --- a/src/Magnum/Shaders/resourceImport.hpp +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef Magnum_Shaders_resourceImport_hpp -#define Magnum_Shaders_resourceImport_hpp -/* - This file is part of Magnum. - - Copyright © 2010, 2011, 2012, 2013, 2014, 2015 - Vladimír Vondruš - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. -*/ - -#include "Magnum/configure.h" - -#ifdef MAGNUM_BUILD_STATIC -#include -#include - -static int magnumShadersResourceImport() { - CORRADE_RESOURCE_INITIALIZE(MagnumShaders_RCS) - return 0; -} CORRADE_AUTOMATIC_INITIALIZER(magnumShadersResourceImport) -#else -#error this header is available only in static build -#endif - -#endif diff --git a/src/Magnum/TextureTools/CMakeLists.txt b/src/Magnum/TextureTools/CMakeLists.txt index 6530aa88e..c07ed487a 100644 --- a/src/Magnum/TextureTools/CMakeLists.txt +++ b/src/Magnum/TextureTools/CMakeLists.txt @@ -36,10 +36,6 @@ set(MagnumTextureTools_HEADERS visibility.h) -if(BUILD_STATIC) - list(APPEND MagnumTextureTools_HEADERS resourceImport.hpp) -endif() - # TextureTools library add_library(MagnumTextureTools ${SHARED_OR_STATIC} ${MagnumTextureTools_SRCS} diff --git a/src/Magnum/TextureTools/DistanceField.cpp b/src/Magnum/TextureTools/DistanceField.cpp index 44e3a26f9..d72406daa 100644 --- a/src/Magnum/TextureTools/DistanceField.cpp +++ b/src/Magnum/TextureTools/DistanceField.cpp @@ -38,6 +38,10 @@ #include "Magnum/Texture.h" #include "Magnum/Shaders/Implementation/CreateCompatibilityShader.h" +static void importTextureToolResources() { + CORRADE_RESOURCE_INITIALIZE(MagnumTextureTools_RCS) +} + namespace Magnum { namespace TextureTools { namespace { @@ -77,6 +81,11 @@ class DistanceFieldShader: public AbstractShaderProgram { }; DistanceFieldShader::DistanceFieldShader(): radiusUniform(0), scalingUniform(1) { + #ifdef MAGNUM_BUILD_STATIC + /* Import resources on static build, if not already */ + if(!Utility::Resource::hasGroup("MagnumTextureTools")) + importTextureToolResources(); + #endif Utility::Resource rs("MagnumTextureTools"); #ifndef MAGNUM_TARGET_GLES diff --git a/src/Magnum/TextureTools/resourceImport.hpp b/src/Magnum/TextureTools/resourceImport.hpp deleted file mode 100644 index 0464b6cc2..000000000 --- a/src/Magnum/TextureTools/resourceImport.hpp +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef Magnum_TextureTools_resourceImport_hpp -#define Magnum_TextureTools_resourceImport_hpp -/* - This file is part of Magnum. - - Copyright © 2010, 2011, 2012, 2013, 2014, 2015 - Vladimír Vondruš - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. -*/ - -#include "Magnum/configure.h" - -#ifdef MAGNUM_BUILD_STATIC -#include -#include - -static int magnumTextureToolsResourceImport() { - CORRADE_RESOURCE_INITIALIZE(MagnumTextureTools_RCS) - return 0; -} CORRADE_AUTOMATIC_INITIALIZER(magnumTextureToolsResourceImport) -#else -#error this header is available only in static build -#endif - -#endif