-/*
-=============
-R_InitSky
-
-A sky texture is 256*128, with the right side being a masked overlay
-==============
-*/
-void R_InitSky (qbyte *src, int bytesperpixel)
-{
- int i, j, p, r, g, b;
- qbyte skyupperlayerpixels[128*128*4], skylowerlayerpixels[128*128*4];
- unsigned trans[128*128], transpix, *rgba;
- union
- {
- int i;
- qbyte b[4];
- }
- transpixunion;
-
- skyavailable_quake = true;
-
- // flush skytexturepool so we won't build up a leak from uploading textures multiple times
- R_FreeTexturePool(&skytexturepool);
- skytexturepool = R_AllocTexturePool();
- solidskytexture = NULL;
- alphaskytexture = NULL;
-
- if (bytesperpixel == 4)
- {
- transpixunion.i = 0;
- for (i = 0;i < 128;i++)
- for (j = 0;j < 128;j++)
- trans[(i*128) + j] = ((unsigned *)src)[i*256+j+128];
- }
- else
- {
- // make an average value for the back to avoid
- // a fringe on the top level
- r = g = b = 0;
- for (i=0 ; i<128 ; i++)
- {
- for (j=0 ; j<128 ; j++)
- {
- p = src[i*256 + j + 128];
- rgba = &palette_complete[p];
- trans[(i*128) + j] = *rgba;
- r += ((qbyte *)rgba)[0];
- g += ((qbyte *)rgba)[1];
- b += ((qbyte *)rgba)[2];
- }
- }
-
- transpixunion.i = 0;
- transpixunion.b[0] = r/(128*128);
- transpixunion.b[1] = g/(128*128);
- transpixunion.b[2] = b/(128*128);
- transpixunion.b[3] = 0;
- }
- transpix = transpixunion.i;
-
- memcpy(skyupperlayerpixels, trans, 128*128*4);
-
- solidskytexture = R_LoadTexture2D(skytexturepool, "sky_solidtexture", 128, 128, (qbyte *) trans, TEXTYPE_RGBA, TEXF_PRECACHE, NULL);
-
- if (bytesperpixel == 4)
- {
- for (i = 0;i < 128;i++)
- for (j = 0;j < 128;j++)
- trans[(i*128) + j] = ((unsigned *)src)[i*256+j];
- }
- else
- {
- for (i=0 ; i<128 ; i++)
- {
- for (j=0 ; j<128 ; j++)
- {
- p = src[i*256 + j];
- if (p == 0)
- trans[(i*128) + j] = transpix;
- else
- trans[(i*128) + j] = palette_complete[p];
- }
- }
- }
-
- memcpy(skylowerlayerpixels, trans, 128*128*4);
-
- alphaskytexture = R_LoadTexture2D(skytexturepool, "sky_alphatexture", 128, 128, (qbyte *) trans, TEXTYPE_RGBA, TEXF_ALPHA | TEXF_PRECACHE, NULL);
-}
-
-void R_ResetQuakeSky(void)
-{
- skyavailable_quake = false;
-}
-