X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=r_sky.c;h=deec343915c83d07bc49406215345ae01786f461;hb=cddb6e423ca52ee78671ce68527b75ef880425f4;hp=72da6c915eac9797e823231363e59f53e4515ecc;hpb=c4ee1bbcc6b2f917465f07269ad09942bbf40849;p=xonotic%2Fdarkplaces.git diff --git a/r_sky.c b/r_sky.c index 72da6c91..deec3439 100644 --- a/r_sky.c +++ b/r_sky.c @@ -1,3 +1,4 @@ + #include "quakedef.h" void LoadSky_f(void); @@ -231,27 +232,29 @@ 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]; -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; @@ -265,17 +268,17 @@ static void skyspherecalc(float *sphere, float dx, float dy, float dz) } } 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++; } @@ -289,7 +292,7 @@ static void skyspherearrays(float *vert, float *tex, float *tex2, float *source, 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; @@ -306,7 +309,7 @@ static void skyspherearrays(float *vert, float *tex, float *tex2, float *source, 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) @@ -318,8 +321,8 @@ static void R_SkySphere(void) 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]); @@ -342,21 +345,20 @@ 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(); + } } //=============================================================== @@ -415,15 +417,6 @@ void R_InitSky (qbyte *src, int bytesperpixel) 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) { @@ -449,13 +442,5 @@ void R_InitSky (qbyte *src, int bytesperpixel) 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); - */ } +