From a485d3d6de4eb5b1dbb7cda4413597f631e884c0 Mon Sep 17 00:00:00 2001 From: samcake Date: Mon, 21 Sep 2015 15:21:48 -0700 Subject: [PATCH] Fixing the rendering of ProceduralSkybox --- interface/src/Application.cpp | 2 +- libraries/model/src/model/Skybox.h | 4 +++ .../src/procedural/ProceduralSkybox.cpp | 26 ++++++++++--------- .../src/procedural/ProceduralSkybox.h | 1 + 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 798b1ab9a2..36b56bfa07 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3507,7 +3507,7 @@ namespace render { skybox = skyStage->getSkybox(); if (skybox) { - model::Skybox::render(batch, *(Application::getInstance()->getDisplayViewFrustum()), *skybox); + skybox->render(batch, *(Application::getInstance()->getDisplayViewFrustum())); } } } diff --git a/libraries/model/src/model/Skybox.h b/libraries/model/src/model/Skybox.h index fb20aadbac..e9f95afa16 100755 --- a/libraries/model/src/model/Skybox.h +++ b/libraries/model/src/model/Skybox.h @@ -35,6 +35,10 @@ public: void setCubemap(const gpu::TexturePointer& cubemap); const gpu::TexturePointer& getCubemap() const { return _cubemap; } + virtual void render(gpu::Batch& batch, const ViewFrustum& frustum) const { + render(batch, frustum, (*this)); + } + static void render(gpu::Batch& batch, const ViewFrustum& frustum, const Skybox& skybox); protected: diff --git a/libraries/procedural/src/procedural/ProceduralSkybox.cpp b/libraries/procedural/src/procedural/ProceduralSkybox.cpp index 0f1e0536c1..8d34f0e7e5 100644 --- a/libraries/procedural/src/procedural/ProceduralSkybox.cpp +++ b/libraries/procedural/src/procedural/ProceduralSkybox.cpp @@ -36,11 +36,19 @@ void ProceduralSkybox::setProcedural(const ProceduralPointer& procedural) { } } +void ProceduralSkybox::render(gpu::Batch& batch, const ViewFrustum& frustum) const { + ProceduralSkybox::render(batch, frustum, (*this)); +} + void ProceduralSkybox::render(gpu::Batch& batch, const ViewFrustum& viewFrustum, const ProceduralSkybox& skybox) { + if (!(skybox._procedural)) { + Skybox::render(batch, viewFrustum, skybox); + } + static gpu::BufferPointer theBuffer; static gpu::Stream::FormatPointer theFormat; - if (skybox._procedural || skybox.getCubemap()) { + if (skybox._procedural && skybox._procedural->_enabled && skybox._procedural->ready()) { if (!theBuffer) { const float CLIP = 1.0f; const glm::vec2 vertices[4] = { { -CLIP, -CLIP }, { CLIP, -CLIP }, { -CLIP, CLIP }, { CLIP, CLIP } }; @@ -60,18 +68,12 @@ void ProceduralSkybox::render(gpu::Batch& batch, const ViewFrustum& viewFrustum, batch.setInputBuffer(gpu::Stream::POSITION, theBuffer, 0, 8); batch.setInputFormat(theFormat); - if (skybox._procedural && skybox._procedural->_enabled && skybox._procedural->ready()) { - if (skybox.getCubemap() && skybox.getCubemap()->isDefined()) { - batch.setResourceTexture(0, skybox.getCubemap()); - } - - skybox._procedural->prepare(batch, glm::vec3(1)); - batch.draw(gpu::TRIANGLE_STRIP, 4); + if (skybox.getCubemap() && skybox.getCubemap()->isDefined()) { + batch.setResourceTexture(0, skybox.getCubemap()); } - } else { - // skybox has no cubemap, just clear the color buffer - auto color = skybox.getColor(); - batch.clearFramebuffer(gpu::Framebuffer::BUFFER_COLOR0, glm::vec4(color, 0.0f), 0.0f, 0, true); + + skybox._procedural->prepare(batch, glm::vec3(1)); + batch.draw(gpu::TRIANGLE_STRIP, 4); } } diff --git a/libraries/procedural/src/procedural/ProceduralSkybox.h b/libraries/procedural/src/procedural/ProceduralSkybox.h index c7543dad93..057a1ccc74 100644 --- a/libraries/procedural/src/procedural/ProceduralSkybox.h +++ b/libraries/procedural/src/procedural/ProceduralSkybox.h @@ -28,6 +28,7 @@ public: void setProcedural(const ProceduralPointer& procedural); + virtual void render(gpu::Batch& batch, const ViewFrustum& frustum) const; static void render(gpu::Batch& batch, const ViewFrustum& frustum, const ProceduralSkybox& skybox); protected: