Browse Source

DebugTools: using new type aliases in whole DebugTools namespace.

pull/278/head
Vladimír Vondruš 13 years ago
parent
commit
b5c1052c96
  1. 6
      src/DebugTools/DebugTools.h
  2. 2
      src/DebugTools/Implementation/AbstractBoxRenderer.h
  3. 10
      src/DebugTools/Implementation/AbstractShapeRenderer.cpp
  4. 4
      src/DebugTools/Implementation/AbstractShapeRenderer.h
  5. 4
      src/DebugTools/Implementation/AxisAlignedBoxRenderer.cpp
  6. 2
      src/DebugTools/Implementation/AxisAlignedBoxRenderer.h
  7. 4
      src/DebugTools/Implementation/BoxRenderer.cpp
  8. 2
      src/DebugTools/Implementation/BoxRenderer.h
  9. 10
      src/DebugTools/Implementation/PointRenderer.cpp
  10. 2
      src/DebugTools/Implementation/PointRenderer.h
  11. 12
      src/DebugTools/ObjectRenderer.cpp
  12. 12
      src/DebugTools/ObjectRenderer.h
  13. 3
      src/DebugTools/Profiler.h
  14. 6
      src/DebugTools/ShapeRenderer.cpp
  15. 18
      src/DebugTools/ShapeRenderer.h

6
src/DebugTools/DebugTools.h

