Skip to content

Commit dcf58a3

Browse files
authoredDec 1, 2018
Fix sky bugs when using sun or moon textures (#7918)
Reverts the render order change of commit ce2d33e
1 parent 5f1cd55 commit dcf58a3

File tree

1 file changed

+77
-77
lines changed

1 file changed

+77
-77
lines changed
 

‎src/client/sky.cpp

+77-77
Original file line numberDiff line numberDiff line change
@@ -290,83 +290,6 @@ void Sky::render()
290290
driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2);
291291
}
292292

293-
// Draw stars
294-
do {
295-
driver->setMaterial(m_materials[1]);
296-
float starbrightness = MYMAX(0, MYMIN(1,
297-
(0.285 - fabs(wicked_time_of_day < 0.5 ?
298-
wicked_time_of_day : (1.0 - wicked_time_of_day))) * 10));
299-
float f = starbrightness;
300-
float d = 0.007/2;
301-
video::SColor starcolor(255, f * 90, f * 90, f * 90);
302-
if (starcolor.getBlue() < m_skycolor.getBlue())
303-
break;
304-
#ifdef __ANDROID__
305-
u16 indices[SKY_STAR_COUNT * 3];
306-
video::S3DVertex vertices[SKY_STAR_COUNT * 3];
307-
for (u32 i = 0; i < SKY_STAR_COUNT; i++) {
308-
indices[i * 3 + 0] = i * 3 + 0;
309-
indices[i * 3 + 1] = i * 3 + 1;
310-
indices[i * 3 + 2] = i * 3 + 2;
311-
v3f r = m_stars[i];
312-
core::CMatrix4<f32> a;
313-
a.buildRotateFromTo(v3f(0, 1, 0), r);
314-
v3f p = v3f(-d, 1, -d);
315-
v3f p1 = v3f(d, 1, 0);
316-
v3f p2 = v3f(-d, 1, d);
317-
a.rotateVect(p);
318-
a.rotateVect(p1);
319-
a.rotateVect(p2);
320-
p.rotateXYBy(wicked_time_of_day * 360 - 90);
321-
p1.rotateXYBy(wicked_time_of_day * 360 - 90);
322-
p2.rotateXYBy(wicked_time_of_day * 360 - 90);
323-
vertices[i * 3 + 0].Pos = p;
324-
vertices[i * 3 + 0].Color = starcolor;
325-
vertices[i * 3 + 1].Pos = p1;
326-
vertices[i * 3 + 1].Color = starcolor;
327-
vertices[i * 3 + 2].Pos = p2;
328-
vertices[i * 3 + 2].Color = starcolor;
329-
}
330-
driver->drawIndexedTriangleList(vertices, SKY_STAR_COUNT * 3,
331-
indices, SKY_STAR_COUNT);
332-
#else
333-
u16 indices[SKY_STAR_COUNT * 4];
334-
video::S3DVertex vertices[SKY_STAR_COUNT * 4];
335-
for (u32 i = 0; i < SKY_STAR_COUNT; i++) {
336-
indices[i * 4 + 0] = i * 4 + 0;
337-
indices[i * 4 + 1] = i * 4 + 1;
338-
indices[i * 4 + 2] = i * 4 + 2;
339-
indices[i * 4 + 3] = i * 4 + 3;
340-
v3f r = m_stars[i];
341-
core::CMatrix4<f32> a;
342-
a.buildRotateFromTo(v3f(0, 1, 0), r);
343-
v3f p = v3f(-d, 1, -d);
344-
v3f p1 = v3f( d, 1, -d);
345-
v3f p2 = v3f( d, 1, d);
346-
v3f p3 = v3f(-d, 1, d);
347-
a.rotateVect(p);
348-
a.rotateVect(p1);
349-
a.rotateVect(p2);
350-
a.rotateVect(p3);
351-
p.rotateXYBy(wicked_time_of_day * 360 - 90);
352-
p1.rotateXYBy(wicked_time_of_day * 360 - 90);
353-
p2.rotateXYBy(wicked_time_of_day * 360 - 90);
354-
p3.rotateXYBy(wicked_time_of_day * 360 - 90);
355-
vertices[i * 4 + 0].Pos = p;
356-
vertices[i * 4 + 0].Color = starcolor;
357-
vertices[i * 4 + 1].Pos = p1;
358-
vertices[i * 4 + 1].Color = starcolor;
359-
vertices[i * 4 + 2].Pos = p2;
360-
vertices[i * 4 + 2].Color = starcolor;
361-
vertices[i * 4 + 3].Pos = p3;
362-
vertices[i * 4 + 3].Color = starcolor;
363-
}
364-
driver->drawVertexPrimitiveList(vertices, SKY_STAR_COUNT * 4,
365-
indices, SKY_STAR_COUNT, video::EVT_STANDARD,
366-
scene::EPT_QUADS, video::EIT_16BIT);
367-
#endif
368-
} while(false);
369-
370293
// Draw sun
371294
if (wicked_time_of_day > 0.15 && wicked_time_of_day < 0.85) {
372295
if (!m_sun_texture) {
@@ -519,6 +442,83 @@ void Sky::render()
519442
}
520443
}
521444

