diff options
author | Guillaume Chereau <guillaume@noctua-software.com> | 2015-01-28 15:20:53 +0800 |
---|---|---|
committer | Guillaume Chereau <guillaume@noctua-software.com> | 2015-01-28 15:20:53 +0800 |
commit | 9528e135fc93efecd31cda3334f50b15daafed13 (patch) | |
tree | 6b101448213399787ad6f3aaf9dbfabef463f32b | |
parent | 0457e3ed10aceb6bb9da3862525fc86e52d80ab9 (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.cpp | 20 | ||||
-rw-r--r-- | src/core/modules/SolarSystem.cpp | 2 |
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); |