snow-math 1.2.4 → 1.3.0pre0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +47 -569
- data/ext/snow-math/mat3.c +1 -1
- data/ext/snow-math/quat.c +3 -3
- data/ext/snow-math/snow-math.c +3794 -709
- data/ext/snow-math/vec3.c +3 -3
- data/ext/snow-math/vec4.c +4 -4
- data/lib/snow-math.rb +12 -2
- data/lib/snow-math/inspect.rb +48 -20
- data/lib/snow-math/marshal.rb +75 -0
- data/lib/snow-math/mat3.rb +66 -1
- data/lib/snow-math/mat4.rb +82 -0
- data/lib/snow-math/ptr.rb +66 -10
- data/lib/snow-math/quat.rb +91 -5
- data/lib/snow-math/swizzle.rb +77 -40
- data/lib/snow-math/to_a.rb +178 -35
- data/lib/snow-math/vec3.rb +67 -4
- data/lib/snow-math/vec4.rb +70 -4
- metadata +7 -5
- data/lib/snow-math/array_cache.rb +0 -42
data/lib/snow-math/ptr.rb
CHANGED
@@ -7,18 +7,74 @@ require 'fiddle'
|
|
7
7
|
|
8
8
|
module Snow
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
#
|
11
|
+
# A module to provide to_ptr methods for all Snow math types. This is optional
|
12
|
+
# and only used if you require `snow-math/ptr` because it depends on Fiddle,
|
13
|
+
# so if you don't want Fiddle pulled into your environment, you don't want to
|
14
|
+
# require the file for this.
|
15
|
+
#
|
16
|
+
module FiddlePointerSupport
|
17
|
+
#
|
18
|
+
# Returns a Fiddle::Pointer to the memory address of the object that extends
|
19
|
+
# through the size of the object.
|
20
|
+
#
|
21
|
+
# This function is only provided if you've required `snow-math/ptr`.
|
22
|
+
#
|
23
|
+
# call-seq: to_ptr -> Fiddle::Pointer
|
24
|
+
#
|
25
|
+
def to_ptr
|
26
|
+
Fiddle::Pointer.new(self.address, self.size)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class Vec3
|
31
|
+
include ::Snow::FiddlePointerSupport
|
32
|
+
end
|
33
|
+
|
34
|
+
class Vec4
|
35
|
+
include ::Snow::FiddlePointerSupport
|
36
|
+
end
|
37
|
+
|
38
|
+
class Quat
|
39
|
+
include ::Snow::FiddlePointerSupport
|
40
|
+
end
|
15
41
|
|
16
|
-
|
17
|
-
|
18
|
-
|
42
|
+
class Mat3
|
43
|
+
include ::Snow::FiddlePointerSupport
|
44
|
+
end
|
45
|
+
|
46
|
+
class Mat4
|
47
|
+
include ::Snow::FiddlePointerSupport
|
48
|
+
end
|
49
|
+
|
50
|
+
if const_defined?(:Vec3Array)
|
51
|
+
class Vec3Array
|
52
|
+
include ::Snow::FiddlePointerSupport
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
if const_defined?(:Vec4Array)
|
57
|
+
class Vec4Array
|
58
|
+
include ::Snow::FiddlePointerSupport
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
if const_defined?(:QuatArray)
|
63
|
+
class QuatArray
|
64
|
+
include ::Snow::FiddlePointerSupport
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
if const_defined?(:Mat3Array)
|
69
|
+
class Mat3Array
|
70
|
+
include ::Snow::FiddlePointerSupport
|
71
|
+
end
|
72
|
+
end
|
19
73
|
|
20
|
-
|
74
|
+
if const_defined?(:Mat4Array)
|
75
|
+
class Mat4Array
|
76
|
+
include ::Snow::FiddlePointerSupport
|
21
77
|
end
|
22
|
-
|
78
|
+
end
|
23
79
|
|
24
80
|
end
|
data/lib/snow-math/quat.rb
CHANGED
@@ -7,6 +7,11 @@ require 'snow-math/bindings'
|
|
7
7
|
module Snow ; end
|
8
8
|
|
9
9
|
if Snow.const_defined?(:QuatArray)
|
10
|
+
#
|
11
|
+
# A contiguous array of Quats. Allocated as a single block of memory so that
|
12
|
+
# it can easily be passed back to C libraries (like OpenGL) and to aid with
|
13
|
+
# cache locality.
|
14
|
+
#
|
10
15
|
class Snow::QuatArray
|
11
16
|
class << self ; alias_method :[], :new ; end
|
12
17
|
|
@@ -15,65 +20,116 @@ if Snow.const_defined?(:QuatArray)
|
|
15
20
|
end
|
16
21
|
end
|
17
22
|
|
23
|
+
#
|
24
|
+
# A simple quaternion class for representation rotations.
|
25
|
+
#
|
18
26
|
class Snow::Quat
|
19
27
|
|
20
28
|
class << self ; alias_method :[], :new ; end
|
21
29
|
|
22
30
|
alias_method :[], :fetch
|
23
31
|
alias_method :[]=, :store
|
32
|
+
alias_method :dup, :copy
|
33
|
+
alias_method :clone, :copy
|
24
34
|
|
35
|
+
|
36
|
+
# Returns the X component of the quaternion.
|
37
|
+
#
|
38
|
+
# call-seq: x -> float
|
25
39
|
def x
|
26
40
|
self[0]
|
27
41
|
end
|
28
42
|
|
43
|
+
# Sets the X component of the quaternion.
|
44
|
+
#
|
45
|
+
# call-seq: x = value -> value
|
29
46
|
def x=(value)
|
30
47
|
self[0] = value
|
31
48
|
end
|
32
49
|
|
50
|
+
# Returns the Y component of the quaternion.
|
51
|
+
#
|
52
|
+
# call-seq: y -> float
|
33
53
|
def y
|
34
54
|
self[1]
|
35
55
|
end
|
36
56
|
|
57
|
+
# Sets the Y component of the quaternion.
|
58
|
+
#
|
59
|
+
# call-seq: y = value -> value
|
37
60
|
def y=(value)
|
38
61
|
self[1] = value
|
39
62
|
end
|
40
63
|
|
64
|
+
# Returns the Z component of the quaternion.
|
65
|
+
#
|
66
|
+
# call-seq: z -> float
|
41
67
|
def z
|
42
68
|
self[2]
|
43
69
|
end
|
44
70
|
|
71
|
+
# Sets the Z component of the quaternion.
|
72
|
+
#
|
73
|
+
# call-seq: z = value -> value
|
45
74
|
def z=(value)
|
46
75
|
self[2] = value
|
47
76
|
end
|
48
77
|
|
78
|
+
# Returns the W component of the quaternion.
|
79
|
+
#
|
80
|
+
# call-seq: w -> float
|
49
81
|
def w
|
50
82
|
self[3]
|
51
83
|
end
|
52
84
|
|
85
|
+
# Sets the W component of the quaternion.
|
86
|
+
#
|
87
|
+
# call-seq: w = value -> value
|
53
88
|
def w=(value)
|
54
89
|
self[3] = value
|
55
90
|
end
|
56
91
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
92
|
+
# Calls #normalize(self)
|
93
|
+
#
|
94
|
+
# call-seq: normalize! -> self
|
61
95
|
def normalize!
|
62
96
|
normalize self
|
63
97
|
end
|
64
98
|
|
99
|
+
# Calls #inverse(self)
|
100
|
+
#
|
101
|
+
# call-seq: inverse! -> self
|
65
102
|
def inverse!
|
66
103
|
inverse self
|
67
104
|
end
|
68
105
|
|
106
|
+
# Calls #negate(self)
|
107
|
+
#
|
108
|
+
# call-seq: negate! -> self
|
69
109
|
def negate!
|
70
110
|
negate self
|
71
111
|
end
|
72
112
|
|
113
|
+
# Calls #multiply_quat(rhs, self)
|
114
|
+
#
|
115
|
+
# call-seq: multiply_quat!(rhs) -> self
|
73
116
|
def multiply_quat!(rhs)
|
74
117
|
multiply_quat rhs, self
|
75
118
|
end
|
76
119
|
|
120
|
+
# Calls #multiply_vec3(rhs, rhs)
|
121
|
+
#
|
122
|
+
# call-seq: multiply_vec3!(rhs) -> rhs
|
123
|
+
def multiply_vec3!(rhs)
|
124
|
+
multiply_vec3 rhs, rhs
|
125
|
+
end
|
126
|
+
|
127
|
+
# Wrapper around #multiply_quat, #multiply_vec3, and #scale respectively.
|
128
|
+
#
|
129
|
+
# call-seq:
|
130
|
+
# multiply(quat, output = nil) -> output or new quat
|
131
|
+
# multiply(scalar, output = nil) -> output or new quat
|
132
|
+
# multiply(vec3, output = nil) -> output or new vec3
|
77
133
|
def multiply(rhs, output = nil)
|
78
134
|
case rhs
|
79
135
|
when ::Snow::Quat then multiply_quat(rhs, output)
|
@@ -83,26 +139,56 @@ class Snow::Quat
|
|
83
139
|
end
|
84
140
|
end
|
85
141
|
|
142
|
+
# Calls #multiply(rhs, self) for scaling and Quat multiplication, otherwise
|
143
|
+
# #multiply(rhs, rhs) for Vec3 multiplication.
|
144
|
+
#
|
145
|
+
# call-seq:
|
146
|
+
# multiply!(quat) -> self
|
147
|
+
# multiply!(scalar) -> self
|
148
|
+
# multiply!(vec3) -> vec3
|
86
149
|
def multiply!(rhs)
|
87
|
-
|
150
|
+
case rhs
|
151
|
+
when ::Snow::Vec3 then multiply(rhs, rhs)
|
152
|
+
else multiply(rhs, self)
|
153
|
+
end
|
88
154
|
end
|
89
155
|
|
156
|
+
# Calls #add(rhs, self)
|
157
|
+
#
|
158
|
+
# call-seq: add!(rhs) -> self
|
90
159
|
def add!(rhs)
|
91
160
|
add rhs, self
|
92
161
|
end
|
93
162
|
|
163
|
+
# Calls #subtract(rhs, self)
|
164
|
+
#
|
165
|
+
# call-seq: subtract!(rhs) -> self
|
94
166
|
def subtract!(rhs)
|
95
167
|
subtract rhs, self
|
96
168
|
end
|
97
169
|
|
170
|
+
# Calls #scale(rhs, self)
|
171
|
+
#
|
172
|
+
# call-seq: scale!(rhs) -> self
|
98
173
|
def scale!(rhs)
|
99
174
|
scale rhs, self
|
100
175
|
end
|
101
176
|
|
177
|
+
# Calls #divide(rhs, self)
|
178
|
+
#
|
179
|
+
# call-seq: divide!(rhs) -> self
|
102
180
|
def divide!(rhs)
|
103
181
|
divide rhs, self
|
104
182
|
end
|
105
183
|
|
184
|
+
# Calls #slerp(destination, alpha, self)
|
185
|
+
#
|
186
|
+
# call-seq: slerp!(destination, alpha) -> self
|
187
|
+
def slerp!(destination, alpha)
|
188
|
+
slerp(destination, alpha, self)
|
189
|
+
end
|
190
|
+
|
191
|
+
|
106
192
|
alias_method :-, :subtract
|
107
193
|
alias_method :+, :add
|
108
194
|
alias_method :**, :dot_product
|
data/lib/snow-math/swizzle.rb
CHANGED
@@ -6,57 +6,94 @@ require 'snow-math'
|
|
6
6
|
|
7
7
|
module Snow ; end
|
8
8
|
|
9
|
+
module Snow
|
10
|
+
|
11
|
+
#
|
12
|
+
# Provides swizzle function support for Vec3, Vec4, and Quat. At runtime, if
|
13
|
+
# a message matching `/^[xyzw]{3,4}$/`, sans `w` in Vec3's case, is sent to
|
14
|
+
# any of those types, a new method will be generated to return a swizzled
|
15
|
+
# object of that type or one that contains at least as many elements as
|
16
|
+
# requested.
|
17
|
+
#
|
18
|
+
# For Vec3, valid swizzle components are `x`, `y`, and `z`. If a swizzle
|
19
|
+
# function with three of those components is called, a new Vec3 is returned.
|
20
|
+
# If a swizzle function with four components is called, a Vec4 is returned.
|
21
|
+
# This is the same for Vec4, although it also provides a `w` component.
|
22
|
+
#
|
23
|
+
# For Quat types, behavior is similar to Vec4, though a 4-component swizzle
|
24
|
+
# function returns a Quat instead of a Vec4.
|
25
|
+
#
|
26
|
+
# # Good
|
27
|
+
# Vec3[1, 2, 3].xxx # => Vec3[1, 1, 1]
|
28
|
+
# Vec3[1, 2, 3].xxzz # => Vec4[1, 1, 3, 3]
|
29
|
+
# Vec4[1, 2, 3, 4].xzwy # => Vec4[1, 3, 4, 2]
|
30
|
+
# Quat[1, 2, 3, 4].wzyx # => Quat[4, 3, 2, 1]
|
31
|
+
#
|
32
|
+
# # Bad
|
33
|
+
# Vec3[1, 2, 3].www # => Invalid, no W component for Vec3
|
34
|
+
# Vec3[1, 2, 3].xx # => Invalid, no 2-component vector type
|
35
|
+
# Vec3[1, 2, 3].xxxxx # => Invalid, no 5-component vector type
|
36
|
+
#
|
37
|
+
module SwizzleSupport
|
38
|
+
|
39
|
+
alias_method :__under_method_missing__, :method_missing
|
40
|
+
|
41
|
+
#
|
42
|
+
# Generates a swizzle function according to a class's @@SWIZZLE_CHARS and
|
43
|
+
# @@SWIZZLE_MAPPING class variables.
|
44
|
+
#
|
45
|
+
# Overrides old method_missing implementation. The old implementation is
|
46
|
+
# aliased as \_\_under_method_missing__ and called when no swizzle function
|
47
|
+
# can be generated for a symbol.
|
48
|
+
#
|
49
|
+
def method_missing(sym, *args)
|
50
|
+
chars = sym.to_s
|
51
|
+
if chars =~ self.class.class_variable_get(:@@SWIZZLE_CHARS)
|
52
|
+
mapping = self.class.class_variable_get(:@@SWIZZLE_MAPPING)
|
53
|
+
arg_indices = chars.each_char.map {
|
54
|
+
|char|
|
55
|
+
index = mapping[char]
|
56
|
+
if index.nil?
|
57
|
+
raise ArgumentError, "No index mapping for swizzle character #{char} found"
|
58
|
+
end
|
59
|
+
index
|
60
|
+
}
|
61
|
+
swizzle_klass = mapping[chars.length]
|
62
|
+
|
63
|
+
if swizzle_klass.nil?
|
64
|
+
raise ArgumentError, "No swizzle class defined for #{chars.length} components"
|
65
|
+
end
|
66
|
+
|
67
|
+
self.class.class_exec(arg_indices, swizzle_klass) {
|
68
|
+
|indices, klass|
|
69
|
+
define_method(sym) {
|
70
|
+
klass.new(indices.map { |index| self.fetch(index) })
|
71
|
+
}
|
72
|
+
}
|
73
|
+
return self.send(sym)
|
74
|
+
end
|
75
|
+
|
76
|
+
__under_method_missing__ sym, *args
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
9
83
|
class Snow::Vec3
|
10
84
|
@@SWIZZLE_CHARS = /^[xyz]{3,4}$/
|
11
85
|
@@SWIZZLE_MAPPING = { 3 => self, 4 => ::Snow::Vec4, 'x' => 0, 'y' => 1, 'z' => 2 }
|
86
|
+
include ::Snow::SwizzleSupport
|
12
87
|
end
|
13
88
|
|
14
89
|
class Snow::Vec4
|
15
90
|
@@SWIZZLE_CHARS = /^[xyzw]{3,4}$/
|
16
91
|
@@SWIZZLE_MAPPING = { 3 => ::Snow::Vec3, 4 => self, 'x' => 0, 'y' => 1, 'z' => 2, 'w' => 3 }
|
92
|
+
include ::Snow::SwizzleSupport
|
17
93
|
end
|
18
94
|
|
19
95
|
class Snow::Quat
|
20
96
|
@@SWIZZLE_CHARS = /^[xyzw]{3,4}$/
|
21
97
|
@@SWIZZLE_MAPPING = { 3 => ::Snow::Vec3, 4 => self, 'x' => 0, 'y' => 1, 'z' => 2, 'w' => 3 }
|
22
|
-
|
23
|
-
|
24
|
-
module Snow
|
25
|
-
|
26
|
-
[:Vec3, :Vec4, :Quat].each {
|
27
|
-
|klass_sym|
|
28
|
-
|
29
|
-
const_get(klass_sym).class_exec {
|
30
|
-
|
31
|
-
def method_missing(sym, *args)
|
32
|
-
chars = sym.to_s
|
33
|
-
if chars =~ self.class.class_variable_get(:@@SWIZZLE_CHARS)
|
34
|
-
mapping = self.class.class_variable_get(:@@SWIZZLE_MAPPING)
|
35
|
-
arg_indices = chars.each_char.map {
|
36
|
-
|char|
|
37
|
-
index = mapping[char]
|
38
|
-
if index.nil?
|
39
|
-
raise ArgumentError, "No index mapping for swizzle character #{char} found"
|
40
|
-
end
|
41
|
-
index
|
42
|
-
}
|
43
|
-
swizzle_klass = mapping[chars.length]
|
44
|
-
|
45
|
-
if swizzle_klass.nil?
|
46
|
-
raise ArgumentError, "No swizzle class defined for #{chars.length} components"
|
47
|
-
end
|
48
|
-
|
49
|
-
self.class.class_exec(arg_indices, swizzle_klass) {
|
50
|
-
|indices, klass|
|
51
|
-
define_method(sym) { klass.new(indices.map { |index| self.fetch(index) }) }
|
52
|
-
}
|
53
|
-
return self.send(sym)
|
54
|
-
end
|
55
|
-
|
56
|
-
super sym, *args
|
57
|
-
end
|
58
|
-
|
59
|
-
}
|
60
|
-
}
|
61
|
-
|
98
|
+
include ::Snow::SwizzleSupport
|
62
99
|
end
|
data/lib/snow-math/to_a.rb
CHANGED
@@ -6,43 +6,186 @@ require 'snow-math'
|
|
6
6
|
|
7
7
|
module Snow
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
self
|
37
|
-
end
|
38
|
-
|
39
|
-
def map(&block)
|
40
|
-
return to_enum(:map) unless block_given?
|
41
|
-
self.dup.map!(&block)
|
42
|
-
end
|
9
|
+
#
|
10
|
+
# Provides basic support for converting Snow math objects to Ruby arrays. In
|
11
|
+
# addition, it also provides rudimentary support for each, map, and map! for
|
12
|
+
# all math types.
|
13
|
+
#
|
14
|
+
# For example:
|
15
|
+
#
|
16
|
+
# # Arrays of cells by column
|
17
|
+
# Mat4[*(1 .. 16)].group_by {
|
18
|
+
# |cell|
|
19
|
+
# (cell.floor - 1) % 4
|
20
|
+
# }
|
21
|
+
#
|
22
|
+
# # Arrays of cells by row
|
23
|
+
# Mat4[*(1 .. 16)].group_by {
|
24
|
+
# |cell|
|
25
|
+
# ((cell - 1) / 4).floor
|
26
|
+
# } # => { 0 => [1, 2, 3, 4],
|
27
|
+
# # 1 => [5, 6, 7, 8],
|
28
|
+
# # 2 => [9, 10, 11, 12],
|
29
|
+
# # 3 => [13, 14, 15, 16] }
|
30
|
+
#
|
31
|
+
# Note that these examples are only showing that you can use these types like
|
32
|
+
# most others that include the Enumerable module. The above examples are not
|
33
|
+
# sane ways to get columns or rows out of a Mat4.
|
34
|
+
#
|
35
|
+
module ArraySupport
|
43
36
|
|
37
|
+
include ::Enumerable
|
38
|
+
|
39
|
+
#
|
40
|
+
# Returns an array composed of the elements of self.
|
41
|
+
#
|
42
|
+
# call-seq: to_a -> new_ary
|
43
|
+
#
|
44
|
+
def to_a
|
45
|
+
(0 ... self.length).each.map { |index| fetch(index) }
|
46
|
+
end
|
47
|
+
|
48
|
+
#
|
49
|
+
# Iterates over all elements of the object and yields them to a block.
|
50
|
+
# In the second form, returns an Enumerator.
|
51
|
+
#
|
52
|
+
# call-seq:
|
53
|
+
# each { |elem| block } -> self
|
54
|
+
# each -> Enumerator
|
55
|
+
#
|
56
|
+
def each(&block)
|
57
|
+
return to_enum(:each) unless block_given?
|
58
|
+
(0 ... self.length).each {
|
59
|
+
|index|
|
60
|
+
yield(fetch(index))
|
44
61
|
}
|
62
|
+
self
|
63
|
+
end
|
64
|
+
|
65
|
+
#
|
66
|
+
# In the first form, iterates over all elements of the object, yields them
|
67
|
+
# to the block given, and overwrites the element's value with the value
|
68
|
+
# returned by the block.
|
69
|
+
#
|
70
|
+
# In the second form, returns an Enumerator.
|
71
|
+
#
|
72
|
+
# The return value of the block must be the same kind of object as was
|
73
|
+
# yielded to the block. So, if yielded a Vec3, the block must return a Vec3.
|
74
|
+
# If yielded a Numeric, it must return a Numeric.
|
75
|
+
#
|
76
|
+
# call-seq:
|
77
|
+
# map! { |elem| block } -> self
|
78
|
+
# map! -> Enumerator
|
79
|
+
#
|
80
|
+
def map!(&block)
|
81
|
+
return to_enum(:map!) unless block_given?
|
82
|
+
(0 ... self.length).each {
|
83
|
+
|index|
|
84
|
+
store(index, yield(fetch(index)))
|
85
|
+
}
|
86
|
+
self
|
87
|
+
end
|
88
|
+
|
89
|
+
#
|
90
|
+
# In the first form, duplicates self and then calls map! on the duplicated
|
91
|
+
# object, passing the block to map!.
|
92
|
+
#
|
93
|
+
# In the second form, returns an Enumerator.
|
94
|
+
#
|
95
|
+
# The return value of the block must be the same kind of object as was
|
96
|
+
# yielded to the block. So, if yielded a Vec3, the block must return a Vec3.
|
97
|
+
# If yielded a Numeric, it must return a Numeric.
|
98
|
+
#
|
99
|
+
# call-seq:
|
100
|
+
# map { |elem| block } -> new object
|
101
|
+
# map -> Enumerator
|
102
|
+
#
|
103
|
+
def map(&block)
|
104
|
+
return to_enum(:map) unless block_given?
|
105
|
+
self.dup.map!(&block)
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
class Vec3 ; include ::Snow::ArraySupport ; end
|
111
|
+
class Vec4 ; include ::Snow::ArraySupport ; end
|
112
|
+
class Quat ; include ::Snow::ArraySupport ; end
|
113
|
+
class Mat3 ; include ::Snow::ArraySupport ; end
|
114
|
+
class Mat4 ; include ::Snow::ArraySupport ; end
|
115
|
+
|
116
|
+
if const_defined?(:Vec3Array)
|
117
|
+
class Vec3Array
|
118
|
+
include ::Snow::ArraySupport
|
119
|
+
|
120
|
+
#
|
121
|
+
# Duplicates the Vec3Array and returns it.
|
122
|
+
#
|
123
|
+
# call-seq: dup -> new vec3_array
|
124
|
+
#
|
125
|
+
def dup
|
126
|
+
self.class.new(self)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
if const_defined?(:Vec4Array)
|
132
|
+
class Vec4Array
|
133
|
+
include ::Snow::ArraySupport
|
134
|
+
|
135
|
+
#
|
136
|
+
# Duplicates the Vec4Array and returns it.
|
137
|
+
#
|
138
|
+
# call-seq: dup -> new vec4_array
|
139
|
+
#
|
140
|
+
def dup
|
141
|
+
self.class.new(self)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
if const_defined?(:QuatArray)
|
147
|
+
class QuatArray
|
148
|
+
include ::Snow::ArraySupport
|
149
|
+
|
150
|
+
#
|
151
|
+
# Duplicates the QuatArray and returns it.
|
152
|
+
#
|
153
|
+
# call-seq: dup -> new quat_array
|
154
|
+
#
|
155
|
+
def dup
|
156
|
+
self.class.new(self)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
if const_defined?(:Mat3Array)
|
162
|
+
class Mat3Array
|
163
|
+
include ::Snow::ArraySupport
|
164
|
+
|
165
|
+
#
|
166
|
+
# Duplicates the Mat3Array and returns it.
|
167
|
+
#
|
168
|
+
# call-seq: dup -> new mat3_array
|
169
|
+
#
|
170
|
+
def dup
|
171
|
+
self.class.new(self)
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
if const_defined?(:Mat4Array)
|
177
|
+
class Mat4Array
|
178
|
+
include ::Snow::ArraySupport
|
179
|
+
|
180
|
+
#
|
181
|
+
# Duplicates the Mat4Array and returns it.
|
182
|
+
#
|
183
|
+
# call-seq: dup -> new mat4_array
|
184
|
+
#
|
185
|
+
def dup
|
186
|
+
self.class.new(self)
|
187
|
+
end
|
45
188
|
end
|
46
|
-
|
189
|
+
end
|
47
190
|
|
48
191
|
end
|