home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 113 / EnigmaAmiga113CD.iso / software / sviluppo / quake_src / r_aliasppc.s < prev    next >
Text File  |  2000-06-17  |  7KB  |  268 lines

  1. # Copyright (C) 1996-1997 Id Software, Inc. 
  2. # This program is free software; you can redistribute it and/or 
  3. # modify it under the terms of the GNU General Public License 
  4. # as published by the Free Software Foundation; either version 2 
  5. # of the License, or (at your option) any later version. 
  6. # This program is distributed in the hope that it will be useful, 
  7. # but WITHOUT ANY WARRANTY; without even the implied warranty of 
  8. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   
  9. # See the GNU General Public License for more details. 
  10. # You should have received a copy of the GNU General Public License 
  11. # along with this program; if not, write to the Free Software 
  12. # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. 
  13.  
  14. ##
  15. ## Quake for AMIGA
  16. ##
  17. ## r_aliasPPC.s
  18. ##
  19. ## Define WOS for PowerOpen ABI, otherwise SVR4-ABI is used.
  20. ##
  21.  
  22. .set NOLR,1
  23. .include        "macrosPPC.i"
  24.  
  25. #
  26. # external references
  27. #
  28.  
  29.     xrefa    aliastransform
  30.     xrefa    r_avertexnormals
  31.     xrefa    r_plightvec
  32.     xrefv    r_ambientlight
  33.     xrefv    r_shadelight
  34.     xrefv    ziscale
  35.     xrefv    aliasxscale
  36.     xrefv    aliasyscale
  37.     xrefv    aliasxcenter
  38.     xrefv    aliasycenter
  39.     xrefv    INT2DBL_0
  40.     xrefv    c0
  41.  
  42. #
  43. # defines
  44. #
  45.  
  46. .set    FV_V               ,0
  47. .set    FV_FLAGS           ,24
  48. .set    FV_RESERVED        ,28
  49. .set    FV_SIZEOF          ,32
  50. .set    FV_SIZEOF_EXP      ,5
  51.  
  52. .set    TV_V               ,0
  53. .set    TV_LIGHTNORMALINDEX,3
  54.  
  55. .set    SV_ONSEAM          ,0
  56. .set    SV_S               ,4
  57. .set    SV_T               ,8
  58.  
  59.  
  60.  
  61.  
  62.  
  63. ###########################################################################
  64. #
  65. #       void R_AliasTransformVector (vec3_t in, vec3_t out)
  66. #
  67. ###########################################################################
  68.  
  69.     funcdef    R_AliasTransformVector
  70.  
  71.         lxa     r5,aliastransform
  72.         lfs     f3,12(r5)
  73.         lfs     f1,0(r3)
  74.         lfs     f2,0(r5)
  75.         fmadds  f0,f1,f2,f3
  76.         lfs     f4,4(r3)
  77.         lfs     f5,4(r5)
  78.         fmadds  f0,f4,f5,f0
  79.         lfs     f6,8(r3)
  80.         lfs     f7,8(r5)
  81.         fmadds  f0,f6,f7,f0
  82.         stfs    f0,0(r4)
  83.         lfs     f3,12+16(r5)
  84.         lfs     f2,0+16(r5)
  85.         fmadds  f0,f1,f2,f3
  86.         lfs     f5,4+16(r5)
  87.         fmadds  f0,f4,f5,f0
  88.         lfs     f7,8+16(r5)
  89.         fmadds  f0,f6,f7,f0
  90.         stfs    f0,4(r4)
  91.         lfs     f3,12+2*16(r5)
  92.         lfs     f2,0+2*16(r5)
  93.         fmadds  f0,f1,f2,f3
  94.         lfs     f5,4+2*16(r5)
  95.         fmadds  f0,f4,f5,f0
  96.         lfs     f7,8+2*16(r5)
  97.         fmadds  f0,f6,f7,f0
  98.         stfs    f0,8(r4)
  99.         blr
  100.  
  101.     funcend    R_AliasTransformVector
  102.  
  103.  
  104.  
  105.  
  106. ###########################################################################
  107. #
  108. #       void R_AliasTransformFinalVert (finalvert_t *fv, auxvert_t *av,
  109. #                                      trivertx_t *pverts, stvert_t *pstverts)
  110. #
  111. ###########################################################################
  112.  
  113.     funcdef    R_AliasTransformFinalVert
  114.  
  115.     init    0,16,0,0
  116.  
  117.     ls    f13,c0
  118.     lxa    r7,aliastransform
  119.     lf      f11,INT2DBL_0              #for int2dbl_setup, tmp=r11
  120.     stfd    f11,local(r1)
  121.  
  122. #        av->fv[0] = DotProduct(pverts->v, aliastransform[0]) +
  123. #                        aliastransform[0][3];
  124. #        av->fv[1] = DotProduct(pverts->v, aliastransform[1]) +
  125. #                        aliastransform[1][3];
  126. #        av->fv[2] = DotProduct(pverts->v, aliastransform[2]) +
  127. #                        aliastransform[2][3];
  128.  
  129.          lbz     r8,0(r5)
  130.          int2dbl f1,r8,r11,local,f11
  131.          lfs     f3,12(r7)
  132.          lfs     f2,0(r7)
  133.          fmadds  f0,f1,f2,f3
  134.          lbz     r8,1(r5)
  135.          int2dbl f4,r8,r11,local,f11
  136.          lfs     f5,4(r7)
  137.          fmadds  f0,f4,f5,f0
  138.          lbz     r8,2(r5)
  139.          int2dbl f6,r8,r11,local,f11
  140.          lfs     f7,8(r7)
  141.          fmadds  f0,f6,f7,f0
  142.          stfs    f0,0(r4)
  143.          lfs     f3,12+16(r7)
  144.          lfs     f2,0+16(r7)
  145.          fmadds  f0,f1,f2,f3
  146.          lfs     f5,4+16(r7)
  147.          fmadds  f0,f4,f5,f0
  148.          lfs     f7,8+16(r7)
  149.          fmadds  f0,f6,f7,f0
  150.          stfs    f0,4(r4)
  151.          lfs     f3,12+2*16(r7)
  152.          lfs     f2,0+2*16(r7)
  153.          fmadds  f0,f1,f2,f3
  154.          lfs     f5,4+2*16(r7)
  155.          fmadds  f0,f4,f5,f0
  156.          lfs     f7,8+2*16(r7)
  157.          fmadds  f0,f6,f7,f0
  158.          stfs    f0,8(r4)
  159.  
  160. #        fv->v[2] = pstverts->s;
  161. #        fv->v[3] = pstverts->t;
  162. #
  163. #        fv->flags = pstverts->onseam;
  164.  
  165.         lwz     r0,SV_S(r6)
  166.         stw     r0,8(r3)
  167.         lwz     r8,SV_T(r6)
  168.         stw     r8,12(r3)
  169.         lwz     r9,SV_ONSEAM(r6)
  170.         stw     r9,FV_FLAGS(r3)
  171.  
  172. #        plightnormal = r_avertexnormals[pverts->lightnormalindex];
  173. #        lightcos = DotProduct (plightnormal, r_plightvec);
  174. #        temp = r_ambientlight;
  175.  
  176.         lxa     r7,r_avertexnormals
  177.         lbz     r8,TV_LIGHTNORMALINDEX(r5)
  178.         mulli   r8,r8,12
  179.         add     r7,r7,r8
  180.         lxa     r9,r_plightvec
  181.         lfs     f1,0(r7)
  182.         lfs     f2,0(r9)
  183.         fmuls   f3,f1,f2
  184.         lfs     f4,4(r7)
  185.         lfs     f5,4(r9)
  186.         fmadds  f3,f4,f5,f3
  187.         lfs     f6,8(r7)
  188.         lfs     f7,8(r9)
  189.         fmadds  f3,f6,f7,f3
  190.         lw      r10,r_ambientlight
  191.  
  192. #        if (lightcos < 0)
  193. #        {
  194. #                temp += (int)(r_shadelight * lightcos);
  195. #
  196. #        // clamp; because we limited the minimum ambient and shading light, we
  197. #        // don't have to clamp low light, just bright
  198. #                if (temp < 0)
  199. #                        temp = 0;
  200. #        }
  201. #
  202. #        fv->v[4] = temp;
  203.  
  204.         fcmpo   cr0,f3,f13
  205.         bge     .cont
  206.         ls      f12,r_shadelight
  207.         fmuls   f3,f3,f12
  208.         fctiwz  f0,f3
  209.         stfd    f0,local+8(r1)
  210.         lwz     r11,local+12(r1)
  211.         add.    r10,r10,r11
  212.         bge     .cont
  213.         li      r10,0
  214. .cont:
  215.         stw     r10,16(r3)
  216.     exit
  217.  
  218.     funcend    R_AliasTransformFinalVert
  219.  
  220.  
  221.  
  222.  
  223. ###########################################################################
  224. #
  225. #       void R_AliasProjectFinalVert (finalvert_t *fv, auxvert_t *av,)
  226. #
  227. ###########################################################################
  228.  
  229.     funcdef    R_AliasProjectFinalVert
  230.  
  231.     init    0,8,0,0
  232.  
  233.         lfs     f1,8(r4)
  234.         ls      f2,ziscale
  235.         fres    f1,f1
  236.         fmuls   f3,f1,f2
  237.         fctiwz  f0,f3
  238.         stfd    f0,local(r1)
  239.         lwz     r5,local+4(r1)
  240.         stw     r5,20(r3)
  241.         lfs     f4,0(r4)
  242.         lfs     f5,4(r4)
  243.         fmuls   f4,f4,f1
  244.         fmuls   f5,f5,f1
  245.         ls      f6,aliasxscale
  246.         ls      f7,aliasxcenter
  247.         fmadds  f4,f4,f6,f7
  248.         fctiwz  f0,f4
  249.         stfd    f0,local(r1)
  250.         lwz     r5,local+4(r1)
  251.         stw     r5,0(r3)
  252.         ls      f6,aliasyscale
  253.         ls      f7,aliasycenter
  254.         fmadds  f5,f5,f6,f7
  255.         fctiwz  f0,f5
  256.         stfd    f0,local(r1)
  257.         lwz     r5,local+4(r1)
  258.         stw     r5,4(r3)
  259.     exit
  260.  
  261.     funcend    R_AliasProjectFinalVert
  262.