[svn:parrot] r39748 - in trunk: examples/opengl runtime/parrot/library/OpenGL

japhb at svn.parrot.org japhb at svn.parrot.org
Tue Jun 23 20:25:11 UTC 2009


Author: japhb
Date: Tue Jun 23 20:25:09 2009
New Revision: 39748
URL: https://trac.parrot.org/parrot/changeset/39748

Log:
[OpenGL] Math: fill out vec-num binops using another super-macro; add another sample to math.pir; make math.pir output less confusing

Modified:
   trunk/examples/opengl/math.pir
   trunk/runtime/parrot/library/OpenGL/Math.pir

Modified: trunk/examples/opengl/math.pir
==============================================================================
--- trunk/examples/opengl/math.pir	Tue Jun 23 19:34:57 2009	(r39747)
+++ trunk/examples/opengl/math.pir	Tue Jun 23 20:25:09 2009	(r39748)
@@ -69,10 +69,17 @@
     .local pmc vec3
     vec3 = vec1.'mul'(vec2)
 
-    say "vec1 * vec2 = vec3"
+    say "vec1 * vec2 => vec3"
     _dumper(vec1, 'vec1')
     _dumper(vec2, 'vec2')
     _dumper(vec3, 'vec3')
+
+    .local pmc scaled
+    scaled = vec1.'mul_num'(3)
+
+    say "vector * 3 => scaled"
+    _dumper(vec1,   'vector')
+    _dumper(scaled, 'scaled')
 .end
 
 .sub normalize
@@ -81,7 +88,7 @@
     .local pmc normalized
     normalized = vector.'normalize'()
 
-    say "normalize(vector) = normalized"
+    say "normalize(vector) => normalized"
     _dumper(vector,     'vector')
     _dumper(normalized, 'normalized')
 .end

Modified: trunk/runtime/parrot/library/OpenGL/Math.pir
==============================================================================
--- trunk/runtime/parrot/library/OpenGL/Math.pir	Tue Jun 23 19:34:57 2009	(r39747)
+++ trunk/runtime/parrot/library/OpenGL/Math.pir	Tue Jun 23 20:25:09 2009	(r39748)
@@ -256,6 +256,22 @@
 .end
 .endm
 
+
+# A standard elementwise vec4-num binop (vec4 op num --> vec4)
+.macro vec4_num_vec4_binop(name, op)
+.sub .name :method
+    .vec4_extract_self_plus_num_arg
+
+    $N30 = $N10 .op N
+    $N31 = $N11 .op N
+    $N32 = $N12 .op N
+    $N33 = $N13 .op N
+
+    .vec4_return_new_result
+.end
+.endm
+
+
 =over 4
 
 =item Vec4 result = vec1.add(Vec4 vec2)
@@ -269,9 +285,9 @@
 =item Vec4 result = vec1.mod(Vec4 vec2)
 
 Calculate the elementwise addition, subtraction, multiplication, division,
-or modulus C<vec1 [+-*/%] vec2> and return a new C<Vec4> vector C<result>.
-No attempt is made in C<div> and C<mod> to prevent division by zero,
-XXX - SO WHAT HAPPENS?
+or modulus (C<vec1 [ + - * / % ] vec2>) and return a new C<Vec4> vector
+C<result>. No attempt is made in C<div> and C<mod> to prevent division by
+zero, XXX - SO WHAT HAPPENS?
 
 =cut
 
@@ -286,24 +302,32 @@
 .vec4_vec4_vec4_binop(mod, %)
 
 
+=item Vec4 result = vector.add_num(num N)
+
+=item Vec4 result = vector.sub_num(num N)
+
+=item Vec4 result = vector.mul_num(num N)
+
 =item Vec4 result = vector.div_num(num N)
 
-Calculate the elementwise division C<vector / N> and return a new C<Vec4>
-vector C<result>.  No attempt is made to prevent division by zero,
-XXX - SO WHAT HAPPENS?
+=item Vec4 result = vector.mod_num(num N)
+
+Calculate the elementwise addition, subtraction, multiplication, division,
+or modulus (C<vector [ + - * / % ] N>) and return a new C<Vec4> vector
+C<result>.  No attempt is made in C<div_num> and C<mod_num> to prevent
+division by zero, XXX - SO WHAT HAPPENS?
 
 =cut
 
-.sub div_num :method
-    .vec4_extract_self_plus_num_arg
+.vec4_num_vec4_binop(add_num, +)
 
-    $N30 = $N10 / N
-    $N31 = $N11 / N
-    $N32 = $N12 / N
-    $N33 = $N13 / N
+.vec4_num_vec4_binop(sub_num, -)
 
-    .vec4_return_new_result
-.end
+.vec4_num_vec4_binop(mul_num, *)
+
+.vec4_num_vec4_binop(div_num, /)
+
+.vec4_num_vec4_binop(mod_num, %)
 
 
 =back


More information about the parrot-commits mailing list