[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