X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2Fmiscfunctions.qc;h=684224c710100cc64101425a1b3de9c6df0bcc41;hp=360305601a8b71cfdd345436f213f9eafb5e50ee;hb=0c5b06b8592d343353d624764c6b440edb44ebc3;hpb=2bddfb42fdbb3318aa319d228d8c99adcc90b128 diff --git a/qcsrc/client/miscfunctions.qc b/qcsrc/client/miscfunctions.qc index 360305601..684224c71 100644 --- a/qcsrc/client/miscfunctions.qc +++ b/qcsrc/client/miscfunctions.qc @@ -382,7 +382,7 @@ float PolyDrawModelSurface(entity e, float i_s) for(i_t = 0; i_t < n_t; ++i_t) { tri = getsurfacetriangle(e, i_s, i_t); - R_BeginPolygon(tex, 0); + R_BeginPolygon(tex, 0, false); R_PolygonVertex(getsurfacepoint(e, i_s, tri.x), getsurfacepointattribute(e, i_s, tri.x, SPA_TEXCOORDS0), '1 1 1', 1); R_PolygonVertex(getsurfacepoint(e, i_s, tri.y), getsurfacepointattribute(e, i_s, tri.y, SPA_TEXCOORDS0), '1 1 1', 1); R_PolygonVertex(getsurfacepoint(e, i_s, tri.z), getsurfacepointattribute(e, i_s, tri.z, SPA_TEXCOORDS0), '1 1 1', 1); @@ -400,7 +400,6 @@ void PolyDrawModel(entity e) void DrawCircleClippedPic(vector centre, float radi, string pic, float f, vector rgb, float a, float drawflag) { - float d; vector ringsize, v, t; ringsize = radi * '1 1 0'; centre = HUD_Shift(centre); @@ -415,7 +414,7 @@ void DrawCircleClippedPic(vector centre, float radi, string pic, float f, vector if(f >= 1) { // draw full rectangle - R_BeginPolygon(pic, drawflag); + R_BeginPolygon(pic, drawflag, true); v = centre; t = '0.5 0.5 0'; v.x += 0.5 * ringsize.x; t += '0.5 0.5 0'; R_PolygonVertex(v, t, rgb, a); @@ -432,23 +431,12 @@ void DrawCircleClippedPic(vector centre, float radi, string pic, float f, vector v.y -= 0.5 * ringsize.y; t -= '0.5 -0.5 0'; R_PolygonVertex(v, t, rgb, a); R_EndPolygon(); - - d = q - 1; - if(d > 0) - { - R_BeginPolygon(pic, drawflag); - v = centre; t = '0.5 0.5 0'; - R_PolygonVertex(v, t, rgb, a); - - v = centre; t = '0.5 0.5 0'; - v.x += 0.5 * ringsize.x; t += '0.5 0.5 0'; - R_PolygonVertex(v, t, rgb, a); - } + return; // Complete rectangle, nothing more needed. } else if(f > 0.75) { - // draw upper and first triangle - R_BeginPolygon(pic, drawflag); + // draw upper half in full + R_BeginPolygon(pic, drawflag, true); v = centre; t = '0.5 0.5 0'; v.x += 0.5 * ringsize.x; t += '0.5 0.5 0'; R_PolygonVertex(v, t, rgb, a); @@ -461,7 +449,8 @@ void DrawCircleClippedPic(vector centre, float radi, string pic, float f, vector v.x -= 0.5 * ringsize.x; t -= '0.5 0.5 0'; R_PolygonVertex(v, t, rgb, a); R_EndPolygon(); - R_BeginPolygon(pic, drawflag); + // draw clipped lower half as a quad + R_BeginPolygon(pic, drawflag, true); v = centre; t = '0.5 0.5 0'; R_PolygonVertex(v, t, rgb, a); @@ -472,15 +461,11 @@ void DrawCircleClippedPic(vector centre, float radi, string pic, float f, vector v = centre; t = '0.5 0.5 0'; v.y -= 0.5 * ringsize.y; t -= '0.5 -0.5 0'; R_PolygonVertex(v, t, rgb, a); - - d = q - 0.75; - if(d <= 0) - R_EndPolygon(); } else if(f > 0.5) { - // draw upper triangle - R_BeginPolygon(pic, drawflag); + // draw upper half in full + R_BeginPolygon(pic, drawflag, true); v = centre; t = '0.5 0.5 0'; v.x += 0.5 * ringsize.x; t += '0.5 0.5 0'; R_PolygonVertex(v, t, rgb, a); @@ -493,23 +478,19 @@ void DrawCircleClippedPic(vector centre, float radi, string pic, float f, vector v.x -= 0.5 * ringsize.x; t -= '0.5 0.5 0'; R_PolygonVertex(v, t, rgb, a); R_EndPolygon(); + // draw clipped lower half as a triangle + R_BeginPolygon(pic, drawflag, true); + v = centre; t = '0.5 0.5 0'; + R_PolygonVertex(v, t, rgb, a); - d = q - 0.5; - if(d > 0) - { - R_BeginPolygon(pic, drawflag); - v = centre; t = '0.5 0.5 0'; - R_PolygonVertex(v, t, rgb, a); - - v = centre; t = '0.5 0.5 0'; - v.x -= 0.5 * ringsize.x; t -= '0.5 0.5 0'; - R_PolygonVertex(v, t, rgb, a); - } + v = centre; t = '0.5 0.5 0'; + v.x -= 0.5 * ringsize.x; t -= '0.5 0.5 0'; + R_PolygonVertex(v, t, rgb, a); } else if(f > 0.25) { - // draw first triangle - R_BeginPolygon(pic, drawflag); + // draw clipped lower half as a quad + R_BeginPolygon(pic, drawflag, true); v = centre; t = '0.5 0.5 0'; R_PolygonVertex(v, t, rgb, a); @@ -520,34 +501,30 @@ void DrawCircleClippedPic(vector centre, float radi, string pic, float f, vector v = centre; t = '0.5 0.5 0'; v.y += 0.5 * ringsize.y; t += '0.5 -0.5 0'; R_PolygonVertex(v, t, rgb, a); - - d = q - 0.25; - if(d <= 0) - R_EndPolygon(); } - else + else if (f > 0) { - d = q; - if(d > 0) - { - R_BeginPolygon(pic, drawflag); - v = centre; t = '0.5 0.5 0'; - R_PolygonVertex(v, t, rgb, a); - - v = centre; t = '0.5 0.5 0'; - v.x += 0.5 * ringsize.x; t += '0.5 0.5 0'; - R_PolygonVertex(v, t, rgb, a); - } - } + // draw clipped lower half as a triangle + R_BeginPolygon(pic, drawflag, true); + v = centre; t = '0.5 0.5 0'; + R_PolygonVertex(v, t, rgb, a); - if(d > 0) - { v = centre; t = '0.5 0.5 0'; - v.x += co * 0.5 * ringsize.x; t += co * '0.5 0.5 0'; - v.y += si * 0.5 * ringsize.y; t += si * '0.5 -0.5 0'; + v.x += 0.5 * ringsize.x; t += '0.5 0.5 0'; R_PolygonVertex(v, t, rgb, a); - R_EndPolygon(); } + else + { + // Nothing to draw. + return; + } + + // The last, moving vertex. + v = centre; t = '0.5 0.5 0'; + v.x += co * 0.5 * ringsize.x; t += co * '0.5 0.5 0'; + v.y += si * 0.5 * ringsize.y; t += si * '0.5 -0.5 0'; + R_PolygonVertex(v, t, rgb, a); + R_EndPolygon(); } /** engine callback */