Browse Source

DebugTools: finish ResourceManager singleton deprecation.

pull/388/head
Vladimír Vondruš 7 years ago
parent
commit
607b3a15fa
  1. 8
      doc/changelog.dox
  2. 26
      doc/snippets/MagnumDebugTools-gl.cpp
  3. 16
      src/Magnum/DebugTools/ForceRenderer.cpp
  4. 28
      src/Magnum/DebugTools/ForceRenderer.h
  5. 16
      src/Magnum/DebugTools/ObjectRenderer.cpp
  6. 14
      src/Magnum/DebugTools/ObjectRenderer.h
  7. 23
      src/Magnum/DebugTools/ResourceManager.cpp
  8. 7
      src/Magnum/DebugTools/ResourceManager.h
  9. 4
      src/Magnum/DebugTools/Test/ForceRendererGLTest.cpp
  10. 4
      src/Magnum/DebugTools/Test/ObjectRendererGLTest.cpp
  11. 3
      src/Magnum/ResourceManager.h

8
doc/changelog.dox

@ -773,9 +773,11 @@ See also:
- Passing @cpp nullptr @ce to @ref ImageView constructors is deprecated and - Passing @cpp nullptr @ce to @ref ImageView constructors is deprecated and
will print a warning at runtime. Use a constructor without the @p data will print a warning at runtime. Use a constructor without the @p data
parameter instead. parameter instead.
- The @cpp ResourceManager::instance() @ce singleton is deprecated as it - The @cpp ResourceManager::instance() @ce singleton (and its implicit use in
makes some use cases harder than they should be. Make your own singleton @ref DebugTools::ForceRenderer and @ref DebugTools::ObjectRenderer) is
or explicitly pass a @ref ResourceManager reference around instead. deprecated as it makes some use cases harder than they should be. Make your
own singleton or explicitly pass a @ref ResourceManager reference around
instead.
- @ref Platform::BasicScreen::application() now returns a reference instead - @ref Platform::BasicScreen::application() now returns a reference instead
of a pointer and together with @ref Platform::BasicScreen::redraw() checks of a pointer and together with @ref Platform::BasicScreen::redraw() checks
that the screen is actually added to the application instead of returning that the screen is actually added to the application instead of returning

26
doc/snippets/MagnumDebugTools-gl.cpp

