From aefb7c3030a20b3da846d37ad1691c6c6b5420c1 Mon Sep 17 00:00:00 2001 From: Erik Broberg Date: Tue, 14 Jun 2016 21:05:08 -0400 Subject: [PATCH] Add methods for debug rendering of box faces and box edges --- modules/debugging/rendering/debugrenderer.cpp | 55 +++++++++++++++++-- modules/debugging/rendering/debugrenderer.h | 11 ++-- .../debugging/rendering/debugshader_fs.glsl | 10 ++-- .../debugging/rendering/debugshader_vs.glsl | 11 ++-- 4 files changed, 68 insertions(+), 19 deletions(-) diff --git a/modules/debugging/rendering/debugrenderer.cpp b/modules/debugging/rendering/debugrenderer.cpp index a9c3c39788..26ca3c1909 100644 --- a/modules/debugging/rendering/debugrenderer.cpp +++ b/modules/debugging/rendering/debugrenderer.cpp @@ -45,11 +45,11 @@ namespace openspace { DebugRenderer::DebugRenderer() { - _programObject = OsEng.renderEngine().buildRenderProgram( + _programObject = std::shared_ptr(OsEng.renderEngine().buildRenderProgram( "BasicDebugShader", "${MODULE_DEBUGGING}/rendering/debugshader_vs.glsl", "${MODULE_DEBUGGING}/rendering/debugshader_fs.glsl" - ); + )); } @@ -65,7 +65,7 @@ namespace openspace { return _singleton; } - void DebugRenderer::renderScreenSpace(const std::vector& clippingSpacePoints, GLenum mode, glm::vec4 rgba) const { + void DebugRenderer::renderVertices(const std::vector& clippingSpacePoints, GLenum mode, glm::vec4 rgba) const { if (clippingSpacePoints.size() == 0) { return; } @@ -94,7 +94,7 @@ namespace openspace { GL_STATIC_DRAW); glEnableVertexAttribArray(0); - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(clippingSpacePoints[0]), 0); + glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, sizeof(clippingSpacePoints[0]), 0); // uniforms @@ -105,8 +105,6 @@ namespace openspace { if (error != GL_NO_ERROR) { LERROR(error); } - - glBindVertexArray(0); @@ -115,5 +113,50 @@ namespace openspace { _programObject->deactivate(); } + + void DebugRenderer::renderBoxFaces(const std::vector& clippingSpaceBoxCorners, glm::vec4 rgba) const { + const std::vector& V = clippingSpaceBoxCorners; + std::vector T; + + // add "sides" + T.push_back(V[0]); T.push_back(V[1]); T.push_back(V[4]); + T.push_back(V[5]); T.push_back(V[4]); T.push_back(V[1]); + + T.push_back(V[1]); T.push_back(V[3]); T.push_back(V[5]); + T.push_back(V[7]); T.push_back(V[5]); T.push_back(V[3]); + + T.push_back(V[3]); T.push_back(V[6]); T.push_back(V[7]); + T.push_back(V[6]); T.push_back(V[3]); T.push_back(V[2]); + + T.push_back(V[2]); T.push_back(V[4]); T.push_back(V[6]); + T.push_back(V[4]); T.push_back(V[2]); T.push_back(V[0]); + + // add "top" + T.push_back(V[5]); T.push_back(V[6]); T.push_back(V[7]); + T.push_back(V[6]); T.push_back(V[5]); T.push_back(V[4]); + + // add bottom + T.push_back(V[0]); T.push_back(V[1]); T.push_back(V[2]); + T.push_back(V[3]); T.push_back(V[2]); T.push_back(V[1]); + + renderVertices(T, GL_TRIANGLES, rgba); + } + + void DebugRenderer::renderBoxEdges(const std::vector& clippingSpacePoints, glm::vec4 rgba) const { + const std::vector& V = clippingSpacePoints; + std::vector lineVertices; + for (size_t i = 0; i < 4; i++) { + lineVertices.push_back(V[2 * i]); + lineVertices.push_back(V[2 * i + 1]); + lineVertices.push_back(V[i]); + lineVertices.push_back(V[i + 4]); + } + lineVertices.push_back(V[0]); lineVertices.push_back(V[2]); + 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); + } + } // namespace openspace \ No newline at end of file diff --git a/modules/debugging/rendering/debugrenderer.h b/modules/debugging/rendering/debugrenderer.h index 90f63176c9..0906b033e6 100644 --- a/modules/debugging/rendering/debugrenderer.h +++ b/modules/debugging/rendering/debugrenderer.h @@ -40,7 +40,9 @@ namespace openspace { using namespace ghoul::opengl; - + /** + A helper class for quick rendering of vertices clipping space + */ class DebugRenderer { public: DebugRenderer(); @@ -48,14 +50,15 @@ namespace openspace { static std::shared_ptr ref(); - void renderScreenSpace(const std::vector& clippingSpacePoints, GLenum mode, glm::vec4 rgb = {1,0,0,1}) const; - + void renderVertices(const std::vector& clippingSpacePoints, GLenum mode, glm::vec4 rgba = {1, 0, 0, 1}) const; + void renderBoxFaces(const std::vector& clippingSpacePoints, glm::vec4 rgba = { 1, 0, 0, 1 }) const; + void renderBoxEdges(const std::vector& clippingSpacePoints, glm::vec4 rgba = { 1, 0, 0, 1 }) const; private: - std::unique_ptr _programObject; + std::shared_ptr _programObject; static std::shared_ptr _singleton; diff --git a/modules/debugging/rendering/debugshader_fs.glsl b/modules/debugging/rendering/debugshader_fs.glsl index 0b169d998c..c5ba8102c8 100644 --- a/modules/debugging/rendering/debugshader_fs.glsl +++ b/modules/debugging/rendering/debugshader_fs.glsl @@ -22,17 +22,17 @@ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * ****************************************************************************************/ -#include "fragment.glsl" -#include "PowerScaling/powerScalingMath.hglsl" +#include "PowerScaling/powerScaling_fs.hglsl" -in vec3 fs_vertexPosition; +#include "fragment.glsl" + +in vec4 fs_vertexPosition; uniform vec4 color; Fragment getFragment(){ Fragment frag; frag.color = color; - vec4 p = z_normalization(vec4(fs_vertexPosition, 1)); - frag.depth = p.z; + frag.depth = fs_vertexPosition.w; return frag; } \ No newline at end of file diff --git a/modules/debugging/rendering/debugshader_vs.glsl b/modules/debugging/rendering/debugshader_vs.glsl index 87fe7854e8..88be6de0f5 100644 --- a/modules/debugging/rendering/debugshader_vs.glsl +++ b/modules/debugging/rendering/debugshader_vs.glsl @@ -23,11 +23,14 @@ ****************************************************************************************/ #version __CONTEXT__ -layout(location = 0) in vec3 vertexPosition; +#include "PowerScaling/powerScaling_vs.hglsl" -out vec3 fs_vertexPosition; +layout(location = 0) in vec4 vertexPositionClippingSpace; + + +out vec4 fs_vertexPosition; void main(){ - fs_vertexPosition = vertexPosition; - gl_Position = vec4(vertexPosition, 1); + fs_vertexPosition = z_normalization(vertexPositionClippingSpace); + gl_Position = fs_vertexPosition; } \ No newline at end of file