diff options
author | Franklin Wei <franklin@rockbox.org> | 2019-08-09 20:08:10 -0400 |
---|---|---|
committer | Franklin Wei <franklin@rockbox.org> | 2019-08-09 21:27:42 -0400 |
commit | ee70dad305a94709c877e776d723aee64d023cb5 (patch) | |
tree | 4483d1bd7b96e080dcb496e0665252e970d8cdbf /apps/plugins/sdl/progs/quake/r_main.c | |
parent | 3fffabf50d5597812ffa4381ac70dd6e2af6b392 (diff) | |
download | rockbox-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.c | 50 |
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; | |||
62 | vec3_t vpn, base_vpn; | 62 | vec3_t vpn, base_vpn; |
63 | vec3_t vright, base_vright; | 63 | vec3_t vright, base_vright; |
64 | vec3_t r_origin; | 64 | vec3_t r_origin; |
65 | #ifdef USE_PQ_OPT1 | ||
66 | int vup_fxp[3]; | ||
67 | int vpn_fxp[3]; | ||
68 | int vright_fxp[3]; | ||
69 | int xscale_fxp, yscale_fxp; | ||
70 | int xcenter_fxp, ycenter_fxp; | ||
71 | int r_refdef_fvrectx_adj_fxp; | ||
72 | int r_refdef_fvrectright_adj_fxp; | ||
73 | int r_refdef_fvrecty_adj_fxp; | ||
74 | int r_refdef_fvrectbottom_adj_fxp; | ||
75 | extern 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) |