@ -58,43 +58,43 @@ DebugTools::ResourceManager manager;
SceneGraph::DrawableGroup3D debugDrawables; SceneGraph::DrawableGroup3D debugDrawables;
// Create renderer options which will be referenced later by "my" resource key // Create renderer options which will be referenced later by "my" resource key
DebugTools::ResourceManager::instance().set("my", manager.set("my", DebugTools::ObjectRendererOptions{}.setSize(0.3f));
DebugTools::ObjectRendererOptions{}.setSize(0.3f));
// Create debug renderer for given object, use "my" options for it. The // Create debug renderer for given object, use "my" options for it. The
// renderer is automatically added to the object features and also to // renderer is automatically added to the object features and also to
// specified drawable group. // specified drawable group.
new DebugTools::ObjectRenderer3D{*object, "my", &debugDrawables}; new DebugTools::ObjectRenderer3D{manager, *object, "my", &debugDrawables};
/* [debug-tools-renderers] */ /* [debug-tools-renderers] */
} }
{ {
DebugTools::ResourceManager manager;
SceneGraph::Object<SceneGraph::MatrixTransformation3D>* object{}; SceneGraph::Object<SceneGraph::MatrixTransformation3D>* object{};
SceneGraph::DrawableGroup3D debugDrawables; SceneGraph::DrawableGroup3D debugDrawables;
/* [ForceRenderer] */ /* [ForceRenderer] */
DebugTools::ResourceManager::instance().set("my", manager.set("my", DebugTools::ForceRendererOptions{}
DebugTools::ForceRendererOptions{} .setSize(5.0f)
.setSize(5.0f) .setColor(Color3::fromHsv({120.0_degf, 1.0f, 0.7f})));
.setColor(Color3::fromHsv({120.0_degf, 1.0f, 0.7f})));
Vector3 force; // taken as a reference, has to be kept in scope Vector3 force; // taken as a reference, has to be kept in scope
// Create debug renderer for given force, use "my" options for it // Create debug renderer for given force, use "my" options for it
new DebugTools::ForceRenderer3D(*object, {0.3f, 1.5f, -0.7f}, force, "my", new DebugTools::ForceRenderer3D(manager, *object, {0.3f, 1.5f, -0.7f}, force,
&debugDrawables); "my", &debugDrawables);
/* [ForceRenderer] */ /* [ForceRenderer] */
} }
{ {
SceneGraph::Object<SceneGraph::MatrixTransformation3D>* object{}; SceneGraph::Object<SceneGraph::MatrixTransformation3D>* object{};
SceneGraph::DrawableGroup3D debugDrawables;
/* [ObjectRenderer] */ /* [ObjectRenderer] */
DebugTools::ResourceManager manager;
SceneGraph::DrawableGroup3D debugDrawables;
// Create some options // Create some options
DebugTools::ResourceManager::instance().set("my", manager.set("my", DebugTools::ObjectRendererOptions{}.setSize(0.3f));
DebugTools::ObjectRendererOptions{}.setSize(0.3f));
// Create debug renderer for given object, use "my" options for it // Create debug renderer for given object, use "my" options for it
new DebugTools::ObjectRenderer3D(*object, "my", &debugDrawables); new DebugTools::ObjectRenderer3D{manager, *object, "my", &debugDrawables};
/* [ObjectRenderer] */ /* [ObjectRenderer] */
} }
{ {

16
src/Magnum/DebugTools/ForceRenderer.cpp

@ -55,13 +55,13 @@ constexpr UnsignedByte indices[]{
} }
template<UnsignedInt dimensions> ForceRenderer<dimensions>::ForceRenderer(SceneGraph::AbstractObject<dimensions, Float>& object, const VectorTypeFor<dimensions, Float>& forcePosition, const VectorTypeFor<dimensions, Float>& force, ResourceKey options, SceneGraph::DrawableGroup<dimensions, Float>* drawables): SceneGraph::Drawable<dimensions, Float>(object, drawables), _forcePosition(forcePosition), _force(force), _options(ResourceManager::instance().get<ForceRendererOptions>(options)) { template<UnsignedInt dimensions> ForceRenderer<dimensions>::ForceRenderer(ResourceManager& manager, SceneGraph::AbstractObject<dimensions, Float>& object, const VectorTypeFor<dimensions, Float>& forcePosition, const VectorTypeFor<dimensions, Float>& force, ResourceKey options, SceneGraph::DrawableGroup<dimensions, Float>* drawables): SceneGraph::Drawable<dimensions, Float>(object, drawables), _forcePosition(forcePosition), _force(force), _options(manager.get<ForceRendererOptions>(options)) {
/* Shader */ /* Shader */
_shader = ResourceManager::instance().get<GL::AbstractShaderProgram, Shaders::Flat<dimensions>>(shaderKey<dimensions>()); _shader = manager.get<GL::AbstractShaderProgram, Shaders::Flat<dimensions>>(shaderKey<dimensions>());
if(!_shader) ResourceManager::instance().set<GL::AbstractShaderProgram>(_shader.key(), new Shaders::Flat<dimensions>); if(!_shader) manager.set<GL::AbstractShaderProgram>(_shader.key(), new Shaders::Flat<dimensions>);
/* Mesh and vertex buffer */ /* Mesh and vertex buffer */
_mesh = ResourceManager::instance().get<GL::Mesh>("force"); _mesh = manager.get<GL::Mesh>("force");
if(_mesh) return; if(_mesh) return;
/* Create the mesh */ /* Create the mesh */
@ -74,9 +74,15 @@ template<UnsignedInt dimensions> ForceRenderer<dimensions>::ForceRenderer(SceneG
.addVertexBuffer(std::move(vertexBuffer), 0, .addVertexBuffer(std::move(vertexBuffer), 0,
typename Shaders::Flat<dimensions>::Position(Shaders::Flat<dimensions>::Position::Components::Two)) typename Shaders::Flat<dimensions>::Position(Shaders::Flat<dimensions>::Position::Components::Two))
.setIndexBuffer(std::move(indexBuffer), 0, GL::MeshIndexType::UnsignedByte, 0, Containers::arraySize(positions)); .setIndexBuffer(std::move(indexBuffer), 0, GL::MeshIndexType::UnsignedByte, 0, Containers::arraySize(positions));
ResourceManager::instance().set(_mesh.key(), std::move(mesh), ResourceDataState::Final, ResourcePolicy::Manual); manager.set(_mesh.key(), std::move(mesh), ResourceDataState::Final, ResourcePolicy::Manual);
} }
#ifdef MAGNUM_BUILD_DEPRECATED
CORRADE_IGNORE_DEPRECATED_PUSH
template<UnsignedInt dimensions> ForceRenderer<dimensions>::ForceRenderer(SceneGraph::AbstractObject<dimensions, Float>& object, const VectorTypeFor<dimensions, Float>& forcePosition, const VectorTypeFor<dimensions, Float>& force, ResourceKey options, SceneGraph::DrawableGroup<dimensions, Float>* drawables): ForceRenderer<dimensions>{static_cast<ResourceManager&>(ResourceManager::instance()), object, forcePosition, force, options, drawables} {}
CORRADE_IGNORE_DEPRECATED_POP
#endif
/* To avoid deleting pointers to incomplete type on destruction of Resource members */ /* To avoid deleting pointers to incomplete type on destruction of Resource members */
template<UnsignedInt dimensions> ForceRenderer<dimensions>::~ForceRenderer() = default; template<UnsignedInt dimensions> ForceRenderer<dimensions>::~ForceRenderer() = default;

28
src/Magnum/DebugTools/ForceRenderer.h

@ -32,11 +32,12 @@
#endif #endif
#include "Magnum/Resource.h" #include "Magnum/Resource.h"
#include "Magnum/DebugTools/DebugTools.h"
#include "Magnum/DebugTools/visibility.h"
#include "Magnum/GL/GL.h" #include "Magnum/GL/GL.h"
#include "Magnum/Math/Color.h" #include "Magnum/Math/Color.h"
#include "Magnum/SceneGraph/Drawable.h" #include "Magnum/SceneGraph/Drawable.h"
#include "Magnum/Shaders/Shaders.h" #include "Magnum/Shaders/Shaders.h"
#include "Magnum/DebugTools/visibility.h"
#ifdef MAGNUM_TARGET_GL #ifdef MAGNUM_TARGET_GL
namespace Magnum { namespace DebugTools { namespace Magnum { namespace DebugTools {
@ -121,21 +122,36 @@ template<UnsignedInt dimensions> class MAGNUM_DEBUGTOOLS_EXPORT ForceRenderer: p
public: public:
/** /**
* @brief Constructor * @brief Constructor
* @param manager Resource manager instance
* @param object Object for which to create debug renderer * @param object Object for which to create debug renderer
* @param forcePosition Where to render the force, relative to object * @param forcePosition Where to render the force, relative to object
* @param force Force vector * @param force Reference to the force vector
* @param options Options resource key. See * @param options Options resource key. See
* @ref DebugTools-ForceRenderer-usage "class documentation" for * @ref DebugTools-ForceRenderer-usage "class documentation" for
* more information. * more information.
* @param drawables Drawable group * @param drawables Drawable group
*/ */
explicit ForceRenderer(SceneGraph::AbstractObject<dimensions, Float>& object, const VectorTypeFor<dimensions, Float>& forcePosition, const VectorTypeFor<dimensions, Float>& force, ResourceKey options = ResourceKey(), SceneGraph::DrawableGroup<dimensions, Float>* drawables = nullptr); explicit ForceRenderer(ResourceManager& manager, SceneGraph::AbstractObject<dimensions, Float>& object, const VectorTypeFor<dimensions, Float>& forcePosition, const VectorTypeFor<dimensions, Float>& force, ResourceKey options = ResourceKey(), SceneGraph::DrawableGroup<dimensions, Float>* drawables = nullptr);
/**
* You have to pass a reference to an external force vector --- the
* renderer doesn't store a copy.
*/
explicit ForceRenderer(ResourceManager&, SceneGraph::AbstractObject<dimensions, Float>&, const VectorTypeFor<dimensions, Float>&, VectorTypeFor<dimensions, Float>&&, ResourceKey = ResourceKey(), SceneGraph::DrawableGroup<dimensions, Float>* = nullptr) = delete;
#ifdef MAGNUM_BUILD_DEPRECATED
/** /**
* You have to pass reference to existing force instance, as the * @brief Constructor
* renderer uses the current value when rendering. * @deprecated Implicit @ref ResourceManager singleton is deprecated,
* use @ref ForceRenderer(ResourceManager&, SceneGraph::AbstractObject<dimensions, Float>&, const VectorTypeFor<dimensions, Float>&, const VectorTypeFor<dimensions, Float>&, ResourceKey, SceneGraph::DrawableGroup<dimensions, Float>*)
* instead.
*/ */
ForceRenderer(SceneGraph::AbstractObject<dimensions, Float>&, const VectorTypeFor<dimensions, Float>&, VectorTypeFor<dimensions, Float>&&, ResourceKey = ResourceKey(), SceneGraph::DrawableGroup<dimensions, Float>* = nullptr) = delete; explicit CORRADE_DEPRECATED("implicit ResourceManager singleton is deprecated, use a constructor with explicit ResourceManager reference instead") ForceRenderer(SceneGraph::AbstractObject<dimensions, Float>& object, const VectorTypeFor<dimensions, Float>& forcePosition, const VectorTypeFor<dimensions, Float>& force, ResourceKey options = ResourceKey(), SceneGraph::DrawableGroup<dimensions, Float>* drawables = nullptr);
#ifndef DOXYGEN_GENERATOR_OUTPUT
explicit CORRADE_DEPRECATED("implicit ResourceManager singleton is deprecated, use a constructor with explicit DebugTools::ResourceManager reference instead") ForceRenderer(SceneGraph::AbstractObject<dimensions, Float>&, const VectorTypeFor<dimensions, Float>&, VectorTypeFor<dimensions, Float>&&, ResourceKey = ResourceKey(), SceneGraph::DrawableGroup<dimensions, Float>* = nullptr) = delete;
#endif
#endif
~ForceRenderer(); ~ForceRenderer();

16
src/Magnum/DebugTools/ObjectRenderer.cpp

@ -55,16 +55,22 @@ template<> struct Renderer<3> {
} }
/* Doxygen gets confused when using {} to initialize parent object */ /* Doxygen gets confused when using {} to initialize parent object */
template<UnsignedInt dimensions> ObjectRenderer<dimensions>::ObjectRenderer(SceneGraph::AbstractObject<dimensions, Float>& object, ResourceKey options, SceneGraph::DrawableGroup<dimensions, Float>* drawables): SceneGraph::Drawable<dimensions, Float>(object, drawables), _options{ResourceManager::instance().get<ObjectRendererOptions>(options)} { template<UnsignedInt dimensions> ObjectRenderer<dimensions>::ObjectRenderer(ResourceManager& manager, SceneGraph::AbstractObject<dimensions, Float>& object, ResourceKey options, SceneGraph::DrawableGroup<dimensions, Float>* drawables): SceneGraph::Drawable<dimensions, Float>(object, drawables), _options{manager.get<ObjectRendererOptions>(options)} {
/* Shader */ /* Shader */
_shader = ResourceManager::instance().get<GL::AbstractShaderProgram, Shaders::VertexColor<dimensions>>(Renderer<dimensions>::shader()); _shader = manager.get<GL::AbstractShaderProgram, Shaders::VertexColor<dimensions>>(Renderer<dimensions>::shader());
if(!_shader) ResourceManager::instance().set<GL::AbstractShaderProgram>(_shader.key(), new Shaders::VertexColor<dimensions>); if(!_shader) manager.set<GL::AbstractShaderProgram>(_shader.key(), new Shaders::VertexColor<dimensions>);
/* Mesh */ /* Mesh */
_mesh = ResourceManager::instance().get<GL::Mesh>(Renderer<dimensions>::mesh()); _mesh = manager.get<GL::Mesh>(Renderer<dimensions>::mesh());
if(!_mesh) ResourceManager::instance().set<GL::Mesh>(_mesh.key(), MeshTools::compile(Renderer<dimensions>::meshData())); if(!_mesh) manager.set<GL::Mesh>(_mesh.key(), MeshTools::compile(Renderer<dimensions>::meshData()));
} }
#ifdef MAGNUM_BUILD_DEPRECATED
CORRADE_IGNORE_DEPRECATED_PUSH
template<UnsignedInt dimensions> ObjectRenderer<dimensions>::ObjectRenderer(SceneGraph::AbstractObject<dimensions, Float>& object, ResourceKey options, SceneGraph::DrawableGroup<dimensions, Float>* drawables): ObjectRenderer<dimensions>{static_cast<ResourceManager&>(ResourceManager::instance()), object, options, drawables} {}
CORRADE_IGNORE_DEPRECATED_POP
#endif
/* To avoid deleting pointers to incomplete type on destruction of Resource members */ /* To avoid deleting pointers to incomplete type on destruction of Resource members */
template<UnsignedInt dimensions> ObjectRenderer<dimensions>::~ObjectRenderer() = default; template<UnsignedInt dimensions> ObjectRenderer<dimensions>::~ObjectRenderer() = default;

14
src/Magnum/DebugTools/ObjectRenderer.h

@ -32,6 +32,7 @@
#endif #endif
#include "Magnum/Resource.h" #include "Magnum/Resource.h"
#include "Magnum/DebugTools/DebugTools.h"
#include "Magnum/DebugTools/visibility.h" #include "Magnum/DebugTools/visibility.h"
#include "Magnum/GL/GL.h" #include "Magnum/GL/GL.h"
#include "Magnum/SceneGraph/Drawable.h" #include "Magnum/SceneGraph/Drawable.h"
@ -93,6 +94,7 @@ template<UnsignedInt dimensions> class MAGNUM_DEBUGTOOLS_EXPORT ObjectRenderer:
public: public:
/** /**
* @brief Constructor * @brief Constructor
* @param manager Resource manager instance
* @param object Object for which to create debug renderer * @param object Object for which to create debug renderer
* @param options Options resource key. See * @param options Options resource key. See
* @ref DebugTools-ObjectRenderer-usage "class documentation" for * @ref DebugTools-ObjectRenderer-usage "class documentation" for
@ -101,7 +103,17 @@ template<UnsignedInt dimensions> class MAGNUM_DEBUGTOOLS_EXPORT ObjectRenderer:
* *
* The renderer is automatically added to object's features. * The renderer is automatically added to object's features.
*/ */
explicit ObjectRenderer(SceneGraph::AbstractObject<dimensions, Float>& object, ResourceKey options = ResourceKey(), SceneGraph::DrawableGroup<dimensions, Float>* drawables = nullptr); explicit ObjectRenderer(ResourceManager& manager, SceneGraph::AbstractObject<dimensions, Float>& object, ResourceKey options = ResourceKey(), SceneGraph::DrawableGroup<dimensions, Float>* drawables = nullptr);
#ifdef MAGNUM_BUILD_DEPRECATED
/**
* @brief Constructor
* @deprecated Implicit @ref ResourceManager singleton is deprecated,
* use @ref ObjectRenderer(ResourceManager&, SceneGraph::AbstractObject<dimensions, Float>&, ResourceKey, SceneGraph::DrawableGroup<dimensions, Float>*)
* instead.
*/
explicit CORRADE_DEPRECATED("implicit ResourceManager singleton is deprecated, use a constructor with explicit ResourceManager reference instead") ObjectRenderer(SceneGraph::AbstractObject<dimensions, Float>& object, ResourceKey options = ResourceKey(), SceneGraph::DrawableGroup<dimensions, Float>* drawables = nullptr);
#endif
~ObjectRenderer(); ~ObjectRenderer();

23
src/Magnum/DebugTools/ResourceManager.cpp

@ -41,32 +41,11 @@ namespace Implementation {
namespace DebugTools { namespace DebugTools {
namespace {
#ifdef CORRADE_BUILD_MULTITHREADED
CORRADE_THREAD_LOCAL
#endif
ResourceManager* resourceManagerInstance = nullptr;
}
ResourceManager& ResourceManager::instance() {
CORRADE_ASSERT(resourceManagerInstance,
"DebugTools::ResourceManager::instance(): no instance exists",
*resourceManagerInstance);
return *resourceManagerInstance;
}
ResourceManager::ResourceManager() { ResourceManager::ResourceManager() {
CORRADE_ASSERT(!resourceManagerInstance,
"DebugTools::ResourceManager: another instance is already created", );
resourceManagerInstance = this;
setFallback(new ForceRendererOptions); setFallback(new ForceRendererOptions);
setFallback(new ObjectRendererOptions); setFallback(new ObjectRendererOptions);
} }
ResourceManager::~ResourceManager() { ResourceManager::~ResourceManager() = default;
CORRADE_INTERNAL_ASSERT(resourceManagerInstance == this);
resourceManagerInstance = nullptr;
}
}} }}

7
src/Magnum/DebugTools/ResourceManager.h

@ -65,13 +65,6 @@ information.
class MAGNUM_DEBUGTOOLS_EXPORT ResourceManager: public Magnum::ResourceManager<Magnum::Implementation::ResourceManagerLocalInstance, GL::AbstractShaderProgram, GL::Buffer, GL::Mesh, GL::MeshView, DebugTools::ForceRendererOptions, DebugTools::ObjectRendererOptions> class MAGNUM_DEBUGTOOLS_EXPORT ResourceManager: public Magnum::ResourceManager<Magnum::Implementation::ResourceManagerLocalInstance, GL::AbstractShaderProgram, GL::Buffer, GL::Mesh, GL::MeshView, DebugTools::ForceRendererOptions, DebugTools::ObjectRendererOptions>
{ {
public: public:
/**
* @brief Global instance
*
* Assumes that the instance exists.
*/
static ResourceManager& instance();
explicit ResourceManager(); explicit ResourceManager();
~ResourceManager(); ~ResourceManager();
}; };

4
src/Magnum/DebugTools/Test/ForceRendererGLTest.cpp

@ -90,7 +90,7 @@ void ForceRendererGLTest::render2D() {
SceneGraph::Object<SceneGraph::MatrixTransformation2D> object{&scene}; SceneGraph::Object<SceneGraph::MatrixTransformation2D> object{&scene};
object.translate({-1.0f, -1.0f}); object.translate({-1.0f, -1.0f});
Vector2 force{2.0f, 2.0f}; Vector2 force{2.0f, 2.0f};
ForceRenderer2D renderer{object, {}, force, "my", &drawables}; ForceRenderer2D renderer{manager, object, {}, force, "my", &drawables};
GL::Renderbuffer color; GL::Renderbuffer color;
color.setStorage( color.setStorage(
@ -146,7 +146,7 @@ void ForceRendererGLTest::render3D() {
.rotateY(-90.0_degf) .rotateY(-90.0_degf)
.translate({-0.5f, -1.0f, 1.0f}); .translate({-0.5f, -1.0f, 1.0f});
Vector3 force{2.0f, 2.0f, 0.0f}; Vector3 force{2.0f, 2.0f, 0.0f};
ForceRenderer3D renderer{object, {}, force, "my", &drawables}; ForceRenderer3D renderer{manager, object, {}, force, "my", &drawables};
GL::Renderbuffer color; GL::Renderbuffer color;
color.setStorage( color.setStorage(

4
src/Magnum/DebugTools/Test/ObjectRendererGLTest.cpp

@ -91,7 +91,7 @@ void ObjectRendererGLTest::render2D() {
object object
.rotate(-17.3_degf) .rotate(-17.3_degf)
.translate({-1.0f, -1.0f}); .translate({-1.0f, -1.0f});
ObjectRenderer2D renderer{object, "my", &drawables}; ObjectRenderer2D renderer{manager, object, "my", &drawables};
GL::Renderbuffer color; GL::Renderbuffer color;
color.setStorage( color.setStorage(
@ -136,7 +136,7 @@ void ObjectRendererGLTest::render3D() {
.rotateZ(17.3_degf) .rotateZ(17.3_degf)
.rotateY(45.0_degf) .rotateY(45.0_degf)
.translate({-1.0f, -1.0f, -1.0f}); .translate({-1.0f, -1.0f, -1.0f});
ObjectRenderer3D renderer{object, "my", &drawables}; ObjectRenderer3D renderer{manager, object, "my", &drawables};
GL::Renderbuffer color; GL::Renderbuffer color;
color.setStorage( color.setStorage(

3
src/Magnum/ResourceManager.h

@ -251,6 +251,9 @@ template<class... Types> class ResourceManager: private Implementation::Resource
* @brief Global instance * @brief Global instance
* *
* Assumes that the instance exists. * Assumes that the instance exists.
*
* @deprecated Implicit @ref ResourceManager singleton is deprecated,
* make your own or pass a reference around instead
*/ */
static CORRADE_DEPRECATED("implicit ResourceManager singleton is deprecated, make your own or pass a reference around instead") ResourceManager<Types...>& instance(); static CORRADE_DEPRECATED("implicit ResourceManager singleton is deprecated, make your own or pass a reference around instead") ResourceManager<Types...>& instance();
#endif #endif

Loading…
Cancel
Save