diff --git a/src/DebugTools/Implementation/SphereRenderer.cpp b/src/DebugTools/Implementation/SphereRenderer.cpp index 6452e9e8e..43faf06a1 100644 --- a/src/DebugTools/Implementation/SphereRenderer.cpp +++ b/src/DebugTools/Implementation/SphereRenderer.cpp @@ -28,8 +28,10 @@ #include "DebugTools/ShapeRenderer.h" #include "Shapes/Sphere.h" #include "Primitives/Circle.h" +#include "Primitives/UVSphere.h" #include "Shaders/Flat.h" #include "Trade/MeshData2D.h" +#include "Trade/MeshData3D.h" namespace Magnum { namespace DebugTools { namespace Implementation { @@ -37,6 +39,10 @@ AbstractSphereRenderer<2>::AbstractSphereRenderer(): AbstractShapeRenderer<2>("s if(!wireframeMesh) createResources(Primitives::Circle::wireframe(40)); } +AbstractSphereRenderer<3>::AbstractSphereRenderer(): AbstractShapeRenderer<3>("sphere3d", "sphere3d-vertices", "sphere3d-indices") { + if(!wireframeMesh) createResources(Primitives::UVSphere::wireframe(40, 20)); +} + template SphereRenderer::SphereRenderer(const Shapes::Implementation::AbstractShape* sphere): sphere(static_cast>*>(sphere)->shape) {} template void SphereRenderer::draw(Resource& options, const typename DimensionTraits::MatrixType& projectionMatrix) { @@ -49,5 +55,6 @@ template void SphereRenderer::draw(Resource< } template class SphereRenderer<2>; +template class SphereRenderer<3>; }}} diff --git a/src/DebugTools/Implementation/SphereRenderer.h b/src/DebugTools/Implementation/SphereRenderer.h index 15d12048c..232231732 100644 --- a/src/DebugTools/Implementation/SphereRenderer.h +++ b/src/DebugTools/Implementation/SphereRenderer.h @@ -39,6 +39,11 @@ template<> class AbstractSphereRenderer<2>: public AbstractShapeRenderer<2> { AbstractSphereRenderer(); }; +template<> class AbstractSphereRenderer<3>: public AbstractShapeRenderer<3> { + public: + AbstractSphereRenderer(); +}; + template class SphereRenderer: public AbstractSphereRenderer { public: SphereRenderer(const Shapes::Implementation::AbstractShape* sphere); diff --git a/src/DebugTools/ShapeRenderer.cpp b/src/DebugTools/ShapeRenderer.cpp index d1843d0d1..52cf39947 100644 --- a/src/DebugTools/ShapeRenderer.cpp +++ b/src/DebugTools/ShapeRenderer.cpp @@ -53,15 +53,15 @@ template<> void createDebugMesh(ShapeRenderer<2>* renderer, const Shapes::Implem case Shapes::AbstractShape2D::Type::Point: renderer->renderers.push_back(new Implementation::PointRenderer<2>(shape)); break; + case Shapes::AbstractShape2D::Type::Sphere: + renderer->renderers.push_back(new Implementation::SphereRenderer<2>(shape)); + break; case Shapes::AbstractShape2D::Type::Composition: { const Shapes::Composition2D& composition = static_cast*>(shape)->shape; for(std::size_t i = 0; i != composition.size(); ++i) createDebugMesh(renderer, Shapes::Implementation::getAbstractShape(composition, i)); } break; - case Shapes::AbstractShape2D::Type::Sphere: - renderer->renderers.push_back(new Implementation::SphereRenderer<2>(shape)); - break; default: Warning() << "DebugTools::ShapeRenderer2D::createShapeRenderer(): type" << shape->type() << "not implemented"; } @@ -81,6 +81,9 @@ template<> void createDebugMesh(ShapeRenderer<3>* renderer, const Shapes::Implem case Shapes::AbstractShape3D::Type::Point: renderer->renderers.push_back(new Implementation::PointRenderer<3>(shape)); break; + case Shapes::AbstractShape3D::Type::Sphere: + renderer->renderers.push_back(new Implementation::SphereRenderer<3>(shape)); + break; case Shapes::AbstractShape3D::Type::Composition: { const Shapes::Composition3D& composition = static_cast*>(shape)->shape;