[svn:parrot] r39695 - trunk/runtime/parrot/library/OpenGL

japhb at svn.parrot.org japhb at svn.parrot.org
Mon Jun 22 04:10:42 UTC 2009


Author: japhb
Date: Mon Jun 22 04:10:39 2009
New Revision: 39695
URL: https://trac.parrot.org/parrot/changeset/39695

Log:
[OpenGL] Refactor Math.pir: "Oh right, we have *macros*!"

Modified:
   trunk/runtime/parrot/library/OpenGL/Math.pir

Modified: trunk/runtime/parrot/library/OpenGL/Math.pir
==============================================================================
--- trunk/runtime/parrot/library/OpenGL/Math.pir	Mon Jun 22 02:49:35 2009	(r39694)
+++ trunk/runtime/parrot/library/OpenGL/Math.pir	Mon Jun 22 04:10:39 2009	(r39695)
@@ -141,26 +141,16 @@
 
 =head3 Elementwise Operations
 
-=over 4
-
-=item Vec4 result = vec1.add(Vec4 vec2)
-
-Calculate the elementwise addition C<vec1 + vec2> and return
-a new C<Vec4> vector C<result>.
-
 =cut
 
-.sub add :method
+# Standard header for binop methods
+.macro vec4_extract_self_plus_arg
    .param pmc vec2
 
    .local pmc v1, v2
    v1 = getattribute self, 'vals'
    v2 = getattribute vec2, 'vals'
 
-   .local pmc v3
-   v3 = new 'FixedFloatArray'
-   v3 = 4
-
    $N10 = v1[0]
    $N11 = v1[1]
    $N12 = v1[2]
@@ -170,11 +160,13 @@
    $N21 = v2[1]
    $N22 = v2[2]
    $N23 = v2[3]
+.endm
 
-   $N30 = $N10 + $N20
-   $N31 = $N11 + $N21
-   $N32 = $N12 + $N22
-   $N33 = $N13 + $N23
+# Standard footer for binop methods returning a vec4
+.macro vec4_return_new_result
+   .local pmc v3
+   v3 = new 'FixedFloatArray'
+   v3 = 4
 
    v3[0] = $N30
    v3[1] = $N31
@@ -187,53 +179,64 @@
    setattribute result, 'vals', v3
 
    .return(result)
-.end
+.endm
 
+# Standard footer for binop methods returning a vec4 = (vec3, w)
+.macro vec4_return_new_result_with_w(w)
+   .local pmc v3
+   v3 = new 'FixedFloatArray'
+   v3 = 4
 
-=item Vec4 result = vec1.sub(Vec4 vec2)
+   v3[0] = $N30
+   v3[1] = $N31
+   v3[2] = $N32
+   v3[3] = .w
 
-Calculate the elementwise subtraction C<vec1 - vec2> and return
+   .local pmc result
+   $P0 = typeof self
+   result = new $P0
+   setattribute result, 'vals', v3
+
+   .return(result)
+.endm
+
+=over 4
+
+=item Vec4 result = vec1.add(Vec4 vec2)
+
+Calculate the elementwise addition C<vec1 + vec2> and return
 a new C<Vec4> vector C<result>.
 
 =cut
 
-.sub sub :method
-   .param pmc vec2
+.sub add :method
+   .vec4_extract_self_plus_arg
 
-   .local pmc v1, v2
-   v1 = getattribute self, 'vals'
-   v2 = getattribute vec2, 'vals'
+   $N30 = $N10 + $N20
+   $N31 = $N11 + $N21
+   $N32 = $N12 + $N22
+   $N33 = $N13 + $N23
 
-   .local pmc v3
-   v3 = new 'FixedFloatArray'
-   v3 = 4
+   .vec4_return_new_result
+.end
 
-   $N10 = v1[0]
-   $N11 = v1[1]
-   $N12 = v1[2]
-   $N13 = v1[3]
 
-   $N20 = v2[0]
-   $N21 = v2[1]
-   $N22 = v2[2]
-   $N23 = v2[3]
+=item Vec4 result = vec1.sub(Vec4 vec2)
+
+Calculate the elementwise subtraction C<vec1 - vec2> and return
+a new C<Vec4> vector C<result>.
+
+=cut
+
+.sub sub :method
+   .vec4_extract_self_plus_arg
 
    $N30 = $N10 - $N20
    $N31 = $N11 - $N21
    $N32 = $N12 - $N22
    $N33 = $N13 - $N23
 
-   v3[0] = $N30
-   v3[1] = $N31
-   v3[2] = $N32
-   v3[3] = $N33
-
-   .local pmc result
-   $P0 = typeof self
-   result = new $P0
-   setattribute result, 'vals', v3
-
-   .return(result)
+   .vec4_return_new_result
 .end
 
 
@@ -245,42 +248,14 @@
 =cut
 
 .sub mult :method
-   .param pmc vec2
-
-   .local pmc v1, v2
-   v1 = getattribute self, 'vals'
-   v2 = getattribute vec2, 'vals'
-
-   .local pmc v3
-   v3 = new 'FixedFloatArray'
-   v3 = 4
-
-   $N10 = v1[0]
-   $N11 = v1[1]
-   $N12 = v1[2]
-   $N13 = v1[3]
-
-   $N20 = v2[0]
-   $N21 = v2[1]
-   $N22 = v2[2]
-   $N23 = v2[3]
+   .vec4_extract_self_plus_arg
 
    $N30 = $N10 * $N20
    $N31 = $N11 * $N21
    $N32 = $N12 * $N22
    $N33 = $N13 * $N23
 
