Sfoglia il codice sorgente

Use Float Ptr instead of Float arrays.
Performs significantly better on iOS.

woollybah 9 anni fa
parent
commit
1ecf5ebdfb
1 ha cambiato i file con 16 aggiunte e 16 eliminazioni
  1. 16 16
      mojo2.mod/math3d.bmx

+ 16 - 16
mojo2.mod/math3d.bmx

@@ -21,24 +21,24 @@
 ' 
 SuperStrict
 
-
+Import brl.standardio
 Global Mat4Identity:Float[] = [1.0,0.0,0.0,0.0, 0.0,1.0,0.0,0.0, 0.0,0.0,1.0,0.0, 0.0,0.0,0.0,1.0]
 
-Function Vec4Init( x:Float,y:Float,z:Float,w:Float,r:Float[] )
+Function Vec4Init( x:Float,y:Float,z:Float,w:Float,r:Float Ptr )
 	r[0]=x
 	r[1]=y
 	r[2]=z
 	r[3]=w
 End Function
 
-Function Vec4Copy( v:Float[],r:Float[] )
+Function Vec4Copy( v:Float Ptr,r:Float Ptr )
 	r[0]=v[0]
 	r[1]=v[1]
 	r[2]=v[2]
 	r[3]=v[3]
 End Function
 
-Function Vec4CopySrcDst( v:Float[],r:Float[],src:Int,dst:Int )
+Function Vec4CopySrcDst( v:Float Ptr,r:Float Ptr,src:Int,dst:Int )
 	r[0+dst]=v[0+src]
 	r[1+dst]=v[1+src]
 	r[2+dst]=v[2+src]
@@ -49,25 +49,25 @@ Function Mat4New:Float[]()
 	Return [1.0,0.0,0.0,0.0, 0.0,1.0,0.0,0.0, 0.0,0.0,1.0,0.0, 0.0,0.0,0.0,1.0]
 End Function
 
-Function Mat4Init( ix:Float,jy:Float,kz:Float,tw:Float,r:Float[] )
+Function Mat4Init( ix:Float,jy:Float,kz:Float,tw:Float,r:Float Ptr )
 	r[0]= ix; r[1]=  0; r[2]=  0; r[3]=  0
 	r[4]=  0; r[5]= jy; r[6]=  0; r[7]=  0
 	r[8]=  0; r[9]=  0; r[10]=kz; r[11]= 0
 	r[12]= 0; r[13]= 0; r[14]= 0; r[15]=tw
 End Function
 
-Function Mat4InitFull( ix:Float,iy:Float,iz:Float,iw:Float,jx:Float,jy:Float,jz:Float,jw:Float,kx:Float,ky:Float,kz:Float,kw:Float,tx:Float,ty:Float,tz:Float,tw:Float,r:Float[] )
+Function Mat4InitFull( ix:Float,iy:Float,iz:Float,iw:Float,jx:Float,jy:Float,jz:Float,jw:Float,kx:Float,ky:Float,kz:Float,kw:Float,tx:Float,ty:Float,tz:Float,tw:Float,r:Float Ptr )
 	r[0]= ix;r[1]= iy;r[2]= iz;r[3]= iw
 	r[4]= jx;r[5]= jy;r[6]= jz;r[7]= jw
 	r[8]= kx;r[9]= ky;r[10]=kz;r[11]=kw
 	r[12]=tx;r[13]=ty;r[14]=tz;r[15]=tw
 End Function
 
-Function Mat4InitArray( r:Float[] )
+Function Mat4InitArray( r:Float Ptr )
 	Mat4Init 1,1,1,1,r
 End Function
 
-Function Mat4Copy( m:Float[],r:Float[] )
+Function Mat4Copy( m:Float Ptr,r:Float Ptr )
 	r[0]=m[0]
 	r[1]=m[1]
 	r[2]=m[2]
@@ -86,14 +86,14 @@ Function Mat4Copy( m:Float[],r:Float[] )
 	r[15]=m[15]
 End Function
 
-Function Mat4Ortho( Left:Float,Right:Float,bottom:Float,top:Float,znear:Float,zfar:Float,r:Float[] )
+Function Mat4Ortho( Left:Float,Right:Float,bottom:Float,top:Float,znear:Float,zfar:Float,r:Float Ptr )
 	Local w:Float=Right-Left
 	Local h:Float=top-bottom
 	Local d:Float=zfar-znear
 	Mat4InitFull 2.0/w,0,0,0, 0,2.0/h,0,0, 0,0,2.0/d,0, -(Right+Left)/w,-(top+bottom)/h,-(zfar+znear)/d,1,r
 End Function
 
-Function Mat4Frustum( Left:Float,Right:Float,bottom:Float,top:Float,znear:Float,zfar:Float,r:Float[] )	
+Function Mat4Frustum( Left:Float,Right:Float,bottom:Float,top:Float,znear:Float,zfar:Float,r:Float Ptr )	
 	Local w:Float=Right-Left
 	Local h:Float=top-bottom
 	Local d:Float=zfar-znear
