]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - r_sky.c
fix for EF_FLAME and lots of other bugs with 16bit/8bit fields (modelindex, frame...
[xonotic/darkplaces.git] / r_sky.c
diff --git a/r_sky.c b/r_sky.c
index 5a4ddf1b2a659fb7cfa9c44bcbff35cdf193f7e9..de4fb6cb5419d54fa185cb7bf6900aba7cf99efe 100644 (file)
--- a/r_sky.c
+++ b/r_sky.c
@@ -94,9 +94,9 @@ static char *suf[6] = {"rt", "bk", "lf", "ft", "up", "dn"};
 static rtexture_t *skyboxside[6];
 int R_SetSkyBox(char *sky)
 {
-       int             i;
-       char    name[1024];
-       byte*   image_rgba;
+       int i;
+       char name[1024];
+       qbyte *image_rgba;
 
        if (strcmp(sky, skyname) == 0) // no change
                return true;
@@ -231,13 +231,6 @@ static void R_SkyBox(void)
        R_SkyBoxPolyVec(2, 0, 1, -1, -1, -1);
        R_SkyBoxPolyVec(3, 0, 0, -1,  1, -1);
        R_Mesh_Draw(&m);
-       R_Mesh_Render();
-       if (r_skyflush.integer)
-               glFlush();
-       // clear the zbuffer that was used while rendering the sky
-       glClear(GL_DEPTH_BUFFER_BIT);
-       if (r_skyflush.integer)
-               glFlush();
 }
 
 static float skysphere[33*33*5];
@@ -342,28 +335,24 @@ static void R_SkySphere(void)
        m.tex[0] = R_GetTexture(alphaskytexture);
        m.texcoords[0] = tex2;
        R_Mesh_Draw(&m);
-       R_Mesh_Render();
-       if (r_skyflush.integer)
-               glFlush();
-       // clear the zbuffer that was used while rendering the sky
-       glClear(GL_DEPTH_BUFFER_BIT);
-       if (r_skyflush.integer)
-               glFlush();
 }
 
 void R_Sky(void)
 {
-       if (skyrendersphere)
-               R_SkySphere();
-       else if (skyrenderbox)
-               R_SkyBox();
+       if (skyrendermasked)
+       {
+               if (skyrendersphere)
+                       R_SkySphere();
+               else if (skyrenderbox)
+                       R_SkyBox();
+
+               // clear the zbuffer that was used while rendering the sky
+               R_Mesh_ClearDepth();
+       }
 }
 
 //===============================================================
 
-static byte skyupperlayerpixels[128*128*4];
-static byte skylowerlayerpixels[128*128*4];
-
 /*
 =============
 R_InitSky
@@ -371,13 +360,11 @@ R_InitSky
 A sky texture is 256*128, with the right side being a masked overlay
 ==============
 */
-void R_InitSky (byte *src, int bytesperpixel)
+void R_InitSky (qbyte *src, int bytesperpixel)
 {
-       int                     i, j, p;
-       unsigned        trans[128*128];
-       unsigned        transpix;
-       int                     r, g, b;
-       unsigned        *rgba;
+       int i, j, p, r, g, b;
+       qbyte skyupperlayerpixels[128*128*4], skylowerlayerpixels[128*128*4];
+       unsigned trans[128*128], transpix, *rgba;
 
        strcpy(skyworldname, loadmodel->name);
 
@@ -405,29 +392,29 @@ void R_InitSky (byte *src, int bytesperpixel)
                                p = src[i*256 + j + 128];
                                rgba = &d_8to24table[p];
                                trans[(i*128) + j] = *rgba;
-                               r += ((byte *)rgba)[0];
-                               g += ((byte *)rgba)[1];
-                               b += ((byte *)rgba)[2];
+                               r += ((qbyte *)rgba)[0];
+                               g += ((qbyte *)rgba)[1];
+                               b += ((qbyte *)rgba)[2];
                        }
                }
 
-               ((byte *)&transpix)[0] = r/(128*128);
-               ((byte *)&transpix)[1] = g/(128*128);
-               ((byte *)&transpix)[2] = b/(128*128);
-               ((byte *)&transpix)[3] = 0;
+               ((qbyte *)&transpix)[0] = r/(128*128);
+               ((qbyte *)&transpix)[1] = g/(128*128);
+               ((qbyte *)&transpix)[2] = b/(128*128);
+               ((qbyte *)&transpix)[3] = 0;
        }
 
        memcpy(skyupperlayerpixels, trans, 128*128*4);
 
-       solidskytexture = R_LoadTexture (skytexturepool, "sky_solidtexture", 128, 128, (byte *) trans, TEXTYPE_RGBA, TEXF_PRECACHE);
+       solidskytexture = R_LoadTexture (skytexturepool, "sky_solidtexture", 128, 128, (qbyte *) trans, TEXTYPE_RGBA, TEXF_PRECACHE);
        /*
        for (i = 0;i < 128*128;i++)
        {
-               ((byte *)&trans[i])[0] >>= 1;
-               ((byte *)&trans[i])[1] >>= 1;
-               ((byte *)&trans[i])[2] >>= 1;
+               ((qbyte *)&trans[i])[0] >>= 1;
+               ((qbyte *)&trans[i])[1] >>= 1;
+               ((qbyte *)&trans[i])[2] >>= 1;
        }
-       solidskytexture_half = R_LoadTexture (skytexturepool, "sky_solidtexture_half", 128, 128, (byte *) trans, TEXTYPE_RGBA, TEXF_PRECACHE);
+       solidskytexture_half = R_LoadTexture (skytexturepool, "sky_solidtexture_half", 128, 128, (qbyte *) trans, TEXTYPE_RGBA, TEXF_PRECACHE);
        */
 
        if (bytesperpixel == 4)
@@ -453,14 +440,14 @@ void R_InitSky (byte *src, int bytesperpixel)
 
        memcpy(skylowerlayerpixels, trans, 128*128*4);
 
-       alphaskytexture = R_LoadTexture (skytexturepool, "sky_alphatexture", 128, 128, (byte *) trans, TEXTYPE_RGBA, TEXF_ALPHA | TEXF_PRECACHE);
+       alphaskytexture = R_LoadTexture (skytexturepool, "sky_alphatexture", 128, 128, (qbyte *) trans, TEXTYPE_RGBA, TEXF_ALPHA | TEXF_PRECACHE);
        /*
        for (i = 0;i < 128*128;i++)
        {
-               ((byte *)&trans[i])[0] >>= 1;
-               ((byte *)&trans[i])[1] >>= 1;
-               ((byte *)&trans[i])[2] >>= 1;
+               ((qbyte *)&trans[i])[0] >>= 1;
+               ((qbyte *)&trans[i])[1] >>= 1;
+               ((qbyte *)&trans[i])[2] >>= 1;
        }
-       alphaskytexture_half = R_LoadTexture (skytexturepool, "sky_alphatexture_half", 128, 128, (byte *) trans, TEXTYPE_RGBA, TEXF_ALPHA | TEXF_PRECACHE);
+       alphaskytexture_half = R_LoadTexture (skytexturepool, "sky_alphatexture_half", 128, 128, (qbyte *) trans, TEXTYPE_RGBA, TEXF_ALPHA | TEXF_PRECACHE);
        */
 }