Skip to content

Commit ac265bd

Browse files
committed
Make StelPainterLight light a local variable
Global makes it hard to understand where the variable is used, modified, etc. And static doesn't seem to make any sense since this variable is only created in a function that does lots of other things, so its constructor shouldn't affect performance.
1 parent f409f27 commit ac265bd

2 files changed

Lines changed: 30 additions & 30 deletions

File tree

src/core/modules/Planet.cpp

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3931,15 +3931,6 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon
39313931
return;
39323932
}
39333933

3934-
class StelPainterLight
3935-
{
3936-
public:
3937-
Vec3d position;
3938-
Vec3f diffuse;
3939-
Vec3f ambient;
3940-
};
3941-
static StelPainterLight light;
3942-
39433934
void Planet::PlanetShaderVars::initLocations(QOpenGLShaderProgram* p)
39443935
{
39453936
GL(p->bind());
@@ -4514,6 +4505,8 @@ void Planet::draw3dModel(StelCore* core, StelProjector::ModelViewTranformP trans
45144505
}
45154506
#endif
45164507

4508+
StelPainterLight light;
4509+
45174510
// Set the main source of light to be the sun.
45184511
// This must be the aberrated sun! (Mostly theoretically, this displacement seems more important for the shadows, done elsewhere...)
45194512
Vec3d sunPos = ssm->getSun()->getEclipticPos() + ssm->getSun()->getAberrationPush();
@@ -4564,20 +4557,20 @@ void Planet::draw3dModel(StelCore* core, StelProjector::ModelViewTranformP trans
45644557

45654558
if(ssm->getFlagUseObjModels() && !objModelPath.isEmpty())
45664559
{
4567-
if(!drawObjModel(&sPainter, screenRd))
4560+
if(!drawObjModel(light, &sPainter, screenRd))
45684561
{
4569-
drawSphere(&sPainter, screenRd, drawOnlyRing);
4562+
drawSphere(light, &sPainter, screenRd, drawOnlyRing);
45704563
}
45714564
}
45724565
else if (!survey || survey.colors->getInterstate() < 1.0f)
45734566
{
4574-
drawSphere(&sPainter, screenRd, drawOnlyRing);
4567+
drawSphere(light, &sPainter, screenRd, drawOnlyRing);
45754568
}
45764569

45774570
if (survey && survey.colors->getInterstate() > 0.0f)
45784571
{
4579-
drawSurvey(core, &sPainter);
4580-
drawSphere(&sPainter, screenRd, true);
4572+
drawSurvey(light, core, &sPainter);
4573+
drawSphere(light, &sPainter, screenRd, true);
45814574
}
45824575

45834576

@@ -4788,7 +4781,7 @@ void Planet::computeModelMatrix(Mat4d &result, bool solarEclipseCase) const
47884781
}
47894782

47904783
Planet::RenderData Planet::setCommonShaderUniforms(const StelPainter& painter, QOpenGLShaderProgram* shader, const PlanetShaderVars& shaderVars,
4791-
const bool hasNormalMap, const bool hasHorizonMap)
4784+
const StelPainterLight& light, const bool hasNormalMap, const bool hasHorizonMap)
47924785
{
47934786
RenderData data;
47944787

@@ -4878,7 +4871,7 @@ Planet::RenderData Planet::setCommonShaderUniforms(const StelPainter& painter, Q
48784871
return data;
48794872
}
48804873

4881-
void Planet::drawSphere(StelPainter* painter, float screenRd, bool drawOnlyRing)
4874+
void Planet::drawSphere(const StelPainterLight& light, StelPainter* painter, float screenRd, bool drawOnlyRing)
48824875
{
48834876
const float sphereScaleF=static_cast<float>(sphereScale);
48844877
if (horizonMap)
@@ -4968,7 +4961,7 @@ void Planet::drawSphere(StelPainter* painter, float screenRd, bool drawOnlyRing)
49684961

49694962
GL(shader->bind());
49704963

4971-
RenderData rData = setCommonShaderUniforms(*painter,shader,*shaderVars, isMoon,isMoon);
4964+
RenderData rData = setCommonShaderUniforms(*painter,shader,*shaderVars,light, isMoon,isMoon);
49724965
if(this==ssm->getSun())
49734966
{
49744967
const auto color = painter->getColor();
@@ -5190,7 +5183,7 @@ void Planet::drawSphere(StelPainter* painter, float screenRd, bool drawOnlyRing)
51905183
}
51915184

51925185
// Draw the Hips survey.
5193-
void Planet::drawSurvey(StelCore* core, StelPainter* painter)
5186+
void Planet::drawSurvey(const StelPainterLight& light, StelCore* core, StelPainter* painter)
51945187
{
51955188
if (!Planet::initShader()) return;
51965189
static SolarSystem* ssm = GETSTELMODULE(SolarSystem);
@@ -5218,7 +5211,7 @@ void Planet::drawSurvey(StelCore* core, StelPainter* painter)
52185211
}
52195212

52205213
GL(shader->bind());
5221-
RenderData rData = setCommonShaderUniforms(*painter, shader, *shaderVars, !!survey.normals, !!survey.horizons);
5214+
RenderData rData = setCommonShaderUniforms(*painter, shader, *shaderVars, light, !!survey.normals, !!survey.horizons);
52225215
QVector<Vec3f> projectedVertsArray;
52235216
QVector<Vec3f> vertsArray;
52245217
const double angle = 2 * getSpheroidAngularRadius(core) * M_PI_180;
@@ -5400,7 +5393,7 @@ bool Planet::ensureObjLoaded()
54005393
return true;
54015394
}
54025395

5403-
bool Planet::drawObjModel(StelPainter *painter, float screenRd)
5396+
bool Planet::drawObjModel(const StelPainterLight& light, StelPainter *painter, float screenRd)
54045397
{
54055398
Q_UNUSED(screenRd) //screen size unused for now, use it for LOD or something?
54065399

@@ -5419,7 +5412,7 @@ bool Planet::drawObjModel(StelPainter *painter, float screenRd)
54195412
QMatrix4x4 shadowMatrix;
54205413
bool shadowmapping = false;
54215414
if(ssm->getFlagShowObjSelfShadows())
5422-
shadowmapping = drawObjShadowMap(painter,shadowMatrix);
5415+
shadowmapping = drawObjShadowMap(light.position, painter, shadowMatrix);
54235416

54245417
if(objModel->texture)
54255418
{
@@ -5512,7 +5505,7 @@ bool Planet::drawObjModel(StelPainter *painter, float screenRd)
55125505
GL(shd->enableAttributeArray("vertex"));
55135506
objModel->projPosBuffer->release();
55145507

5515-
setCommonShaderUniforms(*painter,shd,*shdVars,false,false);
5508+
setCommonShaderUniforms(*painter,shd,*shdVars,light,false,false);
55165509

55175510
//draw that model using the array wrapper
55185511
objModel->arr->draw();
@@ -5527,7 +5520,7 @@ bool Planet::drawObjModel(StelPainter *painter, float screenRd)
55275520
return true;
55285521
}
55295522

5530-
bool Planet::drawObjShadowMap(StelPainter *painter, QMatrix4x4& shadowMatrix)
5523+
bool Planet::drawObjShadowMap(const Vec3d& lightPosition, StelPainter *painter, QMatrix4x4& shadowMatrix)
55315524
{
55325525
if(!shadowInitialized)
55335526
if(!initFBO())
@@ -5543,7 +5536,7 @@ bool Planet::drawObjShadowMap(StelPainter *painter, QMatrix4x4& shadowMatrix)
55435536
//computeModelMatrix(modelMatrix);
55445537
//Mat4d worldToModel = modelMatrix.inverse();
55455538

5546-
Vec3d lightDir = light.position;
5539+
Vec3d lightDir = lightPosition;
55475540
projector->getModelViewTransform()->backward(lightDir);
55485541
//Vec3d lightDir(worldToModel[12], worldToModel[13], worldToModel[14]);
55495542
lightDir.normalize();

src/core/modules/Planet.hpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,13 @@ class Planet : public StelObject
740740

741741
static StelTextureSP texEarthShadow; // for lunar eclipses
742742

743+
struct StelPainterLight
744+
{
745+
Vec3d position;
746+
Vec3f diffuse;
747+
Vec3f ambient;
748+
};
749+
743750
//! Used in drawSphere() to compute shadows, and inside a function to derive eclipse sizes.
744751
//! @param solarEclipseCase For reasons currently unknown we must handle solar eclipses as special case.
745752
void computeModelMatrix(Mat4d &result, bool solarEclipseCase) const;
@@ -762,19 +769,19 @@ class Planet : public StelObject
762769
//! Draws the OBJ model, assuming it is available
763770
//! @param screenRd radius in screen pixels.
764771
//! @return false if the model can currently not be drawn (not loaded)
765-
bool drawObjModel(StelPainter* painter, float screenRd);
772+
bool drawObjModel(const StelPainterLight& light, StelPainter* painter, float screenRd);
766773

767-
bool drawObjShadowMap(StelPainter* painter, QMatrix4x4 &shadowMatrix);
774+
bool drawObjShadowMap(const Vec3d& lightPosition, StelPainter *painter, QMatrix4x4& shadowMatrix);
768775

769776
//! Starts the OBJ loading process, if it has not been done yet.
770777
//! Returns true when the OBJ is ready to draw
771778
bool ensureObjLoaded();
772779

773780
//! Draw the 3D sphere
774-
void drawSphere(StelPainter* painter, float screenRd, bool drawOnlyRing=false);
781+
void drawSphere(const StelPainterLight& light, StelPainter* painter, float screenRd, bool drawOnlyRing=false);
775782

776783
//! Draw the Hips survey.
777-
void drawSurvey(StelCore* core, StelPainter* painter);
784+
void drawSurvey(const StelPainterLight& light, StelCore* core, StelPainter* painter);
778785

779786
//! Draw the circle and name of the Planet
780787
void drawHints(const StelCore* core, StelPainter &sPainter, const QFont& planetNameFont);
@@ -960,8 +967,8 @@ class Planet : public StelObject
960967
};
961968

962969
//! Calculates and uploads the common shader uniforms (projection matrix, texture, lighting&shadow data)
963-
RenderData setCommonShaderUniforms(const StelPainter &painter, QOpenGLShaderProgram* shader,
964-
const PlanetShaderVars& shaderVars, bool hasNormalMap, bool hasHorizonMap);
970+
RenderData setCommonShaderUniforms(const StelPainter& painter, QOpenGLShaderProgram* shader, const PlanetShaderVars& shaderVars,
971+
const StelPainterLight& light, bool hasNormalMap, bool hasHorizonMap);
965972

966973
static PlanetShaderVars planetShaderVars;
967974
static QOpenGLShaderProgram* planetShaderProgram;

0 commit comments

Comments
 (0)