Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;d3 0.04
- ;Dim 3D Module
- ;Copyright Saturday, November 17th 2007 Timothy Robert Keal
- ;jargon@juno.com
- ;requires "bi/bi 0.03.bb"
- Const d3_cast_sint32=0
- Const d3_cast_sfloat32=1
- Const d3_cast_ptr=2
- Const d3_cast_d3=3
- Const d3_cast_aa=4
- Const d3_axis_offset=0
- Const d3_axis_shift=2
- Const d3_axis_ct=3
- Const d3_axis_sz=24
- Const d3_data_offset=24
- Const d3_data_shift=2
- Const d3_data_ct=False
- Const d3_data_sz=False
- ;get cast in d3
- Function d3_g_cast(d3,b,c)
- If d3<>False Then
- Local temp=False
- Local cast_prior=False
- If d3_sz(d3,0,True)>d3_sz(d3,0,False) Then
- If b>=d3_sz(d3,1,False) And b<=d3_sz(d3,1,True) Then
- If c>=d3_sz(d3,2,False) And c<=d3_sz(d3,2,True) Then
- Return d3_g(d3,d3_sz(d3,0,False),b,c)
- EndIf
- EndIf
- EndIf
- EndIf
- Return False
- End Function
- ;set cast in d3
- Function d3_s_cast(d3,b,c,cast)
- ;Print "d3_s_cast(d3=[0x"+Hex(d3)+"],b=["+Str(b)+"],c=["+Str(c)+"],cast=["+Str(cast)+"])"
- If d3<>False Then
- Local temp=False
- Local cast_prior=False
- If d3_sz(d3,0,True)>d3_sz(d3,0,False) Then
- If b>=d3_sz(d3,1,False) And b<=d3_sz(d3,1,True) Then
- If c>=d3_sz(d3,2,False) And c<=d3_sz(d3,2,True) Then
- cast_prior=d3_g(d3,d3_sz(d3,0,False),b,c)
- If cast_prior<>cast Then
- d3_s d3,d3_sz(d3,0,False),b,c,cast
- For a=d3_sz(d3,0,False)+1 To d3_sz(d3,0,True)
- temp=d3_g(d3,a,b,c)
- Select cast_prior
- ;Case d3_cast_sint32 ;integer
- ;Case d3_cast_sfloat32 ;float
- Case d3_cast_ptr ;ptr
- If temp<>False Then FreeBank temp
- Case d3_cast_d3 ;d3
- If temp<>False Then d3_collapse(temp)
- Case d3_cast_aa ;aa
- If temp<>False Then aa_collapse(temp)
- End Select
- Select cast
- Case d3_cast_sint32 ;integer
- d3_s d3,a,b,c,0
- Case d3_cast_sfloat32 ;float
- d3_sf d3,a,b,c,0.0
- Case d3_cast_ptr ;ptr
- d3_s d3,a,b,c,False
- Case d3_cast_d3 ;d3
- d3_s d3,a,b,c,False
- Case d3_cast_aa ;aa
- d3_s d3,a,b,c,False
- End Select
- Next
- EndIf
- EndIf
- EndIf
- EndIf
- EndIf
- Return False
- End Function
- ;get size of d3
- Function d3_sz(d3,axis,hiflag)
- Select hiflag
- Case False
- Return PeekInt(d3,d3_axis_offset+(axis Shl 3))
- Case True
- Return PeekInt(d3,d3_axis_offset+(((axis Shl 1)+1) Shl d3_axis_shift))
- Case 2
- Return d3_sz(d3,axis,True)-d3_sz(d3,axis,False)+1
- Default
- Return False
- End Select
- End Function
- ;collapse d3
- Function d3_collapse(d3)
- If d3<>False Then
- Local temp=False
- Local cast=False
- If d3_sz(d3,0,True)>d3_sz(d3,0,False) Then
- For b=d3_sz(d3,1,False) To d3_sz(d3,1,True)
- For c=d3_sz(d3,2,False) To d3_sz(d3,2,True)
- cast=d3_g(d3,d3_sz(d3,0,False),b,c)
- For a=d3_sz(d3,0,False)+1 To d3_sz(d3,0,True)
- temp=d3_g(d3,a,b,c)
- Select cast
- ;Case d3_cast_sint32 ;integer
- ;Case d3_cast_sfloat32 ;float
- Case d3_cast_ptr ;ptr
- If temp<>False Then FreeBank temp
- Case d3_cast_d3 ;d3
- If temp<>False Then d3_collapse(temp)
- Case d3_cast_aa ;aa
- If temp<>False Then aa_collapse(temp)
- End Select
- Next
- Next
- Next
- EndIf
- FreeBank d3
- EndIf
- Return False
- End Function
- ;allocate d3
- Function d3_d(alo,ahi,blo,bhi,clo,chi)
- Local d3=CreateBank(d3_axis_sz)
- PokeInt d3,d3_axis_offset+(0 Shl d3_axis_shift),alo
- PokeInt d3,d3_axis_offset+(1 Shl d3_axis_shift),ahi
- PokeInt d3,d3_axis_offset+(2 Shl d3_axis_shift),blo
- PokeInt d3,d3_axis_offset+(3 Shl d3_axis_shift),bhi
- PokeInt d3,d3_axis_offset+(4 Shl d3_axis_shift),clo
- PokeInt d3,d3_axis_offset+(5 Shl d3_axis_shift),chi
- Local ar=d3_sz(d3,0,2)
- Local br=d3_sz(d3,1,2)
- Local cr=d3_sz(d3,2,2)
- ResizeBank d3,d3_data_offset+((ar*br*cr) Shl d3_data_shift)
- Return d3
- End Function
- ;get integer in d3
- Function d3_g(d3,a,b,c)
- Local alo=d3_sz(d3,0,False)
- Local ahi=d3_sz(d3,0,True)
- Local blo=d3_sz(d3,1,False)
- Local bhi=d3_sz(d3,1,True)
- Local clo=d3_sz(d3,2,False)
- Local chi=d3_sz(d3,2,True)
- Local ar=d3_sz(d3,0,2)
- Local br=d3_sz(d3,1,2)
- Local cr=d3_sz(d3,2,2)
- a=a-alo
- b=b-blo
- c=c-clo
- Return PeekInt(d3,d3_data_offset+((cr*(br*a+b)+c) Shl d3_data_shift))
- End Function
- ;set integer in d3
- Function d3_s(d3,a,b,c,value)
- Local alo=d3_sz(d3,0,False)
- Local ahi=d3_sz(d3,0,True)
- Local blo=d3_sz(d3,1,False)
- Local bhi=d3_sz(d3,1,True)
- Local clo=d3_sz(d3,2,False)
- Local chi=d3_sz(d3,2,True)
- Local ar=d3_sz(d3,0,2)
- Local br=d3_sz(d3,1,2)
- Local cr=d3_sz(d3,2,2)
- a=a-alo
- b=b-blo
- c=c-clo
- PokeInt d3,d3_data_offset+((cr*(br*a+b)+c) Shl d3_data_shift),value
- End Function
- ;get float in d3
- Function d3_gf#(d3,a,b,c)
- Return bi_if(d3_g(d3,a,b,c))
- End Function
- ;set float in d3
- Function d3_sf(d3,a,b,c,value#)
- d3_s d3,a,b,c,bi_fi(value)
- End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement