summaryrefslogtreecommitdiff
path: root/source/sw_sprite.c
diff options
context:
space:
mode:
authorAndrey Nazarov <skuller@skuller.net>2008-08-16 10:19:42 +0000
committerAndrey Nazarov <skuller@skuller.net>2008-08-16 10:19:42 +0000
commit1526e22e4ff29153e9c127081e8ea8d9e2f33b8c (patch)
treeb361766433d4a7b4a111865afd52803e2bbf7754 /source/sw_sprite.c
parente826e5f176f21cd18b3bbc22887a266835ada57c (diff)
Split some monolithic include files into smaller ones.
Use single BSP models cache for refresh and collision subsystems. Refresh libraries may not longer be dynamically loaded. Made gi.TagMalloc use separate tag namespace to avoid conflicts with engine reserverd tags. Fixed listing order of MVD channels in chooser menu. A lot of misc changes... MSVC build is definitely broken now.
Diffstat (limited to 'source/sw_sprite.c')
-rw-r--r--source/sw_sprite.c47
1 files changed, 17 insertions, 30 deletions
diff --git a/source/sw_sprite.c b/source/sw_sprite.c
index cac2e37..978381e 100644
--- a/source/sw_sprite.c
+++ b/source/sw_sprite.c
@@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
extern polydesc_t r_polydesc;
-void R_BuildPolygonFromSurface(msurface_t *fa);
+void R_BuildPolygonFromSurface(mface_t *fa);
void R_PolygonCalculateGradients (void);
extern void R_PolyChooseSpanletRoutine( float alpha, qboolean isturbulent );
@@ -41,27 +41,14 @@ void R_DrawSprite (void)
{
vec5_t *pverts;
vec3_t left, up, right, down;
- dsprite_t *s_psprite;
- dsprframe_t *s_psprframe;
-
-
- s_psprite = (dsprite_t *)currentmodel->pool.base;
-#if 0
- if (currententity->frame >= s_psprite->numframes
- || currententity->frame < 0)
- {
- Com_Printf( "No such sprite frame %i\n",
- currententity->frame);
- currententity->frame = 0;
- }
-#endif
- currententity->frame %= s_psprite->numframes;
-
- s_psprframe = &s_psprite->frames[currententity->frame];
-
- r_polydesc.pixels = currentmodel->skins[currententity->frame]->pixels[0];
- r_polydesc.pixel_width = s_psprframe->width;
- r_polydesc.pixel_height = s_psprframe->height;
+ mspriteframe_t *frame;
+
+ frame = &currentmodel->spriteframes[
+ currententity->frame % currentmodel->numframes];
+
+ r_polydesc.pixels = frame->image->pixels[0];
+ r_polydesc.pixel_width = frame->width;
+ r_polydesc.pixel_height = frame->height;
r_polydesc.dist = 0;
// generate the sprite's axes, completely parallel to the viewplane.
@@ -71,13 +58,13 @@ void R_DrawSprite (void)
// build the sprite poster in worldspace
VectorScale (r_polydesc.vright,
- s_psprframe->width - s_psprframe->origin_x, right);
+ frame->width - frame->origin_x, right);
VectorScale (r_polydesc.vup,
- s_psprframe->height - s_psprframe->origin_y, up);
+ frame->height - frame->origin_y, up);
VectorScale (r_polydesc.vright,
- -s_psprframe->origin_x, left);
+ -frame->origin_x, left);
VectorScale (r_polydesc.vup,
- -s_psprframe->origin_y, down);
+ -frame->origin_y, down);
// invert UP vector for sprites
VectorNegate( r_polydesc.vup, r_polydesc.vup );
@@ -93,20 +80,20 @@ void R_DrawSprite (void)
pverts[1][0] = r_entorigin[0] + up[0] + right[0];
pverts[1][1] = r_entorigin[1] + up[1] + right[1];
pverts[1][2] = r_entorigin[2] + up[2] + right[2];
- pverts[1][3] = s_psprframe->width;
+ pverts[1][3] = frame->width;
pverts[1][4] = 0;
pverts[2][0] = r_entorigin[0] + down[0] + right[0];
pverts[2][1] = r_entorigin[1] + down[1] + right[1];
pverts[2][2] = r_entorigin[2] + down[2] + right[2];
- pverts[2][3] = s_psprframe->width;
- pverts[2][4] = s_psprframe->height;
+ pverts[2][3] = frame->width;
+ pverts[2][4] = frame->height;
pverts[3][0] = r_entorigin[0] + down[0] + left[0];
pverts[3][1] = r_entorigin[1] + down[1] + left[1];
pverts[3][2] = r_entorigin[2] + down[2] + left[2];
pverts[3][3] = 0;
- pverts[3][4] = s_psprframe->height;
+ pverts[3][4] = frame->height;
r_polydesc.nump = 4;
r_polydesc.s_offset = ( r_polydesc.pixel_width >> 1);