From 304cd6f036ebb757861655b6568579a868e3f9df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 17 Feb 2019 11:59:32 +0100 Subject: [PATCH] DebugTools: greatly simplified ForceRenderer and ObjectRenderer impls. This code was neglected for a while. No need to have naked new or explicit handling of vertex/index buffers anymore. --- src/Magnum/DebugTools/ForceRenderer.cpp | 27 ++++++------------ src/Magnum/DebugTools/ForceRenderer.h | 1 - src/Magnum/DebugTools/ObjectRenderer.cpp | 35 ++---------------------- src/Magnum/DebugTools/ObjectRenderer.h | 1 - 4 files changed, 12 insertions(+), 52 deletions(-) diff --git a/src/Magnum/DebugTools/ForceRenderer.cpp b/src/Magnum/DebugTools/ForceRenderer.cpp index 2b376ff78..251bb0c15 100644 --- a/src/Magnum/DebugTools/ForceRenderer.cpp +++ b/src/Magnum/DebugTools/ForceRenderer.cpp @@ -25,7 +25,6 @@ #include "ForceRenderer.h" -#include "Magnum/GL/Buffer.h" #include "Magnum/GL/Mesh.h" #include "Magnum/DebugTools/ResourceManager.h" #include "Magnum/SceneGraph/Camera.h" @@ -63,27 +62,19 @@ template ForceRenderer::ForceRenderer(SceneG /* Mesh and vertex buffer */ _mesh = ResourceManager::instance().get("force"); - _vertexBuffer = ResourceManager::instance().get("force-vertices"); - _indexBuffer = ResourceManager::instance().get("force-indices"); if(_mesh) return; /* Create the mesh */ - GL::Buffer* vertexBuffer = new GL::Buffer{GL::Buffer::TargetHint::Array}; - GL::Buffer* indexBuffer = new GL::Buffer{GL::Buffer::TargetHint::ElementArray}; - - vertexBuffer->setData(positions, GL::BufferUsage::StaticDraw); - ResourceManager::instance().set(_vertexBuffer.key(), vertexBuffer, ResourceDataState::Final, ResourcePolicy::Manual); - - indexBuffer->setData(indices, GL::BufferUsage::StaticDraw); - ResourceManager::instance().set(_indexBuffer.key(), indexBuffer, ResourceDataState::Final, ResourcePolicy::Manual); - - GL::Mesh* mesh = new GL::Mesh; - mesh->setPrimitive(GL::MeshPrimitive::Lines) - .setCount(indices.size()) - .addVertexBuffer(*vertexBuffer, 0, + GL::Buffer vertexBuffer{GL::Buffer::TargetHint::Array}; + vertexBuffer.setData(positions, GL::BufferUsage::StaticDraw); + GL::Buffer indexBuffer{GL::Buffer::TargetHint::ElementArray}; + indexBuffer.setData(indices, GL::BufferUsage::StaticDraw); + GL::Mesh mesh{GL::MeshPrimitive::Lines}; + mesh.setCount(indices.size()) + .addVertexBuffer(std::move(vertexBuffer), 0, typename Shaders::Flat::Position(Shaders::Flat::Position::Components::Two)) - .setIndexBuffer(*indexBuffer, 0, GL::MeshIndexType::UnsignedByte, 0, positions.size()); - ResourceManager::instance().set(_mesh.key(), mesh, ResourceDataState::Final, ResourcePolicy::Manual); + .setIndexBuffer(std::move(indexBuffer), 0, GL::MeshIndexType::UnsignedByte, 0, positions.size()); + ResourceManager::instance().set(_mesh.key(), std::move(mesh), ResourceDataState::Final, ResourcePolicy::Manual); } /* To avoid deleting pointers to incomplete type on destruction of Resource members */ diff --git a/src/Magnum/DebugTools/ForceRenderer.h b/src/Magnum/DebugTools/ForceRenderer.h index 508915fc8..5179c3e3f 100644 --- a/src/Magnum/DebugTools/ForceRenderer.h +++ b/src/Magnum/DebugTools/ForceRenderer.h @@ -140,7 +140,6 @@ template class MAGNUM_DEBUGTOOLS_EXPORT ForceRenderer: p Resource _options; Resource> _shader; Resource _mesh; - Resource _vertexBuffer, _indexBuffer; }; /** @brief Two-dimensional force renderer */ diff --git a/src/Magnum/DebugTools/ObjectRenderer.cpp b/src/Magnum/DebugTools/ObjectRenderer.cpp index 433a8aeac..1606c6ba3 100644 --- a/src/Magnum/DebugTools/ObjectRenderer.cpp +++ b/src/Magnum/DebugTools/ObjectRenderer.cpp @@ -26,10 +26,8 @@ #include "ObjectRenderer.h" #include "Magnum/DebugTools/ResourceManager.h" -#include "Magnum/GL/Buffer.h" #include "Magnum/GL/Mesh.h" -#include "Magnum/MeshTools/CompressIndices.h" -#include "Magnum/MeshTools/Interleave.h" +#include "Magnum/MeshTools/Compile.h" #include "Magnum/Primitives/Axis.h" #include "Magnum/SceneGraph/Camera.h" #include "Magnum/Shaders/VertexColor.h" @@ -44,16 +42,12 @@ template struct Renderer; template<> struct Renderer<2> { static ResourceKey shader() { return {"VertexColorShader2D"}; } - static ResourceKey vertexBuffer() { return {"object2d-vertices"}; } - static ResourceKey indexBuffer() { return {"object2d-indices"}; } static ResourceKey mesh() { return {"object2d"}; } static Trade::MeshData2D meshData() { return Primitives::axis2D(); } }; 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 Trade::MeshData3D meshData() { return Primitives::axis3D(); } }; @@ -66,32 +60,9 @@ template ObjectRenderer::ObjectRenderer(Scen _shader = ResourceManager::instance().get>(Renderer::shader()); if(!_shader) ResourceManager::instance().set(_shader.key(), new Shaders::VertexColor); - /* Mesh and vertex buffer */ + /* Mesh */ _mesh = ResourceManager::instance().get(Renderer::mesh()); - _vertexBuffer = ResourceManager::instance().get(Renderer::vertexBuffer()); - _indexBuffer = ResourceManager::instance().get(Renderer::indexBuffer()); - if(_mesh) return; - - /* Create the mesh */ - GL::Buffer* vertexBuffer = new GL::Buffer{GL::Buffer::TargetHint::Array}; - GL::Buffer* indexBuffer = new GL::Buffer{GL::Buffer::TargetHint::ElementArray}; - GL::Mesh* mesh = new GL::Mesh; - - auto data = Renderer::meshData(); - - vertexBuffer->setData(MeshTools::interleave(data.positions(0), data.colors(0)), GL::BufferUsage::StaticDraw); - ResourceManager::instance().set(_vertexBuffer.key(), vertexBuffer, ResourceDataState::Final, ResourcePolicy::Manual); - - indexBuffer->setData(MeshTools::compressIndicesAs(data.indices()), GL::BufferUsage::StaticDraw); - ResourceManager::instance().set(_indexBuffer.key(), indexBuffer, ResourceDataState::Final, ResourcePolicy::Manual); - - mesh->setPrimitive(GL::MeshPrimitive::Lines) - .setCount(data.indices().size()) - .addVertexBuffer(*vertexBuffer, 0, - typename Shaders::VertexColor::Position(), - typename Shaders::VertexColor::Color4{}) - .setIndexBuffer(*indexBuffer, 0, GL::MeshIndexType::UnsignedByte, 0, data.positions(0).size()); - ResourceManager::instance().set(_mesh.key(), mesh, ResourceDataState::Final, ResourcePolicy::Manual); + if(!_mesh) ResourceManager::instance().set(_mesh.key(), MeshTools::compile(Renderer::meshData())); } /* To avoid deleting pointers to incomplete type on destruction of Resource members */ diff --git a/src/Magnum/DebugTools/ObjectRenderer.h b/src/Magnum/DebugTools/ObjectRenderer.h index 7dabd1a8b..c2d36e0a2 100644 --- a/src/Magnum/DebugTools/ObjectRenderer.h +++ b/src/Magnum/DebugTools/ObjectRenderer.h @@ -111,7 +111,6 @@ template class MAGNUM_DEBUGTOOLS_EXPORT ObjectRenderer: Resource _options; Resource> _shader; Resource _mesh; - Resource _vertexBuffer, _indexBuffer; }; /** @brief Two-dimensional object renderer */