processing 0.5.33 → 0.5.34

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,60 @@ 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 setFrame__()
219
+ raise NotImplementedError
220
+ end
221
+
222
+ # @private
223
+ def getCurrentFrame__()
224
+ raise NotImplementedError
225
+ end
226
+
227
+ # @private
228
+ def setFrame__()
229
+ raise NotImplementedError
230
+ end
231
+
232
+ # @private
233
+ def numFrames__()
234
+ raise NotImplementedError
235
+ end
236
+
237
+ # @private
238
+ def play__()
239
+ raise NotImplementedError
240
+ end
241
+
242
+ # @private
243
+ def pause__()
244
+ raise NotImplementedError
245
+ end
246
+
247
+ # @private
248
+ def delay__()
249
+ raise NotImplementedError
250
+ end
251
+
164
252
  # Saves image to file.
165
253
  #
166
254
  # @param filename [String] file name to save image
167
255
  #
168
256
  # @return [nil] nil
169
257
  #
258
+ # @see https://processing.org/reference/PImage_save_.html
259
+ # @see https://p5js.org/reference/#/p5.Image/save
260
+ #
170
261
  def save(filename)
171
262
  getInternal__.save filename
172
263
  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