processing 0.5.33 → 1.0.1

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.
@@ -3,6 +3,9 @@ module Processing
3
3
 
4
4
  # Image object.
5
5
  #
6
+ # @see https://processing.org/reference/PImage.html
7
+ # @see https://p5js.org/reference/#/p5.Image
8
+ #
6
9
  class Image
7
10
 
8
11
  include Xot::Inspectable
@@ -17,6 +20,9 @@ module Processing
17
20
  #
18
21
  # @return [Numeric] width of image
19
22
  #
23
+ # @see https://processing.org/reference/PImage_width.html
24
+ # @see https://p5js.org/reference/#/p5.Image/width
25
+ #
20
26
  def width()
21
27
  @image&.width || (@error ? -1 : 0)
22
28
  end
@@ -25,6 +31,9 @@ module Processing
25
31
  #
26
32
  # @return [Numeric] height of image
27
33
  #
34
+ # @see https://processing.org/reference/PImage_height.html
35
+ # @see https://p5js.org/reference/#/p5.Image/height
36
+ #
28
37
  def height()
29
38
  @image&.height || (@error ? -1 : 0)
30
39
  end
@@ -48,6 +57,9 @@ module Processing
48
57
  #
49
58
  # @return [nil] nil
50
59
  #
60
+ # @see https://processing.org/reference/PImage_set_.html
61
+ # @see https://p5js.org/reference/#/p5.Image/set
62
+ #
51
63
  def set(x, y, c)
52
64
  getInternal__.bitmap(true)[x, y] = self.class.fromColor__(c).map {|n| n / 255.0}
53
65
  nil
@@ -57,6 +69,9 @@ module Processing
57
69
  #
58
70
  # @return [Integer] color value (0xAARRGGBB)
59
71
  #
72
+ # @see https://processing.org/reference/PImage_get_.html
73
+ # @see https://p5js.org/reference/#/p5.Image/get
74
+ #
60
75
  def get(x, y)
61
76
  getInternal__.bitmap[x, y]
62
77
  .map {|n| (n * 255).to_i.clamp 0, 255}
@@ -67,6 +82,9 @@ module Processing
67
82
  #
68
83
  # @return [nil] nil
69
84
  #
85
+ # @see https://processing.org/reference/PImage_loadPixels_.html
86
+ # @see https://p5js.org/reference/#/p5.Image/loadPixels
87
+ #
70
88
  def loadPixels()
71
89
  @pixels = getInternal__.pixels
72
90
  end
@@ -75,6 +93,9 @@ module Processing
75
93
  #
76
94
  # @return [nil] nil
77
95
  #
96
+ # @see https://processing.org/reference/PImage_updatePixels_.html
97
+ # @see https://p5js.org/reference/#/p5.Image/updatePixels
98
+ #
78
99
  def updatePixels()
79
100
  return unless @pixels
80
101
  getInternal__.pixels = @pixels
@@ -84,6 +105,11 @@ module Processing
84
105
  # An array of all pixels.
85
106
  # Call loadPixels() before accessing the array.
86
107
  #
108
+ # @return [Array] color array
109
+ #
110
+ # @see https://processing.org/reference/PImage_pixels.html
111
+ # @see https://p5js.org/reference/#/p5.Image/pixels
112
+ #
87
113
  attr_reader :pixels
88
114
 
89
115
  # Applies an image filter.
@@ -96,6 +122,9 @@ module Processing
96
122
  # @param type [THRESHOLD, GRAY, INVERT, BLUR] filter type
97
123
  # @param param [Numeric] a parameter for each filter
98
124
  #
125
+ # @see https://processing.org/reference/PImage_filter_.html
126
+ # @see https://p5js.org/reference/#/p5.Image/filter
127
+ #
99
128
  def filter(*args)
100
129
  @filter = Shader.createFilter__(*args)
101
130
  end
@@ -107,6 +136,9 @@ module Processing
107
136
  #
108
137
  # @return [nil] nil
109
138
  #
139
+ # @see https://processing.org/reference/PImage_resize_.html
140
+ # @see https://p5js.org/reference/#/p5.Image/resize
141
+ #
110
142
  def resize(width, height)
