summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Chereau <guillaume@noctua-software.com>2015-01-28 15:20:53 +0800
committerGuillaume Chereau <guillaume@noctua-software.com>2015-01-28 15:20:53 +0800
commit9528e135fc93efecd31cda3334f50b15daafed13 (patch)
tree6b101448213399787ad6f3aaf9dbfabef463f32b
parent0457e3ed10aceb6bb9da3862525fc86e52d80ab9 (diff)
Always enable depth buffer test when rendering the solar systemfix-orbit-lines
This makes the orbit lines properly pass behind the planets. However, this might introduce some other bugs, and maybe performance penalty. I haven't tested much.
-rw-r--r--src/core/modules/Planet.cpp20
-rw-r--r--src/core/modules/SolarSystem.cpp2
2 files changed, 12 insertions, 10 deletions
diff --git a/src/core/modules/Planet.cpp b/src/core/modules/Planet.cpp
index d3f0967c29..ff73e10358 100644
--- a/src/core/modules/Planet.cpp
+++ b/src/core/modules/Planet.cpp
@@ -1652,12 +1652,8 @@ void Planet::drawSphere(StelPainter* painter, float screenSz, bool drawOnlyRing)
GL(shader->setAttributeArray(shaderVars->texCoord, (const GLfloat*)model.texCoordArr.constData(), 2));
GL(shader->enableAttributeArray(shaderVars->texCoord));
- if (rings)
- {
- glDepthMask(GL_TRUE);
- glClear(GL_DEPTH_BUFFER_BIT);
- glEnable(GL_DEPTH_TEST);
- }
+ glDepthMask(GL_TRUE);
+ glEnable(GL_DEPTH_TEST);
if (!drawOnlyRing)
GL(glDrawElements(GL_TRIANGLES, model.indiceArr.size(), GL_UNSIGNED_SHORT, model.indiceArr.constData()));
@@ -1765,6 +1761,9 @@ void Planet::drawOrbit(const StelCore* core)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
+ glDepthMask(GL_TRUE);
+ glEnable(GL_DEPTH_TEST);
+
sPainter.setColor(orbitColor[0], orbitColor[1], orbitColor[2], orbitFader.getInterstate());
Vec3d onscreen;
// special case - use current Planet position as center vertex so that draws
@@ -1783,19 +1782,20 @@ void Planet::drawOrbit(const StelCore* core)
{
vertexArray.append(onscreen[0]);
vertexArray.append(onscreen[1]);
+ vertexArray.append(onscreen[2]);
}
else if (!vertexArray.isEmpty())
{
- sPainter.setVertexPointer(2, GL_FLOAT, vertexArray.constData());
- sPainter.drawFromArray(StelPainter::LineStrip, vertexArray.size()/2, 0, false);
+ sPainter.setVertexPointer(3, GL_FLOAT, vertexArray.constData());
+ sPainter.drawFromArray(StelPainter::LineStrip, vertexArray.size()/3, 0, false);
vertexArray.clear();
}
}
orbit[ORBIT_SEGMENTS/2]=savePos;
if (!vertexArray.isEmpty())
{
- sPainter.setVertexPointer(2, GL_FLOAT, vertexArray.constData());
- sPainter.drawFromArray(StelPainter::LineStrip, vertexArray.size()/2, 0, false);
+ sPainter.setVertexPointer(3, GL_FLOAT, vertexArray.constData());
+ sPainter.drawFromArray(StelPainter::LineStrip, vertexArray.size()/3, 0, false);
}
sPainter.enableClientStates(false);
}
diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp
index 7777485921..62a0615022 100644
--- a/src/core/modules/SolarSystem.cpp
+++ b/src/core/modules/SolarSystem.cpp
@@ -1097,6 +1097,8 @@ void SolarSystem::draw(StelCore* core)
5.f+(core->getSkyDrawer()->getLimitMagnitude()-5.f)*1.2f) +(labelsAmount-3.f)*1.2f;
// Draw the elements
+ glDepthMask(GL_TRUE);
+ glClear(GL_DEPTH_BUFFER_BIT);
foreach (const PlanetP& p, systemPlanets)
{
p->draw(core, maxMagLabel, planetNameFont);