445+
// Draw stars
446+
do {
447+
driver->setMaterial(m_materials[1]);
448+
float starbrightness = MYMAX(0, MYMIN(1,
449+
(0.285 - fabs(wicked_time_of_day < 0.5 ?
450+
wicked_time_of_day : (1.0 - wicked_time_of_day))) * 10));
451+
float f = starbrightness;
452+
float d = 0.007/2;
453+
video::SColor starcolor(255, f * 90, f * 90, f * 90);
454+
if (starcolor.getBlue() < m_skycolor.getBlue())
455+
break;
456+
#ifdef __ANDROID__
457+
u16 indices[SKY_STAR_COUNT * 3];
458+
video::S3DVertex vertices[SKY_STAR_COUNT * 3];
459+
for (u32 i = 0; i < SKY_STAR_COUNT; i++) {
460+
indices[i * 3 + 0] = i * 3 + 0;
461+
indices[i * 3 + 1] = i * 3 + 1;
462+
indices[i * 3 + 2] = i * 3 + 2;
463+
v3f r = m_stars[i];
464+
core::CMatrix4<f32> a;
465+
a.buildRotateFromTo(v3f(0, 1, 0), r);
466+
v3f p = v3f(-d, 1, -d);
467+
v3f p1 = v3f(d, 1, 0);
468+
v3f p2 = v3f(-d, 1, d);
469+
a.rotateVect(p);
470+
a.rotateVect(p1);
471+
a.rotateVect(p2);
472+
p.rotateXYBy(wicked_time_of_day * 360 - 90);
473+
p1.rotateXYBy(wicked_time_of_day * 360 - 90);
474+
p2.rotateXYBy(wicked_time_of_day * 360 - 90);
475+
vertices[i * 3 + 0].Pos = p;
476+
vertices[i * 3 + 0].Color = starcolor;
477+
vertices[i * 3 + 1].Pos = p1;
478+
vertices[i * 3 + 1].Color = starcolor;
479+
vertices[i * 3 + 2].Pos = p2;
480+
vertices[i * 3 + 2].Color = starcolor;
481+
}
482+
driver->drawIndexedTriangleList(vertices, SKY_STAR_COUNT * 3,
483+
indices, SKY_STAR_COUNT);
484+
#else
485+
u16 indices[SKY_STAR_COUNT * 4];
486+
video::S3DVertex vertices[SKY_STAR_COUNT * 4];
487+
for (u32 i = 0; i < SKY_STAR_COUNT; i++) {
488+
indices[i * 4 + 0] = i * 4 + 0;
489+
indices[i * 4 + 1] = i * 4 + 1;
490+
indices[i * 4 + 2] = i * 4 + 2;
491+
indices[i * 4 + 3] = i * 4 + 3;
492+
v3f r = m_stars[i];
493+
core::CMatrix4<f32> a;
494+
a.buildRotateFromTo(v3f(0, 1, 0), r);
495+
v3f p = v3f(-d, 1, -d);
496+
v3f p1 = v3f( d, 1, -d);
497+
v3f p2 = v3f( d, 1, d);
498+
v3f p3 = v3f(-d, 1, d);
499+
a.rotateVect(p);
500+
a.rotateVect(p1);
501+
a.rotateVect(p2);
502+
a.rotateVect(p3);
503+
p.rotateXYBy(wicked_time_of_day * 360 - 90);
504+
p1.rotateXYBy(wicked_time_of_day * 360 - 90);
505+
p2.rotateXYBy(wicked_time_of_day * 360 - 90);
506+
p3.rotateXYBy(wicked_time_of_day * 360 - 90);
507+
vertices[i * 4 + 0].Pos = p;
508+
vertices[i * 4 + 0].Color = starcolor;
509+
vertices[i * 4 + 1].Pos = p1;
510+
vertices[i * 4 + 1].Color = starcolor;
511+
vertices[i * 4 + 2].Pos = p2;
512+
vertices[i * 4 + 2].Color = starcolor;
513+
vertices[i * 4 + 3].Pos = p3;
514+
vertices[i * 4 + 3].Color = starcolor;
515+
}
516+
driver->drawVertexPrimitiveList(vertices, SKY_STAR_COUNT * 4,
517+
indices, SKY_STAR_COUNT, video::EVT_STANDARD,
518+
scene::EPT_QUADS, video::EIT_16BIT);
519+
#endif
520+
} while(false);
521+
522522
// Draw far cloudy fog thing below east and west horizons
523523
for (u32 j = 0; j < 2; j++) {
524524
video::SColor c = cloudyfogcolor;

0 commit comments

Comments
 (0)
Please sign in to comment.