Solve crashing in deinitialization of debug renderer.

This commit is contained in:
kbladin
2016-06-30 18:12:21 -04:00
parent 4bec28d611
commit e8cfd8eee4
4 changed files with 27 additions and 37 deletions

View File

@@ -41,33 +41,37 @@ namespace {
namespace openspace {
std::shared_ptr<DebugRenderer> DebugRenderer::_reference = nullptr;
DebugRenderer* DebugRenderer::_reference = nullptr;
DebugRenderer::DebugRenderer() {
_programObject = std::shared_ptr<ProgramObject>(OsEng.renderEngine().buildRenderProgram(
_programObject = OsEng.renderEngine().buildRenderProgram(
"BasicDebugShader",
"${MODULE_DEBUGGING}/rendering/debugshader_vs.glsl",
"${MODULE_DEBUGGING}/rendering/debugshader_fs.glsl"
));
);
}
DebugRenderer::DebugRenderer(std::shared_ptr<ProgramObject> programObject)
: _programObject(programObject)
DebugRenderer::DebugRenderer(std::unique_ptr<ProgramObject> programObject)
: _programObject(std::move(programObject))
{
// nothing to do
}
std::shared_ptr<DebugRenderer> DebugRenderer::ref() {
DebugRenderer::~DebugRenderer()
{
}
const DebugRenderer& DebugRenderer::ref() {
if (_reference == nullptr) {
try {
_reference = std::make_shared<DebugRenderer>();
_reference = new DebugRenderer();
}
catch (const ShaderObject::ShaderCompileError& e) {
LERROR(e.what());
}
}
return _reference;
return *_reference;
}
void DebugRenderer::renderVertices(const Vertices& clippingSpacePoints, GLenum mode, RGBA rgba) const {
@@ -163,17 +167,17 @@ namespace openspace {
lineVertices.push_back(V[1]); lineVertices.push_back(V[3]);
lineVertices.push_back(V[4]); lineVertices.push_back(V[6]);
lineVertices.push_back(V[5]); lineVertices.push_back(V[7]);
DebugRenderer::ref()->renderVertices(lineVertices, GL_LINES, rgba);
DebugRenderer::ref().renderVertices(lineVertices, GL_LINES, rgba);
}
void DebugRenderer::renderNiceBox(const Vertices& clippingSpaceBoxCorners, RGBA rgba) const {
renderBoxFaces(clippingSpaceBoxCorners, rgba);
glLineWidth(4.0f);
DebugRenderer::ref()->renderBoxEdges(clippingSpaceBoxCorners, rgba);
DebugRenderer::ref().renderBoxEdges(clippingSpaceBoxCorners, rgba);
glPointSize(10.0f);
DebugRenderer::ref()->renderVertices(clippingSpaceBoxCorners, GL_POINTS, rgba);
DebugRenderer::ref().renderVertices(clippingSpaceBoxCorners, GL_POINTS, rgba);
}
void DebugRenderer::renderCameraFrustum(const RenderData& data, const Camera& otherCamera, RGBA rgba) const {

View File

@@ -43,7 +43,6 @@
namespace openspace {
using namespace ghoul::opengl;
/**
A helper class for quick rendering of vertices IN clipping space.
@@ -54,11 +53,9 @@ namespace openspace {
*/
class DebugRenderer {
public:
typedef std::vector<glm::vec4> Vertices;
typedef glm::vec4 RGBA;
/**
* Consider using ref() before creating a new default instance!
*/
@@ -67,15 +64,13 @@ namespace openspace {
/**
* Instantiate a new DebugRenderer with a custom shader program
*/
DebugRenderer(std::shared_ptr<ProgramObject> programObject);
DebugRenderer(std::unique_ptr<ProgramObject> programObject);
~DebugRenderer();
/**
* Access the static reference
*/
static std::shared_ptr<DebugRenderer> ref();
static const DebugRenderer& ref();
/**
* Render the vector of clipping space points in the specified mode and color.
@@ -127,8 +122,6 @@ namespace openspace {
*/
void renderNiceBox(const Vertices& clippingSpaceBoxCorners, RGBA rgba = { 1, 0, 0, 0.3 }) const;
/**
* Input arguments:
* 1. const RenderData& data: defines position and camera that we will see the
@@ -143,7 +136,6 @@ namespace openspace {
*/
void renderAABB2(const AABB2& screenSpaceAABB, RGBA rgba = { 1, 1, 1, 0.3 }) const;
/**
* Takes a AABB3 in screen space and returns vertices representing the corner points
* of the AABB. The ordering of the corner points is compatible with the box rendering
@@ -151,17 +143,13 @@ namespace openspace {
*/
const Vertices verticesFor(const AABB3& screenSpaceAABB) const;
protected:
std::unique_ptr<ProgramObject> _programObject;
std::shared_ptr<ProgramObject> _programObject;
static std::shared_ptr<DebugRenderer> _reference;
// A raw pointer for the reason that it should not be deleted by the static
// destructor and the normal destructor. This class has ownership
static DebugRenderer* _reference;
};
} // namespace openspace
#endif // __DEBUG_RENDERER_H__