Advertisement
jargon

d3 0.04 blitzbasic.bb

Jul 3rd, 2013
3,032
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;d3 0.04
  2. ;Dim 3D Module
  3. ;Copyright Saturday, November 17th 2007 Timothy Robert Keal
  4. ;jargon@juno.com
  5. ;requires "bi/bi 0.03.bb"
  6.  
  7. Const d3_cast_sint32=0
  8. Const d3_cast_sfloat32=1
  9. Const d3_cast_ptr=2
  10. Const d3_cast_d3=3
  11. Const d3_cast_aa=4
  12.  
  13. Const d3_axis_offset=0
  14. Const d3_axis_shift=2
  15. Const d3_axis_ct=3
  16. Const d3_axis_sz=24
  17.  
  18. Const d3_data_offset=24
  19. Const d3_data_shift=2
  20. Const d3_data_ct=False
  21. Const d3_data_sz=False
  22.  
  23. ;get cast in d3
  24. Function d3_g_cast(d3,b,c)
  25.     If d3<>False Then
  26.         Local temp=False
  27.         Local cast_prior=False
  28.         If d3_sz(d3,0,True)>d3_sz(d3,0,False) Then
  29.  
  30.             If b>=d3_sz(d3,1,False) And b<=d3_sz(d3,1,True) Then
  31.             If c>=d3_sz(d3,2,False) And c<=d3_sz(d3,2,True) Then
  32.  
  33.                 Return d3_g(d3,d3_sz(d3,0,False),b,c)
  34.  
  35.             EndIf
  36.             EndIf
  37.         EndIf
  38.     EndIf
  39.     Return False
  40. End Function
  41.  
  42.  
  43. ;set cast in d3
  44. Function d3_s_cast(d3,b,c,cast)
  45.     ;Print "d3_s_cast(d3=[0x"+Hex(d3)+"],b=["+Str(b)+"],c=["+Str(c)+"],cast=["+Str(cast)+"])"
  46.     If d3<>False Then
  47.         Local temp=False
  48.         Local cast_prior=False
  49.         If d3_sz(d3,0,True)>d3_sz(d3,0,False) Then
  50.  
  51.             If b>=d3_sz(d3,1,False) And b<=d3_sz(d3,1,True) Then
  52.             If c>=d3_sz(d3,2,False) And c<=d3_sz(d3,2,True) Then
  53.  
  54.                 cast_prior=d3_g(d3,d3_sz(d3,0,False),b,c)
  55.                 If cast_prior<>cast Then                   
  56.                    
  57.                     d3_s d3,d3_sz(d3,0,False),b,c,cast
  58.                     For a=d3_sz(d3,0,False)+1 To d3_sz(d3,0,True)
  59.                        
  60.                         temp=d3_g(d3,a,b,c)
  61.                         Select cast_prior
  62.                         ;Case d3_cast_sint32 ;integer
  63.                         ;Case d3_cast_sfloat32 ;float
  64.                         Case d3_cast_ptr ;ptr
  65.                             If temp<>False Then FreeBank temp
  66.                         Case d3_cast_d3 ;d3
  67.                             If temp<>False Then d3_collapse(temp)
  68.                         Case d3_cast_aa ;aa
  69.                             If temp<>False Then aa_collapse(temp)
  70.                         End Select
  71.  
  72.                         Select cast
  73.                         Case d3_cast_sint32 ;integer
  74.                             d3_s d3,a,b,c,0
  75.                         Case d3_cast_sfloat32 ;float
  76.                             d3_sf d3,a,b,c,0.0
  77.                         Case d3_cast_ptr ;ptr
  78.                             d3_s d3,a,b,c,False
  79.                         Case d3_cast_d3 ;d3
  80.                             d3_s d3,a,b,c,False
  81.                         Case d3_cast_aa ;aa
  82.                             d3_s d3,a,b,c,False
  83.                         End Select
  84.  
  85.                     Next
  86.  
  87.                 EndIf
  88.  
  89.             EndIf
  90.             EndIf
  91.         EndIf
  92.     EndIf
  93.     Return False
  94. End Function
  95.  
  96. ;get size of d3
  97. Function d3_sz(d3,axis,hiflag)
  98.     Select hiflag
  99.     Case False
  100.         Return PeekInt(d3,d3_axis_offset+(axis Shl 3))
  101.     Case True
  102.         Return PeekInt(d3,d3_axis_offset+(((axis Shl 1)+1) Shl d3_axis_shift))
  103.     Case 2
  104.         Return d3_sz(d3,axis,True)-d3_sz(d3,axis,False)+1
  105.     Default
  106.         Return False
  107.     End Select
  108. End Function
  109.  
  110. ;collapse d3
  111. Function d3_collapse(d3)
  112.     If d3<>False Then
  113.         Local temp=False
  114.         Local cast=False
  115.         If d3_sz(d3,0,True)>d3_sz(d3,0,False) Then
  116.  
  117.             For b=d3_sz(d3,1,False) To d3_sz(d3,1,True)
  118.             For c=d3_sz(d3,2,False) To d3_sz(d3,2,True)
  119.  
  120.                 cast=d3_g(d3,d3_sz(d3,0,False),b,c)
  121.  
  122.                 For a=d3_sz(d3,0,False)+1 To d3_sz(d3,0,True)
  123.  
  124.                     temp=d3_g(d3,a,b,c)
  125.                     Select cast
  126.                     ;Case d3_cast_sint32 ;integer
  127.                     ;Case d3_cast_sfloat32 ;float
  128.                     Case d3_cast_ptr ;ptr
  129.                         If temp<>False Then FreeBank temp
  130.                     Case d3_cast_d3 ;d3
  131.                         If temp<>False Then d3_collapse(temp)
  132.                     Case d3_cast_aa ;aa
  133.                         If temp<>False Then aa_collapse(temp)
  134.                     End Select
  135.  
  136.                 Next
  137.  
  138.             Next
  139.             Next
  140.  
  141.         EndIf
  142.         FreeBank d3
  143.     EndIf
  144.     Return False
  145. End Function
  146.  
  147. ;allocate d3
  148. Function d3_d(alo,ahi,blo,bhi,clo,chi)
  149.     Local d3=CreateBank(d3_axis_sz)
  150.     PokeInt d3,d3_axis_offset+(0 Shl d3_axis_shift),alo
  151.     PokeInt d3,d3_axis_offset+(1 Shl d3_axis_shift),ahi
  152.     PokeInt d3,d3_axis_offset+(2 Shl d3_axis_shift),blo
  153.     PokeInt d3,d3_axis_offset+(3 Shl d3_axis_shift),bhi
  154.     PokeInt d3,d3_axis_offset+(4 Shl d3_axis_shift),clo
  155.     PokeInt d3,d3_axis_offset+(5 Shl d3_axis_shift),chi
  156.     Local ar=d3_sz(d3,0,2)
  157.     Local br=d3_sz(d3,1,2)
  158.     Local cr=d3_sz(d3,2,2)
  159.     ResizeBank d3,d3_data_offset+((ar*br*cr) Shl d3_data_shift)
  160.     Return d3
  161. End Function
  162.  
  163. ;get integer in d3
  164. Function d3_g(d3,a,b,c)
  165.     Local alo=d3_sz(d3,0,False)
  166.     Local ahi=d3_sz(d3,0,True)
  167.     Local blo=d3_sz(d3,1,False)
  168.     Local bhi=d3_sz(d3,1,True)
  169.     Local clo=d3_sz(d3,2,False)
  170.     Local chi=d3_sz(d3,2,True)
  171.     Local ar=d3_sz(d3,0,2)
  172.     Local br=d3_sz(d3,1,2)
  173.     Local cr=d3_sz(d3,2,2)
  174.     a=a-alo
  175.     b=b-blo
  176.     c=c-clo
  177.     Return PeekInt(d3,d3_data_offset+((cr*(br*a+b)+c) Shl d3_data_shift))
  178. End Function
  179.  
  180. ;set integer in d3
  181. Function d3_s(d3,a,b,c,value)
  182.     Local alo=d3_sz(d3,0,False)
  183.     Local ahi=d3_sz(d3,0,True)
  184.     Local blo=d3_sz(d3,1,False)
  185.     Local bhi=d3_sz(d3,1,True)
  186.     Local clo=d3_sz(d3,2,False)
  187.     Local chi=d3_sz(d3,2,True)
  188.     Local ar=d3_sz(d3,0,2)
  189.     Local br=d3_sz(d3,1,2)
  190.     Local cr=d3_sz(d3,2,2)
  191.     a=a-alo
  192.     b=b-blo
  193.     c=c-clo
  194.     PokeInt d3,d3_data_offset+((cr*(br*a+b)+c) Shl d3_data_shift),value
  195. End Function
  196.  
  197. ;get float in d3
  198. Function d3_gf#(d3,a,b,c)
  199.     Return bi_if(d3_g(d3,a,b,c))
  200. End Function
  201.  
  202. ;set float in d3
  203. Function d3_sf(d3,a,b,c,value#)
  204.     d3_s d3,a,b,c,bi_fi(value)
  205. End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement