Move debug rendering of chunk to separate function

This commit is contained in:
Erik Broberg
2016-06-21 21:27:11 -04:00
parent 911cf7a77d
commit ed92baefbd
2 changed files with 29 additions and 25 deletions
+28 -24
View File
@@ -157,29 +157,7 @@ namespace openspace {
const Chunk& chunk = chunkNode.getChunk();
if (chunkNode.isLeaf() && chunk.isVisible()) {
_renderer->renderChunk(chunkNode.getChunk(), data);
const std::vector<glm::dvec4> modelSpaceCorners = chunk.getBoundingPolyhedronCorners();
std::vector<glm::vec4> clippingSpaceCorners(8);
AABB3 screenSpaceBounds;
for (size_t i = 0; i < 8; i++) {
const vec4& clippingSpaceCorner = mvp * modelSpaceCorners[i];
clippingSpaceCorners[i] = clippingSpaceCorner;
vec3 screenSpaceCorner = (1.0f / clippingSpaceCorner.w) * clippingSpaceCorner.xyz();
screenSpaceBounds.expand(screenSpaceCorner);
}
unsigned int colorBits = 1 + chunk.index().level % 6;
vec4 color = vec4(colorBits & 1, colorBits & 2, colorBits & 4, 0.3);
if (debugOptions.showChunkBounds) {
DebugRenderer::ref()->renderNiceBox(clippingSpaceCorners, color);
}
if (debugOptions.showChunkAABB) {
auto& screenSpacePoints = DebugRenderer::ref()->verticesFor(screenSpaceBounds);
DebugRenderer::ref()->renderNiceBox(screenSpacePoints, color);
}
debugRenderChunk(chunk, mvp);
}
};
@@ -187,7 +165,6 @@ namespace openspace {
_rightRoot->reverseBreadthFirst(renderJob);
if (_savedCamera != nullptr) {
DebugRenderer::ref()->renderCameraFrustum(data, *_savedCamera);
}
@@ -204,6 +181,33 @@ namespace openspace {
}
void ChunkedLodGlobe::debugRenderChunk(const Chunk& chunk, const glm::dmat4& mvp) const {
if (debugOptions.showChunkBounds || debugOptions.showChunkAABB) {
const std::vector<glm::dvec4> modelSpaceCorners = chunk.getBoundingPolyhedronCorners();
std::vector<glm::vec4> clippingSpaceCorners(8);
AABB3 screenSpaceBounds;
for (size_t i = 0; i < 8; i++) {
const vec4& clippingSpaceCorner = mvp * modelSpaceCorners[i];
clippingSpaceCorners[i] = clippingSpaceCorner;
vec3 screenSpaceCorner = (1.0f / clippingSpaceCorner.w) * clippingSpaceCorner.xyz();
screenSpaceBounds.expand(screenSpaceCorner);
}
unsigned int colorBits = 1 + chunk.index().level % 6;
vec4 color = vec4(colorBits & 1, colorBits & 2, colorBits & 4, 0.3);
if (debugOptions.showChunkBounds) {
DebugRenderer::ref()->renderNiceBox(clippingSpaceCorners, color);
}
if (debugOptions.showChunkAABB) {
auto& screenSpacePoints = DebugRenderer::ref()->verticesFor(screenSpaceBounds);
DebugRenderer::ref()->renderNiceBox(screenSpacePoints, color);
}
}
}
void ChunkedLodGlobe::update(const UpdateData& data) {
_renderer->update();
}
@@ -118,7 +118,7 @@ namespace openspace {
private:
void debugRenderChunks(const RenderData& data) const;
void debugRenderChunk(const Chunk& chunk, const glm::dmat4& data) const;
// Covers all negative longitudes
std::unique_ptr<ChunkNode> _leftRoot;