summaryrefslogtreecommitdiff
path: root/apps/plugins/sdl/progs/quake/r_main.c
diff options
context:
space:
mode:
authorFranklin Wei <franklin@rockbox.org>2019-08-09 20:08:10 -0400
committerFranklin Wei <franklin@rockbox.org>2019-08-09 21:27:42 -0400
commitee70dad305a94709c877e776d723aee64d023cb5 (patch)
tree4483d1bd7b96e080dcb496e0665252e970d8cdbf /apps/plugins/sdl/progs/quake/r_main.c
parent3fffabf50d5597812ffa4381ac70dd6e2af6b392 (diff)
downloadrockbox-ee70dad305a94709c877e776d723aee64d023cb5.tar.gz
rockbox-ee70dad305a94709c877e776d723aee64d023cb5.zip
quake: merge some fixed-point optimizations from PocketQuake
The PocketQuake project, available below, has some nice fixed-point code: https://web.archive.org/web/20150412233306/http://quake.pocketmatrix.com/PocketQuake0062_src.zip I'd like to see most of them merged into our Quake port. This commit gives +0.9FPS on ipod6g. (A big change given that it was running at only 9.7FPS to begin with!) Change-Id: I91931bdd5c22f14fb28616de938a03b4e7d7b076
Diffstat (limited to 'apps/plugins/sdl/progs/quake/r_main.c')
-rw-r--r--apps/plugins/sdl/progs/quake/r_main.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/apps/plugins/sdl/progs/quake/r_main.c b/apps/plugins/sdl/progs/quake/r_main.c
index dc785a850d..7776b46bde 100644
--- a/apps/plugins/sdl/progs/quake/r_main.c
+++ b/apps/plugins/sdl/progs/quake/r_main.c
@@ -62,6 +62,18 @@ vec3_t vup, base_vup;
62vec3_t vpn, base_vpn; 62vec3_t vpn, base_vpn;
63vec3_t vright, base_vright; 63vec3_t vright, base_vright;
64vec3_t r_origin; 64vec3_t r_origin;
65#ifdef USE_PQ_OPT1
66int vup_fxp[3];
67int vpn_fxp[3];
68int vright_fxp[3];
69int xscale_fxp, yscale_fxp;
70int xcenter_fxp, ycenter_fxp;
71int r_refdef_fvrectx_adj_fxp;
72int r_refdef_fvrectright_adj_fxp;
73int r_refdef_fvrecty_adj_fxp;
74int r_refdef_fvrectbottom_adj_fxp;
75extern int modelorg_fxp[3];
76#endif
65 77
66// 78//
67// screen size info 79// screen size info
@@ -421,6 +433,17 @@ void R_ViewChanged (vrect_t *pvrect, int lineadj, float aspect)
421 yscaleinv = 1.0 / yscale; 433 yscaleinv = 1.0 / yscale;
422 xscaleshrink = (r_refdef.vrect.width-6)/r_refdef.horizontalFieldOfView; 434 xscaleshrink = (r_refdef.vrect.width-6)/r_refdef.horizontalFieldOfView;
423 yscaleshrink = xscaleshrink*pixelAspect; 435 yscaleshrink = xscaleshrink*pixelAspect;
436
437#ifdef USE_PQ_OPT1
438 xscale_fxp=(int)(xscale*8388608.0); //9.23
439 yscale_fxp=(int)(yscale*8388608.0); //9.23
440 xcenter_fxp=(int)(xcenter*4194304.0); //10.22
441 ycenter_fxp=(int)(ycenter*4194304.0); //10.22
442 r_refdef_fvrectx_adj_fxp=(int)(r_refdef.fvrectx_adj*4194304.0);
443 r_refdef_fvrectright_adj_fxp=(int)(r_refdef.fvrectright_adj*4194304.0);
444 r_refdef_fvrecty_adj_fxp=(int)(r_refdef.fvrecty_adj*4194304.0);
445 r_refdef_fvrectbottom_adj_fxp=(int)(r_refdef.fvrectbottom_adj*4194304.0);
446#endif
424 447
425// left side clip 448// left side clip
426 screenedge[0].normal[0] = -1.0 / (xOrigin*r_refdef.horizontalFieldOfView); 449 screenedge[0].normal[0] = -1.0 / (xOrigin*r_refdef.horizontalFieldOfView);
@@ -789,6 +812,33 @@ void R_DrawBEntitiesOnList (void)
789 // FIXME: stop transforming twice 812 // FIXME: stop transforming twice
790 R_RotateBmodel (); 813 R_RotateBmodel ();
791 814
815#ifdef USE_PQ_OPT1
816 modelorg_fxp[0]=(int)(modelorg[0]*524288.0);
817 modelorg_fxp[1]=(int)(modelorg[1]*524288.0);
818 modelorg_fxp[2]=(int)(modelorg[2]*524288.0);
819
820 vright_fxp[0]=(int)(256.0/vright[0]);
821 if (!vright_fxp[0]) vright_fxp[0]=0x7fffffff;
822 vright_fxp[1]=(int)(256.0/vright[1]);
823 if (!vright_fxp[1]) vright_fxp[1]=0x7fffffff;
824 vright_fxp[2]=(int)(256.0/vright[2]);
825 if (!vright_fxp[2]) vright_fxp[2]=0x7fffffff;
826
827 vpn_fxp[0]=(int)(256.0/vpn[0]);
828 if (!vpn_fxp[0]) vpn_fxp[0]=0x7fffffff;
829 vpn_fxp[1]=(int)(256.0/vpn[1]);
830 if (!vpn_fxp[1]) vpn_fxp[1]=0x7fffffff;
831 vpn_fxp[2]=(int)(256.0/vpn[2]);
832 if (!vpn_fxp[2]) vpn_fxp[2]=0x7fffffff;
833
834 vup_fxp[0]=(int)(256.0/vup[0]);
835 if (!vup_fxp[0]) vup_fxp[0]=0x7fffffff;
836 vup_fxp[1]=(int)(256.0/vup[1]);
837 if (!vup_fxp[1]) vup_fxp[1]=0x7fffffff;
838 vup_fxp[2]=(int)(256.0/vup[2]);
839 if (!vup_fxp[2]) vup_fxp[2]=0x7fffffff;
840#endif
841
792 // calculate dynamic lighting for bmodel if it's not an 842 // calculate dynamic lighting for bmodel if it's not an
793 // instanced model 843 // instanced model
794 if (clmodel->firstmodelsurface != 0) 844 if (clmodel->firstmodelsurface != 0)