@@ -101,11 +101,11 @@ Function Mat4Frustum( Left:Float,Right:Float,bottom:Float,top:Float,znear:Float,
 	Mat4InitFull znear2/w,0,0,0, 0,znear2/h,0,0, (Right+Left)/w,(top+bottom)/h,(zfar+znear)/d,1, 0,0,-(zfar*znear2)/d,0, r
 End Function
 
-Function Mat4Transpose( m:Float[],r:Float[] )
+Function Mat4Transpose( m:Float Ptr,r:Float Ptr )
 	Mat4InitFull m[0],m[4],m[8],m[12], m[1],m[5],m[9],m[13], m[2],m[6],m[10],m[14], m[3],m[7],m[11],m[15],r
 End Function
 
-Function Mat4Inverse( m:Float[],r:Float[] )
+Function Mat4Inverse( m:Float Ptr,r:Float Ptr )
 	r[0] = m[5] * m[10] * m[15] - m[5] * m[11] * m[14] - m[9] * m[6] * m[15] + m[9] * m[7] * m[14] + m[13] * m[6] * m[11] - m[13] * m[7] * m[10]
 	r[4] =-m[4] * m[10] * m[15] + m[4] * m[11] * m[14] + m[8] * m[6] * m[15] - m[8] * m[7] * m[14] - m[12] * m[6] * m[11] + m[12] * m[7] * m[10]
 	r[8] = m[4] * m[9]  * m[15] - m[4] * m[11] * m[13] - m[8] * m[5] * m[15] + m[8] * m[7] * m[13] + m[12] * m[5] * m[11] - m[12] * m[7] * m[9]
@@ -128,7 +128,7 @@ Function Mat4Inverse( m:Float[],r:Float[] )
 	Next
 End Function
 
-Function Mat4Multiply( m:Float[],n:Float[],r:Float[] )
+Function Mat4Multiply( m:Float Ptr,n:Float Ptr,r:Float Ptr )
 	Mat4InitFull( ..
 	m[0]*n[0]  + m[4]*n[1]  + m[8]*n[2]  + m[12]*n[3],  m[1]*n[0]  + m[5]*n[1]  + m[9]*n[2]  + m[13]*n[3],  m[2]*n[0]  + m[6]*n[1]  + m[10]*n[2]  + m[14]*n[3],  m[3]*n[0]  + m[7]*n[1]  + m[11]*n[2]  + m[15]*n[3], ..
 	m[0]*n[4]  + m[4]*n[5]  + m[8]*n[6]  + m[12]*n[7],  m[1]*n[4]  + m[5]*n[5]  + m[9]*n[6]  + m[13]*n[7],  m[2]*n[4]  + m[6]*n[5]  + m[10]*n[6]  + m[14]*n[7],  m[3]*n[4]  + m[7]*n[5]  + m[11]*n[6]  + m[15]*n[7], ..
@@ -136,7 +136,7 @@ Function Mat4Multiply( m:Float[],n:Float[],r:Float[] )
 	m[0]*n[12] + m[4]*n[13] + m[8]*n[14] + m[12]*n[15], m[1]*n[12] + m[5]*n[13] + m[9]*n[14] + m[13]*n[15], m[2]*n[12] + m[6]*n[13] + m[10]*n[14] + m[14]*n[15], m[3]*n[12] + m[7]*n[13] + m[11]*n[14] + m[15]*n[15],r )
 End Function
 
-Function Mat4Transform( m:Float[],v:Float[],r:Float[] )
+Function Mat4Transform( m:Float Ptr,v:Float Ptr,r:Float Ptr )
 	Vec4Init( ..
 	m[0]*v[0] + m[4]*v[1] + m[8] *v[2] + m[12]*v[3],..
 	m[1]*v[0] + m[5]*v[1] + m[9] *v[2] + m[13]*v[3], ..
@@ -144,7 +144,7 @@ Function Mat4Transform( m:Float[],v:Float[],r:Float[] )
 	m[3]*v[0] + m[7]*v[1] + m[11]*v[2] + m[15]*v[3],r )
 End Function
 
-Function Mat4Project( m:Float[],v:Float[],r:Float[] )
+Function Mat4Project( m:Float Ptr,v:Float Ptr,r:Float Ptr )
 	Vec4Init( ..
 	m[0]*v[0] + m[4]*v[1] + m[8] *v[2] + m[12]*v[3], ..
 	m[1]*v[0] + m[5]*v[1] + m[9] *v[2] + m[13]*v[3], ..
@@ -159,7 +159,7 @@ End Function
 Function Mat4Roll( rz:Float,m:Float[] )
 End Function
 
-Function Mat4Scale( x:Float,y:Float,z:Float,m:Float[] )
+Function Mat4Scale( x:Float,y:Float,z:Float,m:Float Ptr )
 	m[0]=x;m[1]=0;m[2]=0;m[3]=0
 	m[4]=0;m[5]=y;m[6]=0;m[7]=0
 	m[8]=0;m[9]=0;m[10]=1;m[11]=0