Fixed unforms problems when eclipses are activated. (#797)

* Fixed unforms problems when eclipses are activated.
This commit is contained in:
Jonathas Costa
2019-03-24 08:21:07 -04:00
committed by Alexander Bock
parent 55979fa2c8
commit 9325e7fac3
2 changed files with 23 additions and 12 deletions
+17 -11
View File
@@ -989,7 +989,7 @@ void RenderableGlobe::renderChunkGlobally(const Chunk& chunk, const RenderData&
if (_generalProperties.eclipseShadowsEnabled &&
!_ellipsoid.shadowConfigurationArray().empty())
{
calculateEclipseShadows(program, data);
calculateEclipseShadows(program, data, ShadowCompType::GLOBAL_SHADOW);
}
glEnable(GL_DEPTH_TEST);
@@ -1103,7 +1103,7 @@ void RenderableGlobe::renderChunkLocally(const Chunk& chunk, const RenderData& d
if (_generalProperties.eclipseShadowsEnabled &&
!_ellipsoid.shadowConfigurationArray().empty())
{
calculateEclipseShadows(program, data);
calculateEclipseShadows(program, data, ShadowCompType::LOCAL_SHADOW);
}
glEnable(GL_DEPTH_TEST);
@@ -1632,7 +1632,7 @@ float RenderableGlobe::getHeight(const glm::dvec3& position) const {
}
void RenderableGlobe::calculateEclipseShadows(ghoul::opengl::ProgramObject& programObject,
const RenderData& data)
const RenderData& data, ShadowCompType stype)
{
constexpr const double KM_TO_M = 1000.0;
@@ -1747,16 +1747,22 @@ void RenderableGlobe::calculateEclipseShadows(ghoul::opengl::ProgramObject& prog
counter++;
}
programObject.setUniform(
"inverseViewTransform",
glm::inverse(data.camera.combinedViewMatrix())
);
programObject.setUniform("modelTransform", _cachedModelTransform);
programObject.setUniform(
if (stype == ShadowCompType::LOCAL_SHADOW) {
programObject.setUniform(
"inverseViewTransform",
glm::inverse(data.camera.combinedViewMatrix())
);
}
else if (stype == ShadowCompType::GLOBAL_SHADOW) {
programObject.setUniform("modelTransform", _cachedModelTransform);
}
// JCC: Removed in favor of: #define USE_ECLIPSE_HARD_SHADOWS #{useEclipseHardShadows}
/*programObject.setUniform(
"hardShadows",
_generalProperties.eclipseHardShadows
);
programObject.setUniform("calculateEclipseShadows", true);
);*/
//programObject.setUniform("calculateEclipseShadows", true);
}
//////////////////////////////////////////////////////////////////////////////////////////
+6 -1
View File
@@ -68,6 +68,11 @@ struct Chunk {
std::array<Chunk*, 4> children = { { nullptr, nullptr, nullptr, nullptr } };
};
enum class ShadowCompType {
GLOBAL_SHADOW,
LOCAL_SHADOW
};
/**
* A RenderableGlobe is a globe modeled as an ellipsoid using a chunked LOD algorithm for
* rendering.
@@ -192,7 +197,7 @@ private:
void calculateEclipseShadows(ghoul::opengl::ProgramObject& programObject,
const RenderData& data);
const RenderData& data, ShadowCompType stype);
void setCommonUniforms(ghoul::opengl::ProgramObject& programObject,
const Chunk& chunk, const RenderData& data);