From 0025c8833bff5618236b229d8d3f4770167a1d15 Mon Sep 17 00:00:00 2001 From: Allanis <allanis.saracraft.studios@gmail.com> Date: Fri, 24 Nov 2017 22:05:54 +0000 Subject: [PATCH] [Add] Make display lists of planets within range. Nice FPS improvment. :D --- src/planet.cpp | 23 +++++++++++++++++------ src/planet.h | 1 + 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/planet.cpp b/src/planet.cpp index 932f85d..bdf2164 100644 --- a/src/planet.cpp +++ b/src/planet.cpp @@ -12,6 +12,7 @@ Planet::Planet(StarSystem::SBody* sbody) : Body() { this->sbody = *sbody; this->sbody.children.clear(); this->sbody.parent = 0; + crudDList = 0; } Planet::~Planet(void) { @@ -566,6 +567,10 @@ void Planet::Render(const Frame* a_camFrame) { glColor3f(1, 1, 1); if(apparent_size < 0.001) { + if(crudDList) { + glDeleteLists(crudDList, 1); + crudDList = 0; + } glDisable(GL_LIGHTING); glPointSize(1.0); glBegin(GL_POINTS); @@ -573,13 +578,19 @@ void Planet::Render(const Frame* a_camFrame) { glEnd(); glEnable(GL_LIGHTING); } else { - glScalef(rad, rad, rad); - /* This is a rather brittle test.. */ - if(sbody.type < StarSystem::TYPE_PLANET_DWARF) { - DrawGasGiant(); - } else { - DrawRockyPlanet(); + if(!crudDList) { + crudDList = glGenLists(1); + glNewList(crudDList, GL_COMPILE); + /* This is a rather brittle test.. */ + if(sbody.type < StarSystem::TYPE_PLANET_DWARF) { + DrawGasGiant(); + } else { + DrawRockyPlanet(); + } + glEndList(); } + glScalef(rad, rad, rad); + glCallList(crudDList); glClear(GL_DEPTH_BUFFER_BIT); } glPopMatrix(); diff --git a/src/planet.h b/src/planet.h index cff2fa1..05778cb 100644 --- a/src/planet.h +++ b/src/planet.h @@ -22,5 +22,6 @@ private: double radius; dGeomID geom; StarSystem::SBody sbody; + GLuint crudDList; };