+
#include "quakedef.h"
void LoadSky_f(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];
-static int skysphereindices[32*32*6];
+#define skygridx 16
+#define skygridx1 (skygridx + 1)
+#define skygridxrecip (1.0f / (skygridx))
+#define skygridy 32
+#define skygridy1 (skygridy + 1)
+#define skygridyrecip (1.0f / (skygridy))
+
+static float skysphere[skygridx1*skygridy1*5];
+static int skysphereindices[skygridx*skygridy*6];
static void skyspherecalc(float *sphere, float dx, float dy, float dz)
{
float a, b, x, ax, ay, v[3], length;
int i, j, *index;
- for (a = 0;a <= 1;a += (1.0 / 32.0))
+ for (j = 0;j <= skygridy;j++)
{
+ a = j * skygridyrecip;
ax = cos(a * M_PI * 2);
ay = -sin(a * M_PI * 2);
- for (b = 0;b <= 1;b += (1.0 / 32.0))
+ for (i = 0;i <= skygridx;i++)
{
+ b = i * skygridxrecip;
x = cos(b * M_PI * 2);
v[0] = ax*x * dx;
v[1] = ay*x * dy;
}
}
index = skysphereindices;
- for (j = 0;j < 32;j++)
+ for (j = 0;j < skygridy;j++)
{
- for (i = 0;i < 32;i++)
+ for (i = 0;i < skygridx;i++)
{
- *index++ = j * 33 + i;
- *index++ = j * 33 + i + 1;
- *index++ = (j + 1) * 33 + i;
+ *index++ = j * skygridx1 + i;
+ *index++ = j * skygridx1 + i + 1;
+ *index++ = (j + 1) * skygridx1 + i;
- *index++ = j * 33 + i + 1;
- *index++ = (j + 1) * 33 + i + 1;
- *index++ = (j + 1) * 33 + i;
+ *index++ = j * skygridx1 + i + 1;
+ *index++ = (j + 1) * skygridx1 + i + 1;
+ *index++ = (j + 1) * skygridx1 + i;
}
i++;
}
t = tex;
t2 = tex2;
radius = r_farclip - 8;
- for (i = 0;i < (33*33);i++)
+ for (i = 0;i < (skygridx1*skygridy1);i++)
{
*t++ = source[0] + s;
*t++ = source[1] + s;
static void R_SkySphere(void)
{
float speedscale, speedscale2;
- float vert[33*33*4], tex[33*33*2], tex2[33*33*2];
+ float vert[skygridx1*skygridy1*4], tex[skygridx1*skygridy1*2], tex2[skygridx1*skygridy1*2];
static qboolean skysphereinitialized = false;
rmeshinfo_t m;
if (!skysphereinitialized)
m.transparent = false;
m.blendfunc1 = GL_ONE;
m.blendfunc2 = GL_ZERO;
- m.numtriangles = 32*32*2;
- m.numverts = 33*33;
+ m.numtriangles = skygridx*skygridy*2;
+ m.numverts = skygridx1*skygridy1;
m.index = skysphereindices;
m.vertex = vert;
m.vertexstep = sizeof(float[4]);
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();
+ }
}
//===============================================================
memcpy(skyupperlayerpixels, trans, 128*128*4);
solidskytexture = R_LoadTexture (skytexturepool, "sky_solidtexture", 128, 128, (qbyte *) trans, TEXTYPE_RGBA, TEXF_PRECACHE);
- /*
- for (i = 0;i < 128*128;i++)
- {
- ((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, (qbyte *) trans, TEXTYPE_RGBA, TEXF_PRECACHE);
- */
if (bytesperpixel == 4)
{
memcpy(skylowerlayerpixels, trans, 128*128*4);
alphaskytexture = R_LoadTexture (skytexturepool, "sky_alphatexture", 128, 128, (qbyte *) trans, TEXTYPE_RGBA, TEXF_ALPHA | TEXF_PRECACHE);
- /*
- for (i = 0;i < 128*128;i++)
- {
- ((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, (qbyte *) trans, TEXTYPE_RGBA, TEXF_ALPHA | TEXF_PRECACHE);
- */
}
+