diff --git a/src/SceneGraph/AbstractCamera.h b/src/SceneGraph/AbstractCamera.h index 4ee9ec64c..981ca9ea1 100644 --- a/src/SceneGraph/AbstractCamera.h +++ b/src/SceneGraph/AbstractCamera.h @@ -209,6 +209,11 @@ typedef AbstractBasicCamera3D AbstractCamera3D; typedef AbstractCamera<3, Float> AbstractCamera3D; #endif +#ifdef _WIN32 +extern template class MAGNUM_SCENEGRAPH_EXPORT AbstractCamera<2, Float>; +extern template class MAGNUM_SCENEGRAPH_EXPORT AbstractCamera<3, Float>; +#endif + }} #endif diff --git a/src/SceneGraph/AbstractFeature.h b/src/SceneGraph/AbstractFeature.h index 6de7a17f3..4959fd631 100644 --- a/src/SceneGraph/AbstractFeature.h +++ b/src/SceneGraph/AbstractFeature.h @@ -341,6 +341,11 @@ typedef AbstractBasicFeature3D AbstractFeature3D; typedef AbstractFeature<3, Float> AbstractFeature3D; #endif +#ifdef _WIN32 +extern template class MAGNUM_SCENEGRAPH_EXPORT AbstractFeature<2, Float>; +extern template class MAGNUM_SCENEGRAPH_EXPORT AbstractFeature<3, Float>; +#endif + }} #endif diff --git a/src/SceneGraph/AbstractObject.h b/src/SceneGraph/AbstractObject.h index 96733b542..42228f852 100644 --- a/src/SceneGraph/AbstractObject.h +++ b/src/SceneGraph/AbstractObject.h @@ -277,6 +277,11 @@ typedef AbstractBasicObject3D AbstractObject3D; typedef AbstractObject<3, Float> AbstractObject3D; #endif +#ifdef _WIN32 +extern template class MAGNUM_SCENEGRAPH_EXPORT AbstractObject<2, Float>; +extern template class MAGNUM_SCENEGRAPH_EXPORT AbstractObject<3, Float>; +#endif + }} #endif diff --git a/src/SceneGraph/AbstractTransformation.h b/src/SceneGraph/AbstractTransformation.h index e0b77d53f..33e74ab09 100644 --- a/src/SceneGraph/AbstractTransformation.h +++ b/src/SceneGraph/AbstractTransformation.h @@ -144,6 +144,11 @@ typedef AbstractBasicTransformation3D AbstractTransformation3D; typedef AbstractTransformation<3, Float> AbstractTransformation3D; #endif +#ifdef _WIN32 +extern template class MAGNUM_SCENEGRAPH_EXPORT AbstractTransformation<2, Float>; +extern template class MAGNUM_SCENEGRAPH_EXPORT AbstractTransformation<3, Float>; +#endif + }} #endif diff --git a/src/SceneGraph/Animable.h b/src/SceneGraph/Animable.h index 05d8b7da8..5779636f8 100644 --- a/src/SceneGraph/Animable.h +++ b/src/SceneGraph/Animable.h @@ -380,6 +380,11 @@ typedef BasicAnimable3D Animable3D; typedef Animable<3, Float> Animable3D; #endif +#ifdef _WIN32 +extern template class MAGNUM_SCENEGRAPH_EXPORT Animable<2, Float>; +extern template class MAGNUM_SCENEGRAPH_EXPORT Animable<3, Float>; +#endif + }} #endif diff --git a/src/SceneGraph/AnimableGroup.h b/src/SceneGraph/AnimableGroup.h index eb2558bb6..da42aaa6f 100644 --- a/src/SceneGraph/AnimableGroup.h +++ b/src/SceneGraph/AnimableGroup.h @@ -118,6 +118,11 @@ typedef BasicAnimableGroup3D AnimableGroup3D; typedef AnimableGroup<3, Float> AnimableGroup3D; #endif +#ifdef _WIN32 +extern template class MAGNUM_SCENEGRAPH_EXPORT AnimableGroup<2, Float>; +extern template class MAGNUM_SCENEGRAPH_EXPORT AnimableGroup<3, Float>; +#endif + }} #endif diff --git a/src/SceneGraph/Camera2D.h b/src/SceneGraph/Camera2D.h index 8dc0e564a..09183c9ef 100644 --- a/src/SceneGraph/Camera2D.h +++ b/src/SceneGraph/Camera2D.h @@ -105,6 +105,10 @@ template class BasicCamera2D: public AbstractCamera<2, T> { */ typedef BasicCamera2D Camera2D; +#ifdef _WIN32 +extern template class MAGNUM_SCENEGRAPH_EXPORT BasicCamera2D; +#endif + }} #endif diff --git a/src/SceneGraph/Camera3D.h b/src/SceneGraph/Camera3D.h index 6e8c40903..8b126458b 100644 --- a/src/SceneGraph/Camera3D.h +++ b/src/SceneGraph/Camera3D.h @@ -141,6 +141,10 @@ template class BasicCamera3D: public AbstractCamera<3, T> { */ typedef BasicCamera3D Camera3D; +#ifdef _WIN32 +extern template class MAGNUM_SCENEGRAPH_EXPORT BasicCamera3D; +#endif + }} #endif diff --git a/src/SceneGraph/DualComplexTransformation.h b/src/SceneGraph/DualComplexTransformation.h index 1ec7c031d..539c5ed79 100644 --- a/src/SceneGraph/DualComplexTransformation.h +++ b/src/SceneGraph/DualComplexTransformation.h @@ -183,6 +183,10 @@ template struct Transformation> { } +#ifdef _WIN32 +extern template class MAGNUM_SCENEGRAPH_EXPORT Object>; +#endif + }} #endif diff --git a/src/SceneGraph/DualQuaternionTransformation.h b/src/SceneGraph/DualQuaternionTransformation.h index 6f4a4bf98..f94e29d82 100644 --- a/src/SceneGraph/DualQuaternionTransformation.h +++ b/src/SceneGraph/DualQuaternionTransformation.h @@ -200,6 +200,10 @@ template struct Transformation> { } +#ifdef _WIN32 +extern template class MAGNUM_SCENEGRAPH_EXPORT Object>; +#endif + }} #endif diff --git a/src/SceneGraph/FeatureGroup.h b/src/SceneGraph/FeatureGroup.h index 01ca3da83..039896356 100644 --- a/src/SceneGraph/FeatureGroup.h +++ b/src/SceneGraph/FeatureGroup.h @@ -182,6 +182,11 @@ template FeatureGroup; +extern template class MAGNUM_SCENEGRAPH_EXPORT AbstractFeatureGroup<3, Float>; +#endif + }} #endif diff --git a/src/SceneGraph/MatrixTransformation2D.h b/src/SceneGraph/MatrixTransformation2D.h index f29cc0854..ae282f44d 100644 --- a/src/SceneGraph/MatrixTransformation2D.h +++ b/src/SceneGraph/MatrixTransformation2D.h @@ -168,6 +168,10 @@ template struct Transformation> { } +#ifdef _WIN32 +extern template class MAGNUM_SCENEGRAPH_EXPORT Object>; +#endif + }} #endif diff --git a/src/SceneGraph/MatrixTransformation3D.h b/src/SceneGraph/MatrixTransformation3D.h index 0c711b51c..b6adc33d2 100644 --- a/src/SceneGraph/MatrixTransformation3D.h +++ b/src/SceneGraph/MatrixTransformation3D.h @@ -216,6 +216,10 @@ template struct Transformation> { } +#ifdef _WIN32 +extern template class MAGNUM_SCENEGRAPH_EXPORT Object>; +#endif + }} #endif diff --git a/src/SceneGraph/RigidMatrixTransformation2D.h b/src/SceneGraph/RigidMatrixTransformation2D.h index 5612a00a8..b369f114e 100644 --- a/src/SceneGraph/RigidMatrixTransformation2D.h +++ b/src/SceneGraph/RigidMatrixTransformation2D.h @@ -202,6 +202,10 @@ template struct Transformation> { } +#ifdef _WIN32 +extern template class MAGNUM_SCENEGRAPH_EXPORT Object>; +#endif + }} #endif diff --git a/src/SceneGraph/RigidMatrixTransformation3D.h b/src/SceneGraph/RigidMatrixTransformation3D.h index 0d0e4dc55..0ada0a0af 100644 --- a/src/SceneGraph/RigidMatrixTransformation3D.h +++ b/src/SceneGraph/RigidMatrixTransformation3D.h @@ -255,6 +255,10 @@ template struct Transformation> { } +#ifdef _WIN32 +extern template class MAGNUM_SCENEGRAPH_EXPORT Object>; +#endif + }} #endif diff --git a/src/SceneGraph/TranslationTransformation.h b/src/SceneGraph/TranslationTransformation.h index 70baedfa1..adc134120 100644 --- a/src/SceneGraph/TranslationTransformation.h +++ b/src/SceneGraph/TranslationTransformation.h @@ -206,6 +206,13 @@ template struct Transfor } +#ifdef _WIN32 +extern template class MAGNUM_SCENEGRAPH_EXPORT Object>; +extern template class MAGNUM_SCENEGRAPH_EXPORT Object>; +extern template class MAGNUM_SCENEGRAPH_EXPORT Object>; +extern template class MAGNUM_SCENEGRAPH_EXPORT Object>; +#endif + }} #endif diff --git a/src/SceneGraph/instantiation.cpp b/src/SceneGraph/instantiation.cpp index 9c8ca8606..015fa8c8b 100644 --- a/src/SceneGraph/instantiation.cpp +++ b/src/SceneGraph/instantiation.cpp @@ -38,37 +38,44 @@ namespace Magnum { namespace SceneGraph { +/* On Windows the instantiations are already marked with extern template */ +#ifndef _WIN32 +#define MAGNUM_SCENEGRAPH_EXPORT_HPP MAGNUM_SCENEGRAPH_EXPORT +#else +#define MAGNUM_SCENEGRAPH_EXPORT_HPP +#endif + #ifndef DOXYGEN_GENERATING_OUTPUT -template class MAGNUM_SCENEGRAPH_EXPORT AbstractObject<2, Float>; -template class MAGNUM_SCENEGRAPH_EXPORT AbstractObject<3, Float>; -template class MAGNUM_SCENEGRAPH_EXPORT AbstractTransformation<2, Float>; -template class MAGNUM_SCENEGRAPH_EXPORT AbstractTransformation<3, Float>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP AbstractObject<2, Float>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP AbstractObject<3, Float>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP AbstractTransformation<2, Float>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP AbstractTransformation<3, Float>; -template class MAGNUM_SCENEGRAPH_EXPORT AbstractFeature<2, Float>; -template class MAGNUM_SCENEGRAPH_EXPORT AbstractFeature<3, Float>; -template class MAGNUM_SCENEGRAPH_EXPORT AbstractFeatureGroup<2, Float>; -template class MAGNUM_SCENEGRAPH_EXPORT AbstractFeatureGroup<3, Float>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP AbstractFeature<2, Float>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP AbstractFeature<3, Float>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP AbstractFeatureGroup<2, Float>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP AbstractFeatureGroup<3, Float>; -template class MAGNUM_SCENEGRAPH_EXPORT Animable<2, Float>; -template class MAGNUM_SCENEGRAPH_EXPORT Animable<3, Float>; -template class MAGNUM_SCENEGRAPH_EXPORT AnimableGroup<2, Float>; -template class MAGNUM_SCENEGRAPH_EXPORT AnimableGroup<3, Float>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP Animable<2, Float>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP Animable<3, Float>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP AnimableGroup<2, Float>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP AnimableGroup<3, Float>; -template class MAGNUM_SCENEGRAPH_EXPORT AbstractCamera<2, Float>; -template class MAGNUM_SCENEGRAPH_EXPORT AbstractCamera<3, Float>; -template class MAGNUM_SCENEGRAPH_EXPORT BasicCamera2D; -template class MAGNUM_SCENEGRAPH_EXPORT BasicCamera3D; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP AbstractCamera<2, Float>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP AbstractCamera<3, Float>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP BasicCamera2D; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP BasicCamera3D; -template class MAGNUM_SCENEGRAPH_EXPORT Object>; -template class MAGNUM_SCENEGRAPH_EXPORT Object>; -template class MAGNUM_SCENEGRAPH_EXPORT Object>; -template class MAGNUM_SCENEGRAPH_EXPORT Object>; -template class MAGNUM_SCENEGRAPH_EXPORT Object>; -template class MAGNUM_SCENEGRAPH_EXPORT Object>; -template class MAGNUM_SCENEGRAPH_EXPORT Object>; -template class MAGNUM_SCENEGRAPH_EXPORT Object>; -template class MAGNUM_SCENEGRAPH_EXPORT Object>; -template class MAGNUM_SCENEGRAPH_EXPORT Object>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP Object>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP Object>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP Object>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP Object>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP Object>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP Object>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP Object>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP Object>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP Object>; +template class MAGNUM_SCENEGRAPH_EXPORT_HPP Object>; #endif }}