Fix sky objects not rendering with ogles (#7598)
authorstujones11 <stujones111@gmail.com>
Sat, 4 Aug 2018 17:46:39 +0000 (18:46 +0100)
committerParamat <paramat@users.noreply.github.com>
Sat, 4 Aug 2018 17:46:39 +0000 (18:46 +0100)
src/sky.cpp

index 6ac27afc4f473bf3857bd3fdb77cf0f7e97c25a2..fb4f135a591cecdb92599454b5c4ce7b5e9e239e 100644 (file)
@@ -44,7 +44,11 @@ Sky::Sky(s32 id, ITextureSource *tsrc):
 
        video::SMaterial mat;
        mat.Lighting = false;
+#ifdef __ANDROID__
+       mat.ZBuffer = video::ECFN_DISABLED;
+#else
        mat.ZBuffer = video::ECFN_NEVER;
+#endif
        mat.ZWriteEnable = false;
        mat.AntiAliasing = 0;
        mat.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE;
@@ -449,6 +453,34 @@ void Sky::render()
                        video::SColor starcolor(255, f * 90, f * 90, f * 90);
                        if (starcolor.getBlue() < m_skycolor.getBlue())
                                break;
+#ifdef __ANDROID__
+                       u16 indices[SKY_STAR_COUNT * 3];
+                       video::S3DVertex vertices[SKY_STAR_COUNT * 3];
+                       for (u32 i = 0; i < SKY_STAR_COUNT; i++) {
+                               indices[i * 3 + 0] = i * 3 + 0;
+                               indices[i * 3 + 1] = i * 3 + 1;
+                               indices[i * 3 + 2] = i * 3 + 2;
+                               v3f p = m_stars[i];
+                               core::CMatrix4<f32> a;
+                               a.buildRotateFromTo(v3f(0, 1, 0), v3f(d, 1 + d, -d / 2));
+                               v3f p1 = p;
+                               a.rotateVect(p1);
+                               a.buildRotateFromTo(v3f(0, 1, 0), v3f(d, 1 - d, d / 2));
+                               v3f p2 = p;
+                               a.rotateVect(p2);
+                               p.rotateXYBy(wicked_time_of_day * 360 - 90);
+                               p1.rotateXYBy(wicked_time_of_day * 360 - 90);
+                               p2.rotateXYBy(wicked_time_of_day * 360 - 90);
+                               vertices[i * 3 + 0].Pos = p;
+                               vertices[i * 3 + 0].Color = starcolor;
+                               vertices[i * 3 + 1].Pos = p1;
+                               vertices[i * 3 + 1].Color = starcolor;
+                               vertices[i * 3 + 2].Pos = p2;
+                               vertices[i * 3 + 2].Color = starcolor;
+                       }
+                       driver->drawIndexedTriangleList(vertices, SKY_STAR_COUNT * 3,
+                                       indices, SKY_STAR_COUNT);
+#else
                        u16 indices[SKY_STAR_COUNT * 4];
                        video::S3DVertex vertices[SKY_STAR_COUNT * 4];
                        for (u32 i = 0; i < SKY_STAR_COUNT; i++) {
@@ -483,6 +515,7 @@ void Sky::render()
                        driver->drawVertexPrimitiveList(vertices, SKY_STAR_COUNT * 4,
                                indices, SKY_STAR_COUNT, video::EVT_STANDARD,
                                scene::EPT_QUADS, video::EIT_16BIT);
+#endif
                } while(false);
 
                // Draw far cloudy fog thing below east and west horizons