[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