From e38be052a0a997fe7016f13236bc05ef40a3ba0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 5 Dec 2013 01:51:19 +0100 Subject: [PATCH] SceneGraph: need to mark the instances with extern template on Windows. Otherwise they don't get properly imported from the DLL. Also the instantiations don't have to be marked, so mark them as such only on non-Windows. --- src/SceneGraph/AbstractCamera.h | 5 ++ src/SceneGraph/AbstractFeature.h | 5 ++ src/SceneGraph/AbstractObject.h | 5 ++ src/SceneGraph/AbstractTransformation.h | 5 ++ src/SceneGraph/Animable.h | 5 ++ src/SceneGraph/AnimableGroup.h | 5 ++ src/SceneGraph/Camera2D.h | 4 ++ src/SceneGraph/Camera3D.h | 4 ++ src/SceneGraph/DualComplexTransformation.h | 4 ++ src/SceneGraph/DualQuaternionTransformation.h | 4 ++ src/SceneGraph/FeatureGroup.h | 5 ++ src/SceneGraph/MatrixTransformation2D.h | 4 ++ src/SceneGraph/MatrixTransformation3D.h | 4 ++ src/SceneGraph/RigidMatrixTransformation2D.h | 4 ++ src/SceneGraph/RigidMatrixTransformation3D.h | 4 ++ src/SceneGraph/TranslationTransformation.h | 7 +++ src/SceneGraph/instantiation.cpp | 59 +++++++++++-------- 17 files changed, 107 insertions(+), 26 deletions(-) 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 }}