111
143
  @image = Rays::Image.new(width, height).paint do |painter|
112
144
  painter.image getInternal__, 0, 0, width, height
@@ -131,10 +163,18 @@ module Processing
131
163
  #
132
164
  # @return [nil] nil
133
165
  #
166
+ # @see https://processing.org/reference/PImage_copy_.html
167
+ # @see https://p5js.org/reference/#/p5.Image/copy
168
+ #
134
169
  def copy(img = nil, sx, sy, sw, sh, dx, dy, dw, dh)
135
170
  blend img, sx, sy, sw, sh, dx, dy, dw, dh, :normal
136
171
  end
137
172
 
173
+ # @private
174
+ def mask__()
175
+ raise NotImplementedError
176
+ end
177
+
138
178
  # Blends image.
139
179
  #
140
180
  # @overload blend(sx, sy, sw, sh, dx, dy, dw, dh, mode)
@@ -153,6 +193,9 @@ module Processing
153
193
  #
154
194
  # @return [nil] nil
155
195
  #
196
+ # @see https://processing.org/reference/PImage_blend_.html
197
+ # @see https://p5js.org/reference/#/p5.Image/blend
198
+ #
156
199
  def blend(img = nil, sx, sy, sw, sh, dx, dy, dw, dh, mode)
157
200
  img ||= self
158
201
  getInternal__.paint do |painter|
@@ -161,12 +204,55 @@ module Processing
161
204
  nil
162
205
  end
163
206
 
207
+ # @private
208
+ def blendColor__()
209
+ raise NotImplementedError
210
+ end
211
+
212
+ # @private
213
+ def reset__()
214
+ raise NotImplementedError
215
+ end
216
+
217
+ # @private
218
+ def getCurrentFrame__()
219
+ raise NotImplementedError
220
+ end
221
+
222
+ # @private
223
+ def setFrame__()
224
+ raise NotImplementedError
225
+ end
226
+
227
+ # @private
228
+ def numFrames__()
229
+ raise NotImplementedError
230
+ end
231
+
232
+ # @private
233
+ def play__()
234
+ raise NotImplementedError
235
+ end
236
+
237
+ # @private
238
+ def pause__()
239
+ raise NotImplementedError
240
+ end
241
+
242
+ # @private
243
+ def delay__()
244
+ raise NotImplementedError
245
+ end
246
+
164
247
  # Saves image to file.
165
248
  #
166
249
  # @param filename [String] file name to save image
167
250
  #
168
251
  # @return [nil] nil
169
252
  #
253
+ # @see https://processing.org/reference/PImage_save_.html
254
+ # @see https://p5js.org/reference/#/p5.Image/save
255
+ #
170
256
  def save(filename)
171
257
  getInternal__.save filename
172
258
  nil
@@ -3,6 +3,9 @@ module Processing
3
3
 
4
4
  # Shader object.
5
5
  #
6
+ # @see https://processing.org/reference/PShader.html
7
+ # @see https://p5js.org/reference/#/p5.Shader
8
+ #
6
9
  class Shader
7
10
 
8
11
  include Xot::Inspectable
@@ -13,7 +16,7 @@ module Processing
13
16
  # @param fragSrc [String] fragment shader source
14
17
  #
15
18
  def initialize(vertSrc, fragSrc)
16
- @shader = Rays::Shader.new modifyFragSource(fragSrc), vertSrc, ENV__
19
+ @shader = Rays::Shader.new modifyFragSource__(fragSrc), vertSrc, ENV__
17
20
  end
18
21
 
19
22
  # Sets uniform variables.
@@ -37,7 +40,10 @@ module Processing
37
40
  # @param ncoords [Integer] number of coordinates, max 4
38
41
  # @param tex [Image] texture image
39
42
  #
40
- def setUniform(name, *args)
43
+ # @see https://processing.org/reference/PShader_set_.html
44
+ # @see https://p5js.org/reference/#/p5.Shader/setUniform
45
+ #
46
+ def set(name, *args)
41
47
  arg = args.first
42
48
  case
43
49
  when Array === arg
@@ -54,7 +60,7 @@ module Processing
54
60
  end
55
61
  end
56
62
 
57
- alias set setUniform
63
+ alias setUniform set
58
64
 
