From 6d9a9e9dfdb21120bf70c6aaff95634e626a99cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Wed, 22 Feb 2017 16:21:45 +0100 Subject: [PATCH] DebugTools: base ObjectRenderer on Primitives::axis*D(). --- src/Magnum/DebugTools/ObjectRenderer.cpp | 106 +++-------------------- 1 file changed, 12 insertions(+), 94 deletions(-) diff --git a/src/Magnum/DebugTools/ObjectRenderer.cpp b/src/Magnum/DebugTools/ObjectRenderer.cpp index bebbc4c95..457454677 100644 --- a/src/Magnum/DebugTools/ObjectRenderer.cpp +++ b/src/Magnum/DebugTools/ObjectRenderer.cpp @@ -28,9 +28,13 @@ #include "Magnum/Buffer.h" #include "Magnum/Mesh.h" #include "Magnum/DebugTools/ResourceManager.h" +#include "Magnum/MeshTools/CompressIndices.h" #include "Magnum/MeshTools/Interleave.h" +#include "Magnum/Primitives/Axis.h" #include "Magnum/SceneGraph/Camera.h" #include "Magnum/Shaders/VertexColor.h" +#include "Magnum/Trade/MeshData2D.h" +#include "Magnum/Trade/MeshData3D.h" namespace Magnum { namespace DebugTools { @@ -43,105 +47,17 @@ template<> struct Renderer<2> { static ResourceKey vertexBuffer() { return {"object2d-vertices"}; } static ResourceKey indexBuffer() { return {"object2d-indices"}; } static ResourceKey mesh() { return {"object2d"}; } - - static const std::array positions; - static const std::array colors; - static const std::array indices; + static Trade::MeshData2D meshData() { return Primitives::axis2D(); } }; -const std::array Renderer<2>::positions{{ - { 0.0f, 0.0f}, - { 1.0f, 0.0f}, /* X axis */ - { 0.9f, 0.1f}, - { 0.9f, -0.1f}, - - { 0.0f, 0.0f}, - { 0.0f, 1.0f}, /* Y axis */ - { 0.1f, 0.9f}, - {-0.1f, 0.9f} -}}; - -const std::array Renderer<2>::colors{{ - {1.0f, 0.0f, 0.0f}, - {1.0f, 0.0f, 0.0f}, /* X axis */ - {1.0f, 0.0f, 0.0f}, - {1.0f, 0.0f, 0.0f}, - - {0.0f, 1.0f, 0.0f}, - {0.0f, 1.0f, 0.0f}, /* Y axis */ - {0.0f, 1.0f, 0.0f}, - {0.0f, 1.0f, 0.0f}, -}}; - -const std::array Renderer<2>::indices{{ - 0, 1, - 1, 2, /* X axis */ - 1, 3, - - 4, 5, - 5, 6, /* Y axis */ - 5, 7 -}}; - template<> struct Renderer<3> { static ResourceKey shader() { return {"VertexColorShader3D"}; } static ResourceKey vertexBuffer() { return {"object3d-vertices"}; } static ResourceKey indexBuffer() { return {"object3d-indices"}; } static ResourceKey mesh() { return {"object3d"}; } - - static const std::array positions; - static const std::array colors; - static const std::array indices; + static Trade::MeshData3D meshData() { return Primitives::axis3D(); } }; -const std::array Renderer<3>::positions{{ - { 0.0f, 0.0f, 0.0f}, - { 1.0f, 0.0f, 0.0f}, /* X axis */ - { 0.9f, 0.1f, 0.0f}, - { 0.9f, -0.1f, 0.0f}, - - { 0.0f, 0.0f, 0.0f}, - { 0.0f, 1.0f, 0.0f}, /* Y axis */ - { 0.1f, 0.9f, 0.0f}, - {-0.1f, 0.9f, 0.0f}, - - { 0.0f, 0.0f, 0.0f}, - { 0.0f, 0.0f, 1.0f}, /* Z axis */ - { 0.1f, 0.0f, 0.9f}, - {-0.1f, 0.0f, 0.9f} -}}; - -const std::array Renderer<3>::colors{{ - {1.0f, 0.0f, 0.0f}, - {1.0f, 0.0f, 0.0f}, /* X axis */ - {1.0f, 0.0f, 0.0f}, - {1.0f, 0.0f, 0.0f}, - - {0.0f, 1.0f, 0.0f}, - {0.0f, 1.0f, 0.0f}, /* Y axis */ - {0.0f, 1.0f, 0.0f}, - {0.0f, 1.0f, 0.0f}, - - {0.0f, 0.0f, 1.0f}, - {0.0f, 0.0f, 1.0f}, /* Z axis */ - {0.0f, 0.0f, 1.0f}, - {0.0f, 0.0f, 1.0f} -}}; - -const std::array Renderer<3>::indices{{ - 0, 1, - 1, 2, /* X axis */ - 1, 3, - - 4, 5, - 5, 6, /* Y axis */ - 5, 7, - - 8, 9, - 9, 10, /* Z axis */ - 9, 11 -}}; - } /* MSVC 2015 can't handle {} here */ @@ -161,18 +77,20 @@ template ObjectRenderer::ObjectRenderer(Scen Buffer* indexBuffer = new Buffer{Buffer::TargetHint::ElementArray}; Mesh* mesh = new Mesh; - vertexBuffer->setData(MeshTools::interleave(Renderer::positions, Renderer::colors), BufferUsage::StaticDraw); + auto data = Renderer::meshData(); + + vertexBuffer->setData(MeshTools::interleave(data.positions(0), data.colors(0)), BufferUsage::StaticDraw); ResourceManager::instance().set(_vertexBuffer.key(), vertexBuffer, ResourceDataState::Final, ResourcePolicy::Manual); - indexBuffer->setData(Renderer::indices, BufferUsage::StaticDraw); + indexBuffer->setData(MeshTools::compressIndicesAs(data.indices()), BufferUsage::StaticDraw); ResourceManager::instance().set(_indexBuffer.key(), indexBuffer, ResourceDataState::Final, ResourcePolicy::Manual); mesh->setPrimitive(MeshPrimitive::Lines) - .setCount(Renderer::indices.size()) + .setCount(data.indices().size()) .addVertexBuffer(*vertexBuffer, 0, typename Shaders::VertexColor::Position(), typename Shaders::VertexColor::Color{Shaders::VertexColor::Color::Components::Four}) - .setIndexBuffer(*indexBuffer, 0, Mesh::IndexType::UnsignedByte, 0, Renderer::positions.size()); + .setIndexBuffer(*indexBuffer, 0, Mesh::IndexType::UnsignedByte, 0, data.positions(0).size()); ResourceManager::instance().set(_mesh.key(), mesh, ResourceDataState::Final, ResourcePolicy::Manual); }