-   v3[0] = $N30
-   v3[1] = $N31
-   v3[2] = $N32
-   v3[3] = $N33
-
-   .local pmc result
-   $P0 = typeof self
-   result = new $P0
-   setattribute result, 'vals', v3
-
-   .return(result)
+   .vec4_return_new_result
 .end
 
 
@@ -293,42 +268,14 @@
 =cut
 
 .sub div :method
-   .param pmc vec2
-
-   .local pmc v1, v2
-   v1 = getattribute self, 'vals'
-   v2 = getattribute vec2, 'vals'
-
-   .local pmc v3
-   v3 = new 'FixedFloatArray'
-   v3 = 4
-
-   $N10 = v1[0]
-   $N11 = v1[1]
-   $N12 = v1[2]
-   $N13 = v1[3]
-
-   $N20 = v2[0]
-   $N21 = v2[1]
-   $N22 = v2[2]
-   $N23 = v2[3]
+   .vec4_extract_self_plus_arg
 
    $N30 = $N10 / $N20
    $N31 = $N11 / $N21
    $N32 = $N12 / $N22
    $N33 = $N13 / $N23
 
-   v3[0] = $N30
-   v3[1] = $N31
-   v3[2] = $N32
-   v3[3] = $N33
-
-   .local pmc result
-   $P0 = typeof self
-   result = new $P0
-   setattribute result, 'vals', v3
-
-   .return(result)
+   .vec4_return_new_result
 .end
 
 
@@ -340,42 +287,14 @@
 =cut
 
 .sub mod :method
-   .param pmc vec2
-
-   .local pmc v1, v2
-   v1 = getattribute self, 'vals'
-   v2 = getattribute vec2, 'vals'
-
-   .local pmc v3
-   v3 = new 'FixedFloatArray'
-   v3 = 4
-
-   $N10 = v1[0]
-   $N11 = v1[1]
-   $N12 = v1[2]
-   $N13 = v1[3]
-
-   $N20 = v2[0]
-   $N21 = v2[1]
-   $N22 = v2[2]
-   $N23 = v2[3]
+   .vec4_extract_self_plus_arg
 
    $N30 = $N10 % $N20
    $N31 = $N11 % $N21
    $N32 = $N12 % $N22
    $N33 = $N13 % $N23
 
-   v3[0] = $N30
-   v3[1] = $N31
-   v3[2] = $N32
-   v3[3] = $N33
-
-   .local pmc result
-   $P0 = typeof self
-   result = new $P0
-   setattribute result, 'vals', v3
-
-   .return(result)
+   .vec4_return_new_result
 .end
 
 
@@ -395,23 +314,7 @@
 =cut
 
 .sub cross :method
-   .param pmc vec2
-
-   .local pmc v1, v2
-   v1 = getattribute self, 'vals'
-   v2 = getattribute vec2, 'vals'
-
-   .local pmc v3
-   v3 = new 'FixedFloatArray'
-   v3 = 4
-
-   $N10 = v1[0]
-   $N11 = v1[1]
-   $N12 = v1[2]
-
-   $N20 = v2[0]
-   $N21 = v2[1]
-   $N22 = v2[2]
+   .vec4_extract_self_plus_arg
 
    $N0  = $N11 * $N22
    $N1  = $N21 * $N12
@@ -425,17 +328,7 @@
    $N5  = $N20 * $N11
    $N32 = $N4 - $N5
 
-   v3[0] = $N30
-   v3[1] = $N31
-   v3[2] = $N32
-   v3[3] = 1.0
-
-   .local pmc result
-   $P0 = typeof self
-   result = new $P0
-   setattribute result, 'vals', v3
-
-   .return(result)
+   .vec4_return_new_result_with_w(1.0)
 .end
 
 
@@ -446,21 +339,7 @@
 =cut
 
 .sub dot :method
-   .param pmc vec2
-
-   .local pmc v1, v2
-   v1 = getattribute self, 'vals'
-   v2 = getattribute vec2, 'vals'
-
-   $N10 = v1[0]
-   $N11 = v1[1]
-   $N12 = v1[2]
-   $N13 = v1[3]
-
-   $N20 = v2[0]
-   $N21 = v2[1]
-   $N22 = v2[2]
-   $N23 = v2[3]
+   .vec4_extract_self_plus_arg
 
    $N30 = $N10 * $N20
    $N31 = $N11 * $N21
@@ -468,7 +347,6 @@
    $N33 = $N13 * $N23
 
    .local num result
-
    result  = $N30 + $N31
    result += $N32
    result += $N33
@@ -485,26 +363,13 @@
 =cut
 
 .sub dot3 :method
-   .param pmc vec2
-
-   .local pmc v1, v2
-   v1 = getattribute self, 'vals'
-   v2 = getattribute vec2, 'vals'
-
-   $N10 = v1[0]
-   $N11 = v1[1]
-   $N12 = v1[2]
-
-   $N20 = v2[0]
-   $N21 = v2[1]
-   $N22 = v2[2]
+   .vec4_extract_self_plus_arg
 
    $N30 = $N10 * $N20
    $N31 = $N11 * $N21
    $N32 = $N12 * $N22
 
    .local num result
-
    result  = $N30 + $N31
    result += $N32
 


More information about the parrot-commits mailing list