@ -19,13 +19,13 @@
* @brief Forward declarations for Magnum::DebugTools namespace * @brief Forward declarations for Magnum::DebugTools namespace
*/ */
#include <cstdint> #include "Types.h"
namespace Magnum { namespace DebugTools { namespace Magnum { namespace DebugTools {
/** @todoc Remove `ifndef` when Doxygen is sane again */ /** @todoc Remove `ifndef` when Doxygen is sane again */
#ifndef DOXYGEN_GENERATING_OUTPUT #ifndef DOXYGEN_GENERATING_OUTPUT
template<std::uint8_t> class ObjectRenderer; template<UnsignedInt> class ObjectRenderer;
typedef ObjectRenderer<2> ObjectRenderer2D; typedef ObjectRenderer<2> ObjectRenderer2D;
typedef ObjectRenderer<3> ObjectRenderer3D; typedef ObjectRenderer<3> ObjectRenderer3D;
class ObjectRendererOptions; class ObjectRendererOptions;
@ -33,7 +33,7 @@ class ObjectRendererOptions;
class Profiler; class Profiler;
class ResourceManager; class ResourceManager;
template<std::uint8_t> class ShapeRenderer; template<UnsignedInt> class ShapeRenderer;
typedef ShapeRenderer<2> ShapeRenderer2D; typedef ShapeRenderer<2> ShapeRenderer2D;
typedef ShapeRenderer<3> ShapeRenderer3D; typedef ShapeRenderer<3> ShapeRenderer3D;
class ShapeRendererOptions; class ShapeRendererOptions;

2
src/DebugTools/Implementation/AbstractBoxRenderer.h

@ -24,7 +24,7 @@
namespace Magnum { namespace DebugTools { namespace Implementation { namespace Magnum { namespace DebugTools { namespace Implementation {
template<std::uint8_t dimensions> class AbstractBoxRenderer; template<UnsignedInt dimensions> class AbstractBoxRenderer;
template<> class AbstractBoxRenderer<2>: public AbstractShapeRenderer<2> { template<> class AbstractBoxRenderer<2>: public AbstractShapeRenderer<2> {
public: public:

10
src/DebugTools/Implementation/AbstractShapeRenderer.cpp

@ -28,11 +28,11 @@ namespace Magnum { namespace DebugTools { namespace Implementation {
namespace { namespace {
template<std::uint8_t dimensions> ResourceKey shaderKey(); template<UnsignedInt dimensions> ResourceKey shaderKey();
template<> inline ResourceKey shaderKey<2>() { return ResourceKey("FlatShader2D"); } template<> inline ResourceKey shaderKey<2>() { return ResourceKey("FlatShader2D"); }
template<> inline ResourceKey shaderKey<3>() { return ResourceKey("FlatShader3D"); } template<> inline ResourceKey shaderKey<3>() { return ResourceKey("FlatShader3D"); }
template<std::uint8_t dimensions> void create(typename MeshData<dimensions>::Type&, Resource<Mesh>&, Resource<Buffer>&, Resource<Buffer>&); template<UnsignedInt dimensions> void create(typename MeshData<dimensions>::Type&, Resource<Mesh>&, Resource<Buffer>&, Resource<Buffer>&);
template<> void create<2>(Trade::MeshData2D& data, Resource<Mesh>& meshResource, Resource<Buffer>& vertexBufferResource, Resource<Buffer>& indexBufferResource) { template<> void create<2>(Trade::MeshData2D& data, Resource<Mesh>& meshResource, Resource<Buffer>& vertexBufferResource, Resource<Buffer>& indexBufferResource) {
/* Vertex buffer */ /* Vertex buffer */
@ -80,7 +80,7 @@ template<> void create<3>(Trade::MeshData3D& data, Resource<Mesh>& meshResource,
} }
template<std::uint8_t dimensions> AbstractShapeRenderer<dimensions>::AbstractShapeRenderer(ResourceKey meshKey, ResourceKey vertexBufferKey, ResourceKey indexBufferKey) { template<UnsignedInt dimensions> AbstractShapeRenderer<dimensions>::AbstractShapeRenderer(ResourceKey meshKey, ResourceKey vertexBufferKey, ResourceKey indexBufferKey) {
shader = ResourceManager::instance()->get<AbstractShaderProgram, Shaders::FlatShader<dimensions>>(shaderKey<dimensions>()); shader = ResourceManager::instance()->get<AbstractShaderProgram, Shaders::FlatShader<dimensions>>(shaderKey<dimensions>());
mesh = ResourceManager::instance()->get<Mesh>(meshKey); mesh = ResourceManager::instance()->get<Mesh>(meshKey);
vertexBuffer = ResourceManager::instance()->get<Buffer>(vertexBufferKey); vertexBuffer = ResourceManager::instance()->get<Buffer>(vertexBufferKey);
@ -90,9 +90,9 @@ template<std::uint8_t dimensions> AbstractShapeRenderer<dimensions>::AbstractSha
new Shaders::FlatShader<dimensions>, ResourceDataState::Final, ResourcePolicy::Resident); new Shaders::FlatShader<dimensions>, ResourceDataState::Final, ResourcePolicy::Resident);
} }
template<std::uint8_t dimensions> AbstractShapeRenderer<dimensions>::~AbstractShapeRenderer() {} template<UnsignedInt dimensions> AbstractShapeRenderer<dimensions>::~AbstractShapeRenderer() {}
template<std::uint8_t dimensions> void AbstractShapeRenderer<dimensions>::createResources(typename MeshData<dimensions>::Type data) { template<UnsignedInt dimensions> void AbstractShapeRenderer<dimensions>::createResources(typename MeshData<dimensions>::Type data) {
create<dimensions>(data, this->mesh, this->vertexBuffer, this->indexBuffer); create<dimensions>(data, this->mesh, this->vertexBuffer, this->indexBuffer);
} }

4
src/DebugTools/Implementation/AbstractShapeRenderer.h

@ -24,12 +24,12 @@
namespace Magnum { namespace DebugTools { namespace Implementation { namespace Magnum { namespace DebugTools { namespace Implementation {
template<std::uint8_t dimensions> struct MeshData; template<UnsignedInt dimensions> struct MeshData;
template<> struct MeshData<2> { typedef Trade::MeshData2D Type; }; template<> struct MeshData<2> { typedef Trade::MeshData2D Type; };
template<> struct MeshData<3> { typedef Trade::MeshData3D Type; }; template<> struct MeshData<3> { typedef Trade::MeshData3D Type; };
template<std::uint8_t dimensions> class AbstractShapeRenderer { template<UnsignedInt dimensions> class AbstractShapeRenderer {
public: public:
AbstractShapeRenderer(ResourceKey mesh, ResourceKey vertexBuffer, ResourceKey indexBuffer); AbstractShapeRenderer(ResourceKey mesh, ResourceKey vertexBuffer, ResourceKey indexBuffer);
virtual ~AbstractShapeRenderer(); virtual ~AbstractShapeRenderer();

4
src/DebugTools/Implementation/AxisAlignedBoxRenderer.cpp

@ -22,9 +22,9 @@
namespace Magnum { namespace DebugTools { namespace Implementation { namespace Magnum { namespace DebugTools { namespace Implementation {
template<std::uint8_t dimensions> AxisAlignedBoxRenderer<dimensions>::AxisAlignedBoxRenderer(Physics::AxisAlignedBox<dimensions>& axisAlignedBox): axisAlignedBox(axisAlignedBox) {} template<UnsignedInt dimensions> AxisAlignedBoxRenderer<dimensions>::AxisAlignedBoxRenderer(Physics::AxisAlignedBox<dimensions>& axisAlignedBox): axisAlignedBox(axisAlignedBox) {}
template<std::uint8_t dimensions> void AxisAlignedBoxRenderer<dimensions>::draw(Resource<ShapeRendererOptions>& options, const typename DimensionTraits<dimensions>::MatrixType& projectionMatrix) { template<UnsignedInt dimensions> void AxisAlignedBoxRenderer<dimensions>::draw(Resource<ShapeRendererOptions>& options, const typename DimensionTraits<dimensions>::MatrixType& projectionMatrix) {
/* Half scale, because the box is 2x2(x2) */ /* Half scale, because the box is 2x2(x2) */
typename DimensionTraits<dimensions>::MatrixType transformation = typename DimensionTraits<dimensions>::MatrixType transformation =
DimensionTraits<dimensions>::MatrixType::translation((axisAlignedBox.transformedMin()+axisAlignedBox.transformedMax())/2)* DimensionTraits<dimensions>::MatrixType::translation((axisAlignedBox.transformedMin()+axisAlignedBox.transformedMax())/2)*

2
src/DebugTools/Implementation/AxisAlignedBoxRenderer.h

@ -23,7 +23,7 @@
namespace Magnum { namespace DebugTools { namespace Implementation { namespace Magnum { namespace DebugTools { namespace Implementation {
template<std::uint8_t dimensions> class AxisAlignedBoxRenderer: public AbstractBoxRenderer<dimensions> { template<UnsignedInt dimensions> class AxisAlignedBoxRenderer: public AbstractBoxRenderer<dimensions> {
public: public:
AxisAlignedBoxRenderer(Physics::AxisAlignedBox<dimensions>& axisAlignedBox); AxisAlignedBoxRenderer(Physics::AxisAlignedBox<dimensions>& axisAlignedBox);

4
src/DebugTools/Implementation/BoxRenderer.cpp

@ -22,9 +22,9 @@
namespace Magnum { namespace DebugTools { namespace Implementation { namespace Magnum { namespace DebugTools { namespace Implementation {
template<std::uint8_t dimensions> BoxRenderer<dimensions>::BoxRenderer(Physics::Box<dimensions>& box): box(box) {} template<UnsignedInt dimensions> BoxRenderer<dimensions>::BoxRenderer(Physics::Box<dimensions>& box): box(box) {}
template<std::uint8_t dimensions> void BoxRenderer<dimensions>::draw(Resource<ShapeRendererOptions>& options, const typename DimensionTraits<dimensions>::MatrixType& projectionMatrix) { template<UnsignedInt dimensions> void BoxRenderer<dimensions>::draw(Resource<ShapeRendererOptions>& options, const typename DimensionTraits<dimensions>::MatrixType& projectionMatrix) {
/* Half scale, because the box is 2x2(x2) */ /* Half scale, because the box is 2x2(x2) */
this->shader->setTransformationProjectionMatrix(projectionMatrix*box.transformedTransformation()* this->shader->setTransformationProjectionMatrix(projectionMatrix*box.transformedTransformation()*
DimensionTraits<dimensions>::MatrixType::scaling(typename DimensionTraits<dimensions>::VectorType(0.5f))) DimensionTraits<dimensions>::MatrixType::scaling(typename DimensionTraits<dimensions>::VectorType(0.5f)))

2
src/DebugTools/Implementation/BoxRenderer.h

@ -23,7 +23,7 @@
namespace Magnum { namespace DebugTools { namespace Implementation { namespace Magnum { namespace DebugTools { namespace Implementation {
template<std::uint8_t dimensions> class BoxRenderer: public AbstractBoxRenderer<dimensions> { template<UnsignedInt dimensions> class BoxRenderer: public AbstractBoxRenderer<dimensions> {
public: public:
BoxRenderer(Physics::Box<dimensions>& box); BoxRenderer(Physics::Box<dimensions>& box);

10
src/DebugTools/Implementation/PointRenderer.cpp

@ -26,24 +26,24 @@
namespace Magnum { namespace DebugTools { namespace Implementation { namespace Magnum { namespace DebugTools { namespace Implementation {
namespace { namespace {
template<std::uint8_t dimensions> ResourceKey meshKey(); template<UnsignedInt dimensions> ResourceKey meshKey();
template<> inline ResourceKey meshKey<2>() { return ResourceKey("point2d"); } template<> inline ResourceKey meshKey<2>() { return ResourceKey("point2d"); }
template<> inline ResourceKey meshKey<3>() { return ResourceKey("point3d"); } template<> inline ResourceKey meshKey<3>() { return ResourceKey("point3d"); }
template<std::uint8_t dimensions> ResourceKey vertexBufferKey(); template<UnsignedInt dimensions> ResourceKey vertexBufferKey();
template<> inline ResourceKey vertexBufferKey<2>() { return ResourceKey("point2d-vertices"); } template<> inline ResourceKey vertexBufferKey<2>() { return ResourceKey("point2d-vertices"); }
template<> inline ResourceKey vertexBufferKey<3>() { return ResourceKey("point3d-vertices"); } template<> inline ResourceKey vertexBufferKey<3>() { return ResourceKey("point3d-vertices"); }
template<std::uint8_t dimensions> typename MeshData<dimensions>::Type meshData(); template<UnsignedInt dimensions> typename MeshData<dimensions>::Type meshData();
template<> inline Trade::MeshData2D meshData<2>() { return Primitives::Crosshair2D::wireframe(); } template<> inline Trade::MeshData2D meshData<2>() { return Primitives::Crosshair2D::wireframe(); }
template<> inline Trade::MeshData3D meshData<3>() { return Primitives::Crosshair3D::wireframe(); } template<> inline Trade::MeshData3D meshData<3>() { return Primitives::Crosshair3D::wireframe(); }
} }
template<std::uint8_t dimensions> PointRenderer<dimensions>::PointRenderer(Physics::Point<dimensions>& point): AbstractShapeRenderer<dimensions>(meshKey<dimensions>(), vertexBufferKey<dimensions>(), {}), point(point) { template<UnsignedInt dimensions> PointRenderer<dimensions>::PointRenderer(Physics::Point<dimensions>& point): AbstractShapeRenderer<dimensions>(meshKey<dimensions>(), vertexBufferKey<dimensions>(), {}), point(point) {
if(!this->mesh) this->createResources(meshData<dimensions>()); if(!this->mesh) this->createResources(meshData<dimensions>());
} }
template<std::uint8_t dimensions> void PointRenderer<dimensions>::draw(Resource<ShapeRendererOptions>& options, const typename DimensionTraits<dimensions>::MatrixType& projectionMatrix) { template<UnsignedInt dimensions> void PointRenderer<dimensions>::draw(Resource<ShapeRendererOptions>& options, const typename DimensionTraits<dimensions>::MatrixType& projectionMatrix) {
/* Half scale, because the point is 2x2(x2) */ /* Half scale, because the point is 2x2(x2) */
this->shader->setTransformationProjectionMatrix(projectionMatrix* this->shader->setTransformationProjectionMatrix(projectionMatrix*
DimensionTraits<dimensions>::MatrixType::translation(point.transformedPosition())* DimensionTraits<dimensions>::MatrixType::translation(point.transformedPosition())*

2
src/DebugTools/Implementation/PointRenderer.h

@ -23,7 +23,7 @@
namespace Magnum { namespace DebugTools { namespace Implementation { namespace Magnum { namespace DebugTools { namespace Implementation {
template<std::uint8_t dimensions> class PointRenderer: public AbstractShapeRenderer<dimensions> { template<UnsignedInt dimensions> class PointRenderer: public AbstractShapeRenderer<dimensions> {
public: public:
PointRenderer(Physics::Point<dimensions>& point); PointRenderer(Physics::Point<dimensions>& point);

12
src/DebugTools/ObjectRenderer.cpp

@ -25,7 +25,7 @@ namespace Magnum { namespace DebugTools {
namespace { namespace {
template<std::uint8_t> struct Renderer; template<UnsignedInt> struct Renderer;
template<> struct Renderer<2> { template<> struct Renderer<2> {
inline static ResourceKey shader() { return {"VertexColorShader2D"}; } inline static ResourceKey shader() { return {"VertexColorShader2D"}; }
@ -35,7 +35,7 @@ template<> struct Renderer<2> {
static const std::array<Vector2, 8> positions; static const std::array<Vector2, 8> positions;
static const std::array<Color3<>, 8> colors; static const std::array<Color3<>, 8> colors;
static const std::array<std::uint8_t, 12> indices; static const std::array<UnsignedByte, 12> indices;
}; };
const std::array<Vector2, 8> Renderer<2>::positions{{ const std::array<Vector2, 8> Renderer<2>::positions{{
@ -62,7 +62,7 @@ const std::array<Color3<>, 8> Renderer<2>::colors{{
{0.0f, 1.0f, 0.0f}, {0.0f, 1.0f, 0.0f},
}}; }};
const std::array<std::uint8_t, 12> Renderer<2>::indices{{ const std::array<UnsignedByte, 12> Renderer<2>::indices{{
0, 1, 0, 1,
1, 2, /* X axis */ 1, 2, /* X axis */
1, 3, 1, 3,
@ -117,7 +117,7 @@ const std::array<Color3<>, 12> Renderer<3>::colors{{
{0.0f, 0.0f, 1.0f} {0.0f, 0.0f, 1.0f}
}}; }};
const std::array<std::uint8_t, 18> Renderer<3>::indices{{ const std::array<UnsignedByte, 18> Renderer<3>::indices{{
0, 1, 0, 1,
1, 2, /* X axis */ 1, 2, /* X axis */
1, 3, 1, 3,
@ -133,7 +133,7 @@ const std::array<std::uint8_t, 18> Renderer<3>::indices{{
} }
template<std::uint8_t dimensions> ObjectRenderer<dimensions>::ObjectRenderer(SceneGraph::AbstractObject<dimensions>* object, ResourceKey options, SceneGraph::DrawableGroup<dimensions>* drawables): SceneGraph::Drawable<dimensions>(object, drawables), options(ResourceManager::instance()->get<ObjectRendererOptions>(options)) { template<UnsignedInt dimensions> ObjectRenderer<dimensions>::ObjectRenderer(SceneGraph::AbstractObject<dimensions>* object, ResourceKey options, SceneGraph::DrawableGroup<dimensions>* drawables): SceneGraph::Drawable<dimensions>(object, drawables), options(ResourceManager::instance()->get<ObjectRendererOptions>(options)) {
/* Shader */ /* Shader */
shader = ResourceManager::instance()->get<AbstractShaderProgram, Shaders::VertexColorShader<dimensions>>(Renderer<dimensions>::shader()); shader = ResourceManager::instance()->get<AbstractShaderProgram, Shaders::VertexColorShader<dimensions>>(Renderer<dimensions>::shader());
if(!shader) ResourceManager::instance()->set<AbstractShaderProgram>(shader.key(), if(!shader) ResourceManager::instance()->set<AbstractShaderProgram>(shader.key(),
@ -165,7 +165,7 @@ template<std::uint8_t dimensions> ObjectRenderer<dimensions>::ObjectRenderer(Sce
ResourceManager::instance()->set<Mesh>(this->mesh.key(), mesh, ResourceDataState::Final, ResourcePolicy::Manual); ResourceManager::instance()->set<Mesh>(this->mesh.key(), mesh, ResourceDataState::Final, ResourcePolicy::Manual);
} }
template<std::uint8_t dimensions> void ObjectRenderer<dimensions>::draw(const typename DimensionTraits<dimensions>::MatrixType& transformationMatrix, SceneGraph::AbstractCamera<dimensions>* camera) { template<UnsignedInt dimensions> void ObjectRenderer<dimensions>::draw(const typename DimensionTraits<dimensions>::MatrixType& transformationMatrix, SceneGraph::AbstractCamera<dimensions>* camera) {
shader->setTransformationProjectionMatrix(camera->projectionMatrix()*transformationMatrix*DimensionTraits<dimensions>::MatrixType::scaling(typename DimensionTraits<dimensions>::VectorType(options->size()))) shader->setTransformationProjectionMatrix(camera->projectionMatrix()*transformationMatrix*DimensionTraits<dimensions>::MatrixType::scaling(typename DimensionTraits<dimensions>::VectorType(options->size())))
->use(); ->use();

12
src/DebugTools/ObjectRenderer.h

@ -37,7 +37,7 @@ class ObjectRendererOptions {
inline constexpr ObjectRendererOptions(): _size(1.0f) {} inline constexpr ObjectRendererOptions(): _size(1.0f) {}
/** @brief Size of the rendered axes */ /** @brief Size of the rendered axes */
inline constexpr GLfloat size() const { return _size; } inline constexpr Float size() const { return _size; }
/** /**
* @brief Set size of the rendered axes * @brief Set size of the rendered axes
@ -45,13 +45,13 @@ class ObjectRendererOptions {
* *
* Default is `1.0f`. * Default is `1.0f`.
*/ */
inline ObjectRendererOptions* setSize(GLfloat size) { inline ObjectRendererOptions* setSize(Float size) {
_size = size; _size = size;
return this; return this;
} }
private: private:
GLfloat _size; Float _size;
}; };
/** /**
@ -75,7 +75,7 @@ new DebugTools::ObjectRenderer2D(object, "my", debugDrawables);
@see ObjectRenderer2D, ObjectRenderer3D @see ObjectRenderer2D, ObjectRenderer3D
*/ */
template<std::uint8_t dimensions> class MAGNUM_DEBUGTOOLS_EXPORT ObjectRenderer: public SceneGraph::Drawable<dimensions> { template<UnsignedInt dimensions> class MAGNUM_DEBUGTOOLS_EXPORT ObjectRenderer: public SceneGraph::Drawable<dimensions> {
public: public:
/** /**
* @brief Constructor * @brief Constructor
@ -90,8 +90,8 @@ template<std::uint8_t dimensions> class MAGNUM_DEBUGTOOLS_EXPORT ObjectRenderer:
explicit ObjectRenderer(SceneGraph::AbstractObject<dimensions>* object, ResourceKey options = ResourceKey(), SceneGraph::DrawableGroup<dimensions>* drawables = nullptr); explicit ObjectRenderer(SceneGraph::AbstractObject<dimensions>* object, ResourceKey options = ResourceKey(), SceneGraph::DrawableGroup<dimensions>* drawables = nullptr);
protected: protected:
/** @todoc Remove GLfloat when Doxygen properly treats this as override */ /** @todoc Remove Float when Doxygen properly treats this as override */
void draw(const typename DimensionTraits<dimensions, GLfloat>::MatrixType& transformationMatrix, SceneGraph::AbstractCamera<dimensions, GLfloat>* camera) override; void draw(const typename DimensionTraits<dimensions, Float>::MatrixType& transformationMatrix, SceneGraph::AbstractCamera<dimensions, Float>* camera) override;
private: private:
Resource<ObjectRendererOptions> options; Resource<ObjectRendererOptions> options;

3
src/DebugTools/Profiler.h

@ -24,6 +24,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "Types.h"
#include "magnumDebugToolsVisibility.h" #include "magnumDebugToolsVisibility.h"
namespace Magnum { namespace DebugTools { namespace Magnum { namespace DebugTools {
@ -95,7 +96,7 @@ class MAGNUM_DEBUGTOOLS_EXPORT Profiler {
* *
* @see otherSection, addSection(), start(Section) * @see otherSection, addSection(), start(Section)
*/ */
typedef std::uint32_t Section; typedef UnsignedInt Section;
/** /**
* @brief Default section * @brief Default section

6
src/DebugTools/ShapeRenderer.cpp

@ -78,16 +78,16 @@ template<> void createDebugMesh(ShapeRenderer<3>* renderer, Physics::AbstractSha
} }
#endif #endif
template<std::uint8_t dimensions> ShapeRenderer<dimensions>::ShapeRenderer(Physics::ObjectShape<dimensions>* shape, ResourceKey options, SceneGraph::DrawableGroup<dimensions>* drawables): SceneGraph::Drawable<dimensions>(shape->object(), drawables), options(ResourceManager::instance()->get<ShapeRendererOptions>(options)) { template<UnsignedInt dimensions> ShapeRenderer<dimensions>::ShapeRenderer(Physics::ObjectShape<dimensions>* shape, ResourceKey options, SceneGraph::DrawableGroup<dimensions>* drawables): SceneGraph::Drawable<dimensions>(shape->object(), drawables), options(ResourceManager::instance()->get<ShapeRendererOptions>(options)) {
CORRADE_ASSERT(shape->shape() != nullptr, "DebugTools::ShapeRenderer: cannot create renderer for empty shape", ); CORRADE_ASSERT(shape->shape() != nullptr, "DebugTools::ShapeRenderer: cannot create renderer for empty shape", );
Implementation::createDebugMesh(this, shape->shape()); Implementation::createDebugMesh(this, shape->shape());
} }
template<std::uint8_t dimensions> ShapeRenderer<dimensions>::~ShapeRenderer() { template<UnsignedInt dimensions> ShapeRenderer<dimensions>::~ShapeRenderer() {
for(auto i: renderers) delete i; for(auto i: renderers) delete i;
} }
template<std::uint8_t dimensions> void ShapeRenderer<dimensions>::draw(const typename DimensionTraits<dimensions>::MatrixType&, SceneGraph::AbstractCamera<dimensions>* camera) { template<UnsignedInt dimensions> void ShapeRenderer<dimensions>::draw(const typename DimensionTraits<dimensions>::MatrixType&, SceneGraph::AbstractCamera<dimensions>* camera) {
typename DimensionTraits<dimensions>::MatrixType projectionMatrix = camera->projectionMatrix()*camera->cameraMatrix(); typename DimensionTraits<dimensions>::MatrixType projectionMatrix = camera->projectionMatrix()*camera->cameraMatrix();
for(auto i: renderers) i->draw(options, projectionMatrix); for(auto i: renderers) i->draw(options, projectionMatrix);
} }

18
src/DebugTools/ShapeRenderer.h

@ -30,14 +30,14 @@ namespace Magnum { namespace DebugTools {
/** @todoc Remove `ifndef` when Doxygen is sane again */ /** @todoc Remove `ifndef` when Doxygen is sane again */
#ifndef DOXYGEN_GENERATING_OUTPUT #ifndef DOXYGEN_GENERATING_OUTPUT
template<std::uint8_t> class ShapeRenderer; template<UnsignedInt> class ShapeRenderer;
#endif #endif
#ifndef DOXYGEN_GENERATING_OUTPUT #ifndef DOXYGEN_GENERATING_OUTPUT
namespace Implementation { namespace Implementation {
template<std::uint8_t> class AbstractShapeRenderer; template<UnsignedInt> class AbstractShapeRenderer;
template<std::uint8_t dimensions> void createDebugMesh(ShapeRenderer<dimensions>* renderer, Physics::AbstractShape<dimensions>* shape); template<UnsignedInt dimensions> void createDebugMesh(ShapeRenderer<dimensions>* renderer, Physics::AbstractShape<dimensions>* shape);
} }
#endif #endif
@ -65,7 +65,7 @@ class ShapeRendererOptions {
} }
/** @brief Point size */ /** @brief Point size */
inline constexpr GLfloat pointSize() const { return _pointSize; } inline constexpr Float pointSize() const { return _pointSize; }
/** /**
* @brief Set point size * @brief Set point size
@ -74,14 +74,14 @@ class ShapeRendererOptions {
* Size of rendered crosshairs, representing Physics::Point shapes. * Size of rendered crosshairs, representing Physics::Point shapes.
* Default is `0.25f`. * Default is `0.25f`.
*/ */
inline ShapeRendererOptions* setPointSize(GLfloat size) { inline ShapeRendererOptions* setPointSize(Float size) {
_pointSize = size; _pointSize = size;
return this; return this;
} }
private: private:
Color3<> _color; Color3<> _color;
GLfloat _pointSize; Float _pointSize;
}; };
/** /**
@ -105,7 +105,7 @@ new DebugTools::ShapeRenderer2D(shape, "red", debugDrawables);
@see ShapeRenderer2D, ShapeRenderer3D @see ShapeRenderer2D, ShapeRenderer3D
*/ */
template<std::uint8_t dimensions> class MAGNUM_DEBUGTOOLS_EXPORT ShapeRenderer: public SceneGraph::Drawable<dimensions> { template<UnsignedInt dimensions> class MAGNUM_DEBUGTOOLS_EXPORT ShapeRenderer: public SceneGraph::Drawable<dimensions> {
#ifndef DOXYGEN_GENERATING_OUTPUT #ifndef DOXYGEN_GENERATING_OUTPUT
friend void Implementation::createDebugMesh<>(ShapeRenderer<dimensions>*, Physics::AbstractShape<dimensions>*); friend void Implementation::createDebugMesh<>(ShapeRenderer<dimensions>*, Physics::AbstractShape<dimensions>*);
#endif #endif
@ -129,8 +129,8 @@ template<std::uint8_t dimensions> class MAGNUM_DEBUGTOOLS_EXPORT ShapeRenderer:
~ShapeRenderer(); ~ShapeRenderer();
protected: protected:
/** @todoc Remove GLfloat when Doxygen properly treats this as override */ /** @todoc Remove Float when Doxygen properly treats this as override */
void draw(const typename DimensionTraits<dimensions, GLfloat>::MatrixType& transformationMatrix, SceneGraph::AbstractCamera<dimensions, GLfloat>* camera) override; void draw(const typename DimensionTraits<dimensions, Float>::MatrixType& transformationMatrix, SceneGraph::AbstractCamera<dimensions, Float>* camera) override;
private: private:
Resource<ShapeRendererOptions> options; Resource<ShapeRendererOptions> options;

Loading…
Cancel
Save