59
65
  # @private
60
66
  def getInternal__()
@@ -83,13 +89,13 @@ module Processing
83
89
  when Shader
84
90
  arg
85
91
  when :threshold
86
- self.new(nil, THRESHOLD_SOURCE).tap {|sh| sh.set :threshold, (args.shift || 0.5)}
92
+ self.new(nil, THRESHOLD_SOURCE__).tap {|sh| sh.set :threshold, (args.shift || 0.5)}
87
93
  when :gray
88
- self.new nil, GRAY_SOURCE
94
+ self.new nil, GRAY_SOURCE__
89
95
  when :invert
90
- self.new nil, INVERT_SOURCE
96
+ self.new nil, INVERT_SOURCE__
91
97
  when :blur
92
- self.new(nil, BLUR_SOURCE).tap {|sh| sh.set :radius, (args.shift || 1).to_f}
98
+ self.new(nil, BLUR_SOURCE__).tap {|sh| sh.set :radius, (args.shift || 1).to_f}
93
99
  else
94
100
  nil
95
101
  end
@@ -97,7 +103,8 @@ module Processing
97
103
 
98
104
  private
99
105
 
100
- THRESHOLD_SOURCE = <<~END
106
+ # @private
107
+ THRESHOLD_SOURCE__ = <<~END
101
108
  uniform float threshold;
102
109
  uniform sampler2D texMap;
103
110
  varying vec4 vertTexCoord;
@@ -109,7 +116,8 @@ module Processing
109
116
  }
110
117
  END
111
118
 
112
- GRAY_SOURCE = <<~END
119
+ # @private
120
+ GRAY_SOURCE__ = <<~END
113
121
  uniform sampler2D texMap;
114
122
  varying vec4 vertTexCoord;
115
123
  varying vec4 vertColor;
@@ -120,7 +128,8 @@ module Processing
120
128
  }
121
129
  END
122
130
 
123
- INVERT_SOURCE = <<~END
131
+ # @private
132
+ INVERT_SOURCE__ = <<~END
124
133
  uniform sampler2D texMap;
125
134
  varying vec4 vertTexCoord;
126
135
  varying vec4 vertColor;
@@ -130,7 +139,8 @@ module Processing
130
139
  }
131
140
  END
132
141
 
133
- BLUR_SOURCE = <<~END
142
+ # @private
143
+ BLUR_SOURCE__ = <<~END
134
144
  #define PI 3.1415926538
135
145
  uniform float radius;
136
146
  uniform sampler2D texMap;
@@ -163,9 +173,10 @@ module Processing
163
173
  }
164
174
  END
165
175
 
166
- def modifyFragSource(source)
176
+ # @private
177
+ def modifyFragSource__(source)
167
178
  return nil unless source
168
- if hasShadertoyMainImage?(source) && source !~ /void\s+main\s*\(/
179
+ if hasShadertoyMainImage__?(source) && source !~ /void\s+main\s*\(/
169
180
  source += <<~END
170
181
  varying vec4 vertTexCoord;
171
182
  void main() {
@@ -178,7 +189,7 @@ module Processing
178
189
  iResolution: :vec2,
179
190
  iMouse: :vec2
180
191
  }.each do |uniformName, type|
181
- if needsUniformDeclaration type, uniformName, source
192
+ if needsUniformDeclaration__ type, uniformName, source
182
193
  source = <<~END + source
183
194
  uniform #{type} #{uniformName};
184
195
  END
@@ -187,11 +198,13 @@ module Processing
187
198
  source
188
199
  end
189
200
 
190
- def hasShadertoyMainImage?(source)
201
+ # @private
202
+ def hasShadertoyMainImage__?(source)
191
203
  source =~ /void\s+mainImage\s*\(\s*out\s+vec4\s+\w+\s*,\s*in\s+vec2\s+\w+\s*\)/
192
204
  end
193
205
 
194
- def needsUniformDeclaration(type, uniformName, source)
206
+ # @private
207
+ def needsUniformDeclaration__(type, uniformName, source)
195
208
  source.include?(uniformName.to_s) &&
196
209
  source !~ /uniform\s+#{type}\s+#{uniformName}/
197
210
  end