Browse Source

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.
pull/317/head
Vladimír Vondruš 7 years ago
parent
commit
304cd6f036
  1. 27
      src/Magnum/DebugTools/ForceRenderer.cpp
  2. 1
      src/Magnum/DebugTools/ForceRenderer.h
  3. 35
      src/Magnum/DebugTools/ObjectRenderer.cpp
  4. 1
      src/Magnum/DebugTools/ObjectRenderer.h

27
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<UnsignedInt dimensions> ForceRenderer<dimensions>::ForceRenderer(SceneG
/* Mesh and vertex buffer */
_mesh = ResourceManager::instance().get<GL::Mesh>("force");
_vertexBuffer = ResourceManager::instance().get<GL::Buffer>("force-vertices");
_indexBuffer = ResourceManager::instance().get<GL::Buffer>("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<dimensions>::Position(Shaders::Flat<dimensions>::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 */

1
src/Magnum/DebugTools/ForceRenderer.h

@ -140,7 +140,6 @@ template<UnsignedInt dimensions> class MAGNUM_DEBUGTOOLS_EXPORT ForceRenderer: p
Resource<ForceRendererOptions> _options;
Resource<GL::AbstractShaderProgram, Shaders::Flat<dimensions>> _shader;
Resource<GL::Mesh> _mesh;
Resource<GL::Buffer> _vertexBuffer, _indexBuffer;
};
/** @brief Two-dimensional force renderer */

35
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<UnsignedInt> 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<UnsignedInt dimensions> ObjectRenderer<dimensions>::ObjectRenderer(Scen
_shader = ResourceManager::instance().get<GL::AbstractShaderProgram, Shaders::VertexColor<dimensions>>(Renderer<dimensions>::shader());
if(!_shader) ResourceManager::instance().set<GL::AbstractShaderProgram>(_shader.key(), new Shaders::VertexColor<dimensions>);
/* Mesh and vertex buffer */
/* Mesh */
_mesh = ResourceManager::instance().get<GL::Mesh>(Renderer<dimensions>::mesh());
_vertexBuffer = ResourceManager::instance().get<GL::Buffer>(Renderer<dimensions>::vertexBuffer());
_indexBuffer = ResourceManager::instance().get<GL::Buffer>(Renderer<dimensions>::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<dimensions>::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<UnsignedByte>(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<dimensions>::Position(),
typename Shaders::VertexColor<dimensions>::Color4{})
.setIndexBuffer(*indexBuffer, 0, GL::MeshIndexType::UnsignedByte, 0, data.positions(0).size());
ResourceManager::instance().set<GL::Mesh>(_mesh.key(), mesh, ResourceDataState::Final, ResourcePolicy::Manual);
if(!_mesh) ResourceManager::instance().set<GL::Mesh>(_mesh.key(), MeshTools::compile(Renderer<dimensions>::meshData()));
}
/* To avoid deleting pointers to incomplete type on destruction of Resource members */

1
src/Magnum/DebugTools/ObjectRenderer.h

@ -111,7 +111,6 @@ template<UnsignedInt dimensions> class MAGNUM_DEBUGTOOLS_EXPORT ObjectRenderer:
Resource<ObjectRendererOptions> _options;
Resource<GL::AbstractShaderProgram, Shaders::VertexColor<dimensions>> _shader;
Resource<GL::Mesh> _mesh;
Resource<GL::Buffer> _vertexBuffer, _indexBuffer;
};
/** @brief Two-dimensional object renderer */

Loading…
Cancel
Save