Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion data/shaders/planet.frag
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,24 @@ void main()
//apply texture-colored rimlight
//litColor.xyz = clamp( litColor.xyz + vec3(outgas), 0.0, 1.0);

lowp vec4 texColor = texture2D(tex, texc);
lowp vec4 texColor;
#ifdef RINGS_SUPPORT
if(isRing)
{
float radius = length(texc);
float s = (radius - innerRadius) / (outerRadius - innerRadius);
vec2 texCoord = vec2(s, 0.5);
texColor = texture2D(tex, texCoord);
// Guard against poor quality mipmap filtering (e.g. Mesa with NPOT textures).
if(radius > outerRadius)
texColor = vec4(0);
}
else
#endif
{
texColor = texture2D(tex, texc);
}

#ifdef IS_MOON
// Undo the extraneous gamma encoded in the texture.
// FIXME: ideally, we want all the calculations to be done in linear scale,
Expand Down
5 changes: 3 additions & 2 deletions src/core/modules/Planet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3754,13 +3754,12 @@ void sRing(Ring3DModel* model, const float rMin, const float rMax, unsigned shor
float r = rMin;
for (unsigned short int i=0; i<=stacks; ++i)
{
const float tex_r0 = (r-rMin)/(rMax-rMin);
unsigned short int j;
for (j=0,cos_sin_theta_p=cos_sin_theta; j<=slices; ++j,cos_sin_theta_p+=2)
{
x = r*cos_sin_theta_p[0];
y = r*cos_sin_theta_p[1];
model->texCoordArr << tex_r0 << 0.5f;
model->texCoordArr << x << y;
model->vertexArr << x << y << 0.f;
}
r+=dr;
Expand Down Expand Up @@ -4125,6 +4124,8 @@ void Planet::drawSphere(StelPainter* painter, float screenRd, bool drawOnlyRing)
GL(ringPlanetShaderProgram->setUniformValue(ringPlanetShaderVars.isRing, true));
GL(ringPlanetShaderProgram->setUniformValue(ringPlanetShaderVars.tex, 2));
GL(ringPlanetShaderProgram->setUniformValue(ringPlanetShaderVars.ringS, 1));
GL(ringPlanetShaderProgram->setUniformValue(ringPlanetShaderVars.outerRadius, rings->radiusMax));
GL(ringPlanetShaderProgram->setUniformValue(ringPlanetShaderVars.innerRadius, rings->radiusMin));

QMatrix4x4 shadowCandidatesData;
const Vec4d position = rData.mTarget * rData.modelMatrix.getColumn(3);
Expand Down