Move rod_points onto stack

This commit is contained in:
Kp 2013-11-28 00:24:27 +00:00
parent c47d1b3d30
commit 86c49079a1

View file

@ -22,8 +22,12 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
#include "maths.h"
grs_point blob_vertices[4];
g3s_point rod_points[4];
static g3s_point *rod_point_list[] = {&rod_points[0],&rod_points[1],&rod_points[2],&rod_points[3]};
struct rod_4point
{
g3s_point *point_list[4];
g3s_point points[4];
};
static g3s_uvl uvl_list[4] = { { 0x0200,0x0200,0 },
{ 0xfe00,0x0200,0 },
@ -31,7 +35,7 @@ static g3s_uvl uvl_list[4] = { { 0x0200,0x0200,0 },
{ 0x0200,0xfe00,0 } };
//compute the corners of a rod. fills in vertbuf.
static int calc_rod_corners(g3s_point *bot_point,fix bot_width,g3s_point *top_point,fix top_width)
static int calc_rod_corners(rod_4point &rod_point_group, g3s_point *bot_point,fix bot_width,g3s_point *top_point,fix top_width)
{
vms_vector delta_vec,top,tempv,rod_norm;
ubyte codes_and;
@ -72,6 +76,11 @@ static int calc_rod_corners(g3s_point *bot_point,fix bot_width,g3s_point *top_po
vm_vec_copy_scale(&tempv,&rod_norm,top_width);
tempv.z = 0;
rod_point_group.point_list[0] = &rod_point_group.points[0];
rod_point_group.point_list[1] = &rod_point_group.points[1];
rod_point_group.point_list[2] = &rod_point_group.points[2];
rod_point_group.point_list[3] = &rod_point_group.points[3];
g3s_point (&rod_points)[4] = rod_point_group.points;
vm_vec_add(&rod_points[0].p3_vec,&top_point->p3_vec,&tempv);
vm_vec_sub(&rod_points[1].p3_vec,&top_point->p3_vec,&tempv);
@ -102,10 +111,11 @@ static int calc_rod_corners(g3s_point *bot_point,fix bot_width,g3s_point *top_po
//returns 1 if off screen, 0 if drew
bool g3_draw_rod_flat(g3s_point *bot_point,fix bot_width,g3s_point *top_point,fix top_width)
{
if (calc_rod_corners(bot_point,bot_width,top_point,top_width))
rod_4point rod;
if (calc_rod_corners(rod,bot_point,bot_width,top_point,top_width))
return 0;
return g3_draw_poly(4,rod_point_list);
return g3_draw_poly(4,rod.point_list);
}
@ -113,7 +123,8 @@ bool g3_draw_rod_flat(g3s_point *bot_point,fix bot_width,g3s_point *top_point,fi
//returns 1 if off screen, 0 if drew
bool g3_draw_rod_tmap(grs_bitmap *bitmap,g3s_point *bot_point,fix bot_width,g3s_point *top_point,fix top_width,g3s_lrgb light)
{
if (calc_rod_corners(bot_point,bot_width,top_point,top_width))
rod_4point rod;
if (calc_rod_corners(rod,bot_point,bot_width,top_point,top_width))
return 0;
uvl_list[0].l = uvl_list[1].l = uvl_list[2].l = uvl_list[3].l = (light.r+light.g+light.b)/3;
@ -122,7 +133,7 @@ bool g3_draw_rod_tmap(grs_bitmap *bitmap,g3s_point *bot_point,fix bot_width,g3s_
lrgb_list[0].g = lrgb_list[1].g = lrgb_list[2].g = lrgb_list[3].g = light.g;
lrgb_list[0].b = lrgb_list[1].b = lrgb_list[2].b = lrgb_list[3].b = light.b;
return g3_draw_tmap(4,rod_point_list,uvl_list,lrgb_list,bitmap);
return g3_draw_tmap(4,rod.point_list,uvl_list,lrgb_list,bitmap);
}
#ifndef OGL