home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 14 / MA_Cover_14.iso / source / c / q1source_amy / qw / client / r_drawa.asm < prev    next >
Encoding:
Assembly Source File  |  1996-09-18  |  16.2 KB  |  674 lines

  1.  .386P
  2.  .model FLAT
  3.  externdef _d_zistepu:dword
  4.  externdef _d_pzbuffer:dword
  5.  externdef _d_zistepv:dword
  6.  externdef _d_zrowbytes:dword
  7.  externdef _d_ziorigin:dword
  8.  externdef _r_turb_s:dword
  9.  externdef _r_turb_t:dword
  10.  externdef _r_turb_pdest:dword
  11.  externdef _r_turb_spancount:dword
  12.  externdef _r_turb_turb:dword
  13.  externdef _r_turb_pbase:dword
  14.  externdef _r_turb_sstep:dword
  15.  externdef _r_turb_tstep:dword
  16.  externdef _r_bmodelactive:dword
  17.  externdef _d_sdivzstepu:dword
  18.  externdef _d_tdivzstepu:dword
  19.  externdef _d_sdivzstepv:dword
  20.  externdef _d_tdivzstepv:dword
  21.  externdef _d_sdivzorigin:dword
  22.  externdef _d_tdivzorigin:dword
  23.  externdef _sadjust:dword
  24.  externdef _tadjust:dword
  25.  externdef _bbextents:dword
  26.  externdef _bbextentt:dword
  27.  externdef _cacheblock:dword
  28.  externdef _d_viewbuffer:dword
  29.  externdef _cachewidth:dword
  30.  externdef _d_pzbuffer:dword
  31.  externdef _d_zrowbytes:dword
  32.  externdef _d_zwidth:dword
  33.  externdef _d_scantable:dword
  34.  externdef _r_lightptr:dword
  35.  externdef _r_numvblocks:dword
  36.  externdef _prowdestbase:dword
  37.  externdef _pbasesource:dword
  38.  externdef _r_lightwidth:dword
  39.  externdef _lightright:dword
  40.  externdef _lightrightstep:dword
  41.  externdef _lightdeltastep:dword
  42.  externdef _lightdelta:dword
  43.  externdef _lightright:dword
  44.  externdef _lightdelta:dword
  45.  externdef _sourcetstep:dword
  46.  externdef _surfrowbytes:dword
  47.  externdef _lightrightstep:dword
  48.  externdef _lightdeltastep:dword
  49.  externdef _r_sourcemax:dword
  50.  externdef _r_stepback:dword
  51.  externdef _colormap:dword
  52.  externdef _blocksize:dword
  53.  externdef _sourcesstep:dword
  54.  externdef _lightleft:dword
  55.  externdef _blockdivshift:dword
  56.  externdef _blockdivmask:dword
  57.  externdef _lightleftstep:dword
  58.  externdef _r_origin:dword
  59.  externdef _r_ppn:dword
  60.  externdef _r_pup:dword
  61.  externdef _r_pright:dword
  62.  externdef _ycenter:dword
  63.  externdef _xcenter:dword
  64.  externdef _d_vrectbottom_particle:dword
  65.  externdef _d_vrectright_particle:dword
  66.  externdef _d_vrecty:dword
  67.  externdef _d_vrectx:dword
  68.  externdef _d_pix_shift:dword
  69.  externdef _d_pix_min:dword
  70.  externdef _d_pix_max:dword
  71.  externdef _d_y_aspect_shift:dword
  72.  externdef _screenwidth:dword
  73.  externdef _vright:dword
  74.  externdef _vup:dword
  75.  externdef _vpn:dword
  76.  externdef _BOPS_Error:dword
  77.  externdef _snd_scaletable:dword
  78.  externdef _paintbuffer:dword
  79.  externdef _snd_linear_count:dword
  80.  externdef _snd_p:dword
  81.  externdef _snd_vol:dword
  82.  externdef _snd_out:dword
  83.  externdef _r_leftclipped:dword
  84.  externdef _r_leftenter:dword
  85.  externdef _r_rightclipped:dword
  86.  externdef _r_rightenter:dword
  87.  externdef _modelorg:dword
  88.  externdef _xscale:dword
  89.  externdef _r_refdef:dword
  90.  externdef _yscale:dword
  91.  externdef _r_leftexit:dword
  92.  externdef _r_rightexit:dword
  93.  externdef _r_lastvertvalid:dword
  94.  externdef _cacheoffset:dword
  95.  externdef _newedges:dword
  96.  externdef _removeedges:dword
  97.  externdef _r_pedge:dword
  98.  externdef _r_framecount:dword
  99.  externdef _r_u1:dword
  100.  externdef _r_emitted:dword
  101.  externdef _edge_p:dword
  102.  externdef _surface_p:dword
  103.  externdef _surfaces:dword
  104.  externdef _r_lzi1:dword
  105.  externdef _r_v1:dword
  106.  externdef _r_ceilv1:dword
  107.  externdef _r_nearzi:dword
  108.  externdef _r_nearzionly:dword
  109.  externdef _edge_aftertail:dword
  110.  externdef _edge_tail:dword
  111.  externdef _current_iv:dword
  112.  externdef _edge_head_u_shift20:dword
  113.  externdef _span_p:dword
  114.  externdef _edge_head:dword
  115.  externdef _fv:dword
  116.  externdef _edge_tail_u_shift20:dword
  117.  externdef _r_apverts:dword
  118.  externdef _r_anumverts:dword
  119.  externdef _aliastransform:dword
  120.  externdef _r_avertexnormals:dword
  121.  externdef _r_plightvec:dword
  122.  externdef _r_ambientlight:dword
  123.  externdef _r_shadelight:dword
  124.  externdef _aliasxcenter:dword
  125.  externdef _aliasycenter:dword
  126.  externdef _a_sstepxfrac:dword
  127.  externdef _r_affinetridesc:dword
  128.  externdef _acolormap:dword
  129.  externdef _d_pcolormap:dword
  130.  externdef _r_affinetridesc:dword
  131.  externdef _d_sfrac:dword
  132.  externdef _d_ptex:dword
  133.  externdef _d_pedgespanpackage:dword
  134.  externdef _d_tfrac:dword
  135.  externdef _d_light:dword
  136.  externdef _d_zi:dword
  137.  externdef _d_pdest:dword
  138.  externdef _d_pz:dword
  139.  externdef _d_aspancount:dword
  140.  externdef _erroradjustup:dword
  141.  externdef _errorterm:dword
  142.  externdef _d_xdenom:dword
  143.  externdef _r_p0:dword
  144.  externdef _r_p1:dword
  145.  externdef _r_p2:dword
  146.  externdef _a_tstepxfrac:dword
  147.  externdef _r_sstepx:dword
  148.  externdef _r_tstepx:dword
  149.  externdef _a_ststepxwhole:dword
  150.  externdef _zspantable:dword
  151.  externdef _skintable:dword
  152.  externdef _r_zistepx:dword
  153.  externdef _erroradjustdown:dword
  154.  externdef _d_countextrastep:dword
  155.  externdef _ubasestep:dword
  156.  externdef _a_ststepxwhole:dword
  157.  externdef _a_tstepxfrac:dword
  158.  externdef _r_lstepx:dword
  159.  externdef _a_spans:dword
  160.  externdef _erroradjustdown:dword
  161.  externdef _d_pdestextrastep:dword
  162.  externdef _d_pzextrastep:dword
  163.  externdef _d_sfracextrastep:dword
  164.  externdef _d_ptexextrastep:dword
  165.  externdef _d_countextrastep:dword
  166.  externdef _d_tfracextrastep:dword
  167.  externdef _d_lightextrastep:dword
  168.  externdef _d_ziextrastep:dword
  169.  externdef _d_pdestbasestep:dword
  170.  externdef _d_pzbasestep:dword
  171.  externdef _d_sfracbasestep:dword
  172.  externdef _d_ptexbasestep:dword
  173.  externdef _ubasestep:dword
  174.  externdef _d_tfracbasestep:dword
  175.  externdef _d_lightbasestep:dword
  176.  externdef _d_zibasestep:dword
  177.  externdef _zspantable:dword
  178.  externdef _r_lstepy:dword
  179.  externdef _r_sstepy:dword
  180.  externdef _r_tstepy:dword
  181.  externdef _r_zistepy:dword
  182.  externdef _D_PolysetSetEdgeTable:dword
  183.  externdef _D_RasterizeAliasPolySmooth:dword
  184.  externdef float_point5:dword
  185.  externdef Float2ToThe31nd:dword
  186.  externdef izistep:dword
  187.  externdef izi:dword
  188.  externdef FloatMinus2ToThe31nd:dword
  189.  externdef float_1:dword
  190.  externdef float_particle_z_clip:dword
  191.  externdef float_minus_1:dword
  192.  externdef float_0:dword
  193.  externdef fp_16:dword
  194.  externdef fp_64k:dword
  195.  externdef fp_1m:dword
  196.  externdef fp_1m_minus_1:dword
  197.  externdef fp_8:dword
  198.  externdef entryvec_table:dword
  199.  externdef advancetable:dword
  200.  externdef sstep:dword
  201.  externdef tstep:dword
  202.  externdef pspantemp:dword
  203.  externdef counttemp:dword
  204.  externdef jumptemp:dword
  205.  externdef reciprocal_table:dword
  206.  externdef DP_Count:dword
  207.  externdef DP_u:dword
  208.  externdef DP_v:dword
  209.  externdef DP_32768:dword
  210.  externdef DP_Color:dword
  211.  externdef DP_Pix:dword
  212.  externdef DP_EntryTable:dword
  213.  externdef pbase:dword
  214.  externdef s:dword
  215.  externdef t:dword
  216.  externdef sfracf:dword
  217.  externdef tfracf:dword
  218.  externdef snext:dword
  219.  externdef tnext:dword
  220.  externdef spancountminus1:dword
  221.  externdef zi16stepu:dword
  222.  externdef sdivz16stepu:dword
  223.  externdef tdivz16stepu:dword
  224.  externdef zi8stepu:dword
  225.  externdef sdivz8stepu:dword
  226.  externdef tdivz8stepu:dword
  227.  externdef reciprocal_table_16:dword
  228.  externdef entryvec_table_16:dword
  229.  externdef ceil_cw:dword
  230.  externdef single_cw:dword
  231.  externdef fp_64kx64k:dword
  232.  externdef pz:dword
  233.  externdef spr8entryvec_table:dword
  234. _DATA SEGMENT
  235. Ld0 dd 0.0
  236. Ld1 dd 0.0
  237. Lstack dd 0
  238. Lfp_near_clip dd 0.01
  239. Lceilv0 dd 0
  240. Lv dd 0
  241. Lu0 dd 0
  242. Lv0 dd 0
  243. Lzi0 dd 0
  244. _DATA ENDS
  245. _TEXT SEGMENT
  246.  align 4
  247.  public _R_ClipEdge
  248. _R_ClipEdge:
  249.  push esi
  250.  push edi
  251.  push ebx
  252.  mov ds:dword ptr[Lstack],esp
  253.  mov ebx,ds:dword ptr[12+12+esp]
  254.  mov esi,ds:dword ptr[4+12+esp]
  255.  mov edx,ds:dword ptr[8+12+esp]
  256.  test ebx,ebx
  257.  jz Lemit
  258. Lcliploop:
  259.  fld ds:dword ptr[0+0+esi]
  260.  fmul ds:dword ptr[0+0+ebx]
  261.  fld ds:dword ptr[0+4+esi]
  262.  fmul ds:dword ptr[0+4+ebx]
  263.  fld ds:dword ptr[0+8+esi]
  264.  fmul ds:dword ptr[0+8+ebx]
  265.  fxch st(1)
  266.  faddp st(2),st(0)
  267.  fld ds:dword ptr[0+0+edx]
  268.  fmul ds:dword ptr[0+0+ebx]
  269.  fld ds:dword ptr[0+4+edx]
  270.  fmul ds:dword ptr[0+4+ebx]
  271.  fld ds:dword ptr[0+8+edx]
  272.  fmul ds:dword ptr[0+8+ebx]
  273.  fxch st(1)
  274.  faddp st(2),st(0)
  275.  fxch st(3)
  276.  faddp st(2),st(0)
  277.  faddp st(2),st(0)
  278.  fsub ds:dword ptr[12+ebx]
  279.  fxch st(1)
  280.  fsub ds:dword ptr[12+ebx]
  281.  fxch st(1)
  282.  fstp ds:dword ptr[Ld0]
  283.  fstp ds:dword ptr[Ld1]
  284.  mov eax,ds:dword ptr[Ld0]
  285.  mov ecx,ds:dword ptr[Ld1]
  286.  or ecx,eax
  287.  js Lp2
  288. Lcontinue:
  289.  mov ebx,ds:dword ptr[16+ebx]
  290.  test ebx,ebx
  291.  jnz Lcliploop
  292. Lemit:
  293.  fldcw ds:word ptr[ceil_cw]
  294.  cmp ds:dword ptr[_r_lastvertvalid],0
  295.  jz LCalcFirst
  296.  mov eax,ds:dword ptr[_r_lzi1]
  297.  mov ecx,ds:dword ptr[_r_u1]
  298.  mov ds:dword ptr[Lzi0],eax
  299.  mov ds:dword ptr[Lu0],ecx
  300.  mov ecx,ds:dword ptr[_r_v1]
  301.  mov eax,ds:dword ptr[_r_ceilv1]
  302.  mov ds:dword ptr[Lv0],ecx
  303.  mov ds:dword ptr[Lceilv0],eax
  304.  jmp LCalcSecond
  305. LCalcFirst:
  306.  call near ptr LTransformAndProject
  307.  fst ds:dword ptr[Lv0]
  308.  fxch st(2)
  309.  fstp ds:dword ptr[Lu0]
  310.  fstp ds:dword ptr[Lzi0]
  311.  fistp ds:dword ptr[Lceilv0]
  312. LCalcSecond:
  313.  mov esi,edx
  314.  call near ptr LTransformAndProject
  315.  fld ds:dword ptr[Lu0]
  316.  fxch st(3)
  317.  fld ds:dword ptr[Lzi0]
  318.  fxch st(3)
  319.  fld ds:dword ptr[Lv0]
  320.  fxch st(3)
  321.  fist ds:dword ptr[_r_ceilv1]
  322.  fldcw ds:word ptr[single_cw]
  323.  fst ds:dword ptr[_r_v1]
  324.  fxch st(4)
  325.  fcom st(1)
  326.  fnstsw ax
  327.  test ah,1
  328.  jz LP0
  329.  fstp st(0)
  330.  fld st(0)
  331. LP0:
  332.  fxch st(1)
  333.  fstp ds:dword ptr[_r_lzi1]
  334.  fxch st(1)
  335.  fst ds:dword ptr[_r_u1]
  336.  fxch st(1)
  337.  fcom ds:dword ptr[_r_nearzi]
  338.  fnstsw ax
  339.  test ah,045h
  340.  jnz LP1
  341.  fst ds:dword ptr[_r_nearzi]
  342. LP1:
  343.  mov eax,ds:dword ptr[_r_nearzionly]
  344.  test eax,eax
  345.  jz LP2
  346. LPop5AndDone:
  347.  mov eax,ds:dword ptr[_cacheoffset]
  348.  mov edx,ds:dword ptr[_r_framecount]
  349.  cmp eax,07FFFFFFFh
  350.  jz LDoPop
  351.  and edx,07FFFFFFFh
  352.  or edx,080000000h
  353.  mov ds:dword ptr[_cacheoffset],edx
  354. LDoPop:
  355.  fstp st(0)
  356.  fstp st(0)
  357.  fstp st(0)
  358.  fstp st(0)
  359.  fstp st(0)
  360.  jmp Ldone
  361. LP2:
  362.  mov ebx,ds:dword ptr[Lceilv0]
  363.  mov edi,ds:dword ptr[_edge_p]
  364.  mov ecx,ds:dword ptr[_r_ceilv1]
  365.  mov edx,edi
  366.  mov esi,ds:dword ptr[_r_pedge]
  367.  add edx,32
  368.  cmp ebx,ecx
  369.  jz LPop5AndDone
  370.  mov eax,ds:dword ptr[_r_pedge]
  371.  mov ds:dword ptr[28+edi],eax
  372.  fstp ds:dword ptr[24+edi]
  373.  jc LSide0
  374. LSide1:
  375.  fsubp st(3),st(0)
  376.  fsub st(0),st(1)
  377.  fdivp st(2),st(0)
  378.  mov ds:dword ptr[_r_emitted],1
  379.  mov ds:dword ptr[_edge_p],edx
  380.  mov eax,ds:dword ptr[edx]
  381.  mov eax,ecx
  382.  lea ecx,ds:dword ptr[-1+ebx]
  383.  mov ebx,eax
  384.  mov eax,ds:dword ptr[_surface_p]
  385.  mov esi,ds:dword ptr[_surfaces]
  386.  sub edx,edx
  387.  sub eax,esi
  388.  shr eax,6
  389.  mov ds:dword ptr[16+edi],edx
  390.  mov ds:dword ptr[16+2+edi],eax
  391.  sub esi,esi
  392.  mov ds:dword ptr[Lv],ebx
  393.  fild ds:dword ptr[Lv]
  394.  fsubrp st(1),st(0)
  395.  fmul st(0),st(1)
  396.  fadd ds:dword ptr[_r_u1]
  397.  jmp LSideDone
  398. LSide0:
  399.  fsub st(0),st(3)
  400.  fxch st(2)
  401.  fsub st(0),st(1)
  402.  fdivp st(2),st(0)
  403.  mov ds:dword ptr[_r_emitted],1
  404.  mov ds:dword ptr[_edge_p],edx
  405.  mov eax,ds:dword ptr[edx]
  406.  dec ecx
  407.  mov eax,ds:dword ptr[_surface_p]
  408.  mov esi,ds:dword ptr[_surfaces]
  409.  sub edx,edx
  410.  sub eax,esi
  411.  shr eax,6
  412.  mov ds:dword ptr[16+2+edi],edx
  413.  mov ds:dword ptr[16+edi],eax
  414.  mov esi,1
  415.  mov ds:dword ptr[Lv],ebx
  416.  fild ds:dword ptr[Lv]
  417.  fsubrp st(1),st(0)
  418.  fmul st(0),st(1)
  419.  faddp st(2),st(0)
  420.  fxch st(1)
  421. LSideDone:
  422.  fmul ds:dword ptr[fp_1m]
  423.  fxch st(1)
  424.  fmul ds:dword ptr[fp_1m]
  425.  fxch st(1)
  426.  fadd ds:dword ptr[fp_1m_minus_1]
  427.  fxch st(1)
  428.  fistp ds:dword ptr[4+edi]
  429.  fistp ds:dword ptr[0+edi]
  430.  mov eax,ds:dword ptr[0+edi]
  431.  mov edx,ds:dword ptr[_r_refdef+76]
  432.  cmp eax,edx
  433.  jl LP4
  434.  mov edx,ds:dword ptr[_r_refdef+80]
  435.  cmp eax,edx
  436.  jng LP5
  437. LP4:
  438.  mov ds:dword ptr[0+edi],edx
  439.  mov eax,edx
  440. LP5:
  441.  add eax,esi
  442.  mov esi,ds:dword ptr[_newedges+ebx*4]
  443.  test esi,esi
  444.  jz LDoFirst
  445.  cmp ds:dword ptr[0+esi],eax
  446.  jl LNotFirst
  447. LDoFirst:
  448.  mov ds:dword ptr[12+edi],esi
  449.  mov ds:dword ptr[_newedges+ebx*4],edi
  450.  jmp LSetRemove
  451. LNotFirst:
  452. LFindInsertLoop:
  453.  mov edx,esi
  454.  mov esi,ds:dword ptr[12+esi]
  455.  test esi,esi
  456.  jz LInsertFound
  457.  cmp ds:dword ptr[0+esi],eax
  458.  jl LFindInsertLoop
  459. LInsertFound:
  460.  mov ds:dword ptr[12+edi],esi
  461.  mov ds:dword ptr[12+edx],edi
  462. LSetRemove:
  463.  mov eax,ds:dword ptr[_removeedges+ecx*4]
  464.  mov ds:dword ptr[_removeedges+ecx*4],edi
  465.  mov ds:dword ptr[20+edi],eax
  466. Ldone:
  467.  mov esp,ds:dword ptr[Lstack]
  468.  pop ebx
  469.  pop edi
  470.  pop esi
  471.  ret
  472. Lp2:
  473.  test eax,eax
  474.  jns Lp1
  475.  mov eax,ds:dword ptr[Ld1]
  476.  test eax,eax
  477.  jns Lp3
  478.  mov eax,ds:dword ptr[_r_leftclipped]
  479.  mov ecx,ds:dword ptr[_r_pedge]
  480.  test eax,eax
  481.  jnz Ldone
  482.  mov eax,ds:dword ptr[_r_framecount]
  483.  and eax,07FFFFFFFh
  484.  or eax,080000000h
  485.  mov ds:dword ptr[_cacheoffset],eax
  486.  jmp Ldone
  487. Lp1:
  488.  fld ds:dword ptr[Ld0]
  489.  fld ds:dword ptr[Ld1]
  490.  fsubr st(0),st(1)
  491.  mov ds:dword ptr[_cacheoffset],07FFFFFFFh
  492.  fdivp st(1),st(0)
  493.  sub esp,12
  494.  fld ds:dword ptr[0+8+edx]
  495.  fsub ds:dword ptr[0+8+esi]
  496.  fld ds:dword ptr[0+4+edx]
  497.  fsub ds:dword ptr[0+4+esi]
  498.  fld ds:dword ptr[0+0+edx]
  499.  fsub ds:dword ptr[0+0+esi]
  500.  mov edx,esp
  501.  mov eax,ds:dword ptr[20+ebx]
  502.  test al,al
  503.  fmul st(0),st(3)
  504.  fxch st(1)
  505.  fmul st(0),st(3)
  506.  fxch st(2)
  507.  fmulp st(3),st(0)
  508.  fadd ds:dword ptr[0+0+esi]
  509.  fxch st(1)
  510.  fadd ds:dword ptr[0+4+esi]
  511.  fxch st(2)
  512.  fadd ds:dword ptr[0+8+esi]
  513.  fxch st(1)
  514.  fstp ds:dword ptr[0+0+esp]
  515.  fstp ds:dword ptr[0+8+esp]
  516.  fstp ds:dword ptr[0+4+esp]
  517.  jz Ltestright
  518.  mov ds:dword ptr[_r_leftclipped],1
  519.  mov eax,ds:dword ptr[0+0+esp]
  520.  mov ds:dword ptr[_r_leftexit+0+0],eax
  521.  mov eax,ds:dword ptr[0+4+esp]
  522.  mov ds:dword ptr[_r_leftexit+0+4],eax
  523.  mov eax,ds:dword ptr[0+8+esp]
  524.  mov ds:dword ptr[_r_leftexit+0+8],eax
  525.  jmp Lcontinue
  526. Ltestright:
  527.  test ah,ah
  528.  jz Lcontinue
  529.  mov ds:dword ptr[_r_rightclipped],1
  530.  mov eax,ds:dword ptr[0+0+esp]
  531.  mov ds:dword ptr[_r_rightexit+0+0],eax
  532.  mov eax,ds:dword ptr[0+4+esp]
  533.  mov ds:dword ptr[_r_rightexit+0+4],eax
  534.  mov eax,ds:dword ptr[0+8+esp]
  535.  mov ds:dword ptr[_r_rightexit+0+8],eax
  536.  jmp Lcontinue
  537. Lp3:
  538.  mov ds:dword ptr[_r_lastvertvalid],0
  539.  fld ds:dword ptr[Ld0]
  540.  fld ds:dword ptr[Ld1]
  541.  fsubr st(0),st(1)
  542.  mov ds:dword ptr[_cacheoffset],07FFFFFFFh
  543.  fdivp st(1),st(0)
  544.  sub esp,12
  545.  fld ds:dword ptr[0+8+edx]
  546.  fsub ds:dword ptr[0+8+esi]
  547.  fld ds:dword ptr[0+4+edx]
  548.  fsub ds:dword ptr[0+4+esi]
  549.  fld ds:dword ptr[0+0+edx]
  550.  fsub ds:dword ptr[0+0+esi]
  551.  mov eax,ds:dword ptr[20+ebx]
  552.  test al,al
  553.  fmul st(0),st(3)
  554.  fxch st(1)
  555.  fmul st(0),st(3)
  556.  fxch st(2)
  557.  fmulp st(3),st(0)
  558.  fadd ds:dword ptr[0+0+esi]
  559.  fxch st(1)
  560.  fadd ds:dword ptr[0+4+esi]
  561.  fxch st(2)
  562.  fadd ds:dword ptr[0+8+esi]
  563.  fxch st(1)
  564.  fstp ds:dword ptr[0+0+esp]
  565.  fstp ds:dword ptr[0+8+esp]
  566.  fstp ds:dword ptr[0+4+esp]
  567.  mov esi,esp
  568.  jz Ltestright2
  569.  mov ds:dword ptr[_r_leftclipped],1
  570.  mov eax,ds:dword ptr[0+0+esp]
  571.  mov ds:dword ptr[_r_leftenter+0+0],eax
  572.  mov eax,ds:dword ptr[0+4+esp]
  573.  mov ds:dword ptr[_r_leftenter+0+4],eax
  574.  mov eax,ds:dword ptr[0+8+esp]
  575.  mov ds:dword ptr[_r_leftenter+0+8],eax
  576.  jmp Lcontinue
  577. Ltestright2:
  578.  test ah,ah
  579.  jz Lcontinue
  580.  mov ds:dword ptr[_r_rightclipped],1
  581.  mov eax,ds:dword ptr[0+0+esp]
  582.  mov ds:dword ptr[_r_rightenter+0+0],eax
  583.  mov eax,ds:dword ptr[0+4+esp]
  584.  mov ds:dword ptr[_r_rightenter+0+4],eax
  585.  mov eax,ds:dword ptr[0+8+esp]
  586.  mov ds:dword ptr[_r_rightenter+0+8],eax
  587.  jmp Lcontinue
  588. LTransformAndProject:
  589.  fld ds:dword ptr[0+0+esi]
  590.  fsub ds:dword ptr[_modelorg+0]
  591.  fld ds:dword ptr[0+4+esi]
  592.  fsub ds:dword ptr[_modelorg+4]
  593.  fld ds:dword ptr[0+8+esi]
  594.  fsub ds:dword ptr[_modelorg+8]
  595.  fxch st(2)
  596.  fld st(0)
  597.  fmul ds:dword ptr[_vpn+0]
  598.  fld st(1)
  599.  fmul ds:dword ptr[_vright+0]
  600.  fxch st(2)
  601.  fmul ds:dword ptr[_vup+0]
  602.  fld st(3)
  603.  fmul ds:dword ptr[_vpn+4]
  604.  fld st(4)
  605.  fmul ds:dword ptr[_vright+4]
  606.  fxch st(5)
  607.  fmul ds:dword ptr[_vup+4]
  608.  fxch st(1)
  609.  faddp st(3),st(0)
  610.  fxch st(3)
  611.  faddp st(4),st(0)
  612.  faddp st(2),st(0)
  613.  fld st(3)
  614.  fmul ds:dword ptr[_vpn+8]
  615.  fld st(4)
  616.  fmul ds:dword ptr[_vright+8]
  617.  fxch st(5)
  618.  fmul ds:dword ptr[_vup+8]
  619.  fxch st(1)
  620.  faddp st(2),st(0)
  621.  fxch st(4)
  622.  faddp st(3),st(0)
  623.  fxch st(1)
  624.  faddp st(3),st(0)
  625.  fcom ds:dword ptr[Lfp_near_clip]
  626.  fnstsw ax
  627.  test ah,1
  628.  jz LNoClip
  629.  fstp st(0)
  630.  fld ds:dword ptr[Lfp_near_clip]
  631. LNoClip:
  632.  fdivr ds:dword ptr[float_1]
  633.  fxch st(1)
  634.  fld ds:dword ptr[_xscale]
  635.  fmul st(0),st(2)
  636.  fmulp st(1),st(0)
  637.  fadd ds:dword ptr[_xcenter]
  638.  fcom ds:dword ptr[_r_refdef+68]
  639.  fnstsw ax
  640.  test ah,1
  641.  jz LClampP0
  642.  fstp st(0)
  643.  fld ds:dword ptr[_r_refdef+68]
  644. LClampP0:
  645.  fcom ds:dword ptr[_r_refdef+84]
  646.  fnstsw ax
  647.  test ah,045h
  648.  jnz LClampP1
  649.  fstp st(0)
  650.  fld ds:dword ptr[_r_refdef+84]
  651. LClampP1:
  652.  fld st(1)
  653.  fmul ds:dword ptr[_yscale]
  654.  fmulp st(3),st(0)
  655.  fxch st(2)
  656.  fsubr ds:dword ptr[_ycenter]
  657.  fcom ds:dword ptr[_r_refdef+72]
  658.  fnstsw ax
  659.  test ah,1
  660.  jz LClampP2
  661.  fstp st(0)
  662.  fld ds:dword ptr[_r_refdef+72]
  663. LClampP2:
  664.  fcom ds:dword ptr[_r_refdef+88]
  665.  fnstsw ax
  666.  test ah,045h
  667.  jnz LClampP3
  668.  fstp st(0)
  669.  fld ds:dword ptr[_r_refdef+88]
  670. LClampP3:
  671.  ret
  672. _TEXT ENDS
  673.  END
  674.