processing 1.1.17 → 1.1.18
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/.github/workflows/release-gem.yml +3 -0
- data/.github/workflows/test-draw.yml +1 -1
- data/.github/workflows/utils.rb +88 -17
- data/ChangeLog.md +8 -0
- data/VERSION +1 -1
- data/lib/processing/all.rb +1 -1
- data/lib/processing/context.rb +1 -1
- data/lib/processing/extension.rb +4 -2
- data/lib/processing/graphics_context.rb +2 -0
- data/lib/processing/shader.rb +9 -7
- data/lib/processing/window.rb +6 -0
- data/processing.gemspec +5 -5
- metadata +10 -10
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cb185e6835ce1e5361fcb66b667eb4d328c2af7e32a047bbb54e3397f4ea6973
|
|
4
|
+
data.tar.gz: 4988d984b6c9ef039902d812ff2af813a967f11e43834cbfc168a980e2cc3179
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '09f27de2e255f090068e1e4a9c3d421debbe37758e64e0436859be28a7a0fcf0fbc43c39f9bcafb913847df3a8eb3ddbe0ee0e5ee7cc9f680f6bef6ddb8cfeb0'
|
|
7
|
+
data.tar.gz: 0b51113d2705579a0f7474aa60d8b73f393afc0f76c30085a87dd9381afa5c98ab69a2062d222550f04b9e06b56ae830898879628e8379323a4bd3ff71e4826d
|
data/.github/workflows/utils.rb
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
require 'shellwords'
|
|
2
|
+
|
|
3
|
+
ALL_REPO = 'xord/all'
|
|
4
|
+
ALL_DIR = '../all'
|
|
5
|
+
ALL_FETCH_DEPTH = 100
|
|
6
|
+
|
|
1
7
|
RENAMES = {reflex: 'reflexion'}
|
|
2
8
|
|
|
3
9
|
def sh(cmd)
|
|
@@ -5,7 +11,7 @@ def sh(cmd)
|
|
|
5
11
|
system cmd
|
|
6
12
|
end
|
|
7
13
|
|
|
8
|
-
def setup_dependencies(
|
|
14
|
+
def setup_dependencies(only: nil)
|
|
9
15
|
gemspec_path = `git ls-files`.lines(chomp: true).find {|l| l =~ /\.gemspec$/}
|
|
10
16
|
return unless gemspec_path
|
|
11
17
|
|
|
@@ -13,44 +19,109 @@ def setup_dependencies(build: true, only: nil)
|
|
|
13
19
|
name = File.basename gemspec_path, '.gemspec'
|
|
14
20
|
|
|
15
21
|
exts = File.readlines('Rakefile')
|
|
16
|
-
.map {|l| l[%r|^\s*require\W+(\w+)/extension\W+$|, 1]}
|
|
22
|
+
.map {|l| l[%r|^\s*require\W+([\w\-\_]+)/extension\W+$|, 1]}
|
|
17
23
|
.compact
|
|
18
24
|
.reject {|ext| ext == name}
|
|
19
25
|
exts = exts & [only].flatten.map(&:to_s) if only
|
|
26
|
+
return if exts.empty?
|
|
27
|
+
|
|
28
|
+
unless setup_dependencies_via_monorepo(exts)
|
|
29
|
+
setup_dependencies_via_each_repo_by_version(gemspec, exts)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
exts.each {|ext| sh %( cd ../#{ext} && rake ext )}
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def setup_dependencies_via_monorepo(exts)
|
|
36
|
+
return false unless checkout_monorepo
|
|
37
|
+
exts.each {|ext| sh %( ln -snf all/#{ext} ../#{ext} )}
|
|
38
|
+
true
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def checkout_monorepo()
|
|
42
|
+
uuid = `git log -1 --format=%B`[/^\[\[([0-9a-fA-F-]+)\]\]$/, 1]
|
|
43
|
+
return false unless uuid
|
|
44
|
+
|
|
45
|
+
commit = setup_monorepo uuid
|
|
46
|
+
return false unless commit
|
|
47
|
+
|
|
48
|
+
Dir.chdir(ALL_DIR) {sh %( git checkout -q #{commit} )}
|
|
49
|
+
true
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def setup_monorepo(uuid)
|
|
53
|
+
unless File.directory? ALL_DIR
|
|
54
|
+
url = "https://github.com/#{ALL_REPO}.git"
|
|
55
|
+
sh %( git clone --no-tags --depth #{ALL_FETCH_DEPTH} #{url} #{ALL_DIR} )
|
|
56
|
+
end
|
|
57
|
+
loop do
|
|
58
|
+
commit = find_monorepo_commit uuid
|
|
59
|
+
return commit if commit
|
|
60
|
+
|
|
61
|
+
deepened = Dir.chdir ALL_DIR do
|
|
62
|
+
before = `git rev-list --count HEAD`.to_i
|
|
63
|
+
sh %( git fetch --deepen #{ALL_FETCH_DEPTH} )
|
|
64
|
+
`git rev-list --count HEAD`.to_i > before
|
|
65
|
+
end
|
|
66
|
+
return nil unless deepened
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def find_monorepo_commit(uuid)
|
|
71
|
+
Dir.chdir ALL_DIR do
|
|
72
|
+
out = `git log origin/HEAD -F --grep="[[#{uuid}]]" --format=%H -1`.strip
|
|
73
|
+
out.empty? ? nil : out
|
|
74
|
+
end
|
|
75
|
+
end
|
|
20
76
|
|
|
77
|
+
def setup_dependencies_via_each_repo_by_version(gemspec, exts)
|
|
21
78
|
exts.each do |ext|
|
|
22
79
|
gem = RENAMES[ext.to_sym].then {|s| s || ext}
|
|
23
|
-
ver = gemspec[/add_dependency.*['"]#{gem}['"].*['"]\s
|
|
80
|
+
ver = gemspec[/add_dependency.*['"]#{gem}['"].*['"]\s*~>\s*([\d\.]+)\s*['"]/, 1]
|
|
24
81
|
opts = '-c advice.detachedHead=false --depth 1'
|
|
25
82
|
clone = "git clone #{opts} https://github.com/xord/#{ext}.git ../#{ext}"
|
|
26
83
|
|
|
27
84
|
# 'rake subtree:push' pushes all subrepos, so cloning by new tag
|
|
28
85
|
# often fails before tagging each new tag
|
|
29
86
|
sh %( #{clone} --branch v#{ver} || #{clone} )
|
|
30
|
-
sh %( cd ../#{ext} && rake ext )
|
|
31
87
|
end
|
|
32
88
|
end
|
|
33
89
|
|
|
34
90
|
def tag_versions()
|
|
35
|
-
|
|
36
|
-
|
|
91
|
+
changes = changelogs
|
|
92
|
+
tags = `git tag`.lines chomp: true
|
|
93
|
+
vers = `git log --oneline ./VERSION`
|
|
37
94
|
.lines(chomp: true)
|
|
38
95
|
.map {|line| line.split.first[/^\w+$/]}
|
|
39
|
-
.map {|
|
|
40
|
-
.select {|ver,
|
|
96
|
+
.map {|sha| [`git cat-file -p #{sha}:./VERSION 2>/dev/null`[/[\d\.]+/], sha]}
|
|
97
|
+
.select {|ver, sha| ver && sha}
|
|
41
98
|
.reverse
|
|
42
99
|
.to_h
|
|
43
100
|
|
|
44
|
-
|
|
45
|
-
.split(/^\s*##\s*\[\s*v([\d\.]+)\s*\].*$/)
|
|
46
|
-
.slice(1..-1)
|
|
47
|
-
.each_slice(2)
|
|
48
|
-
.to_h
|
|
49
|
-
.transform_values(&:strip!)
|
|
50
|
-
|
|
51
|
-
vers.to_a.reverse.each do |ver, hash|
|
|
101
|
+
vers.to_a.reverse.each do |ver, sha|
|
|
52
102
|
tag = "v#{ver}"
|
|
53
103
|
break if tags.include?(tag)
|
|
54
|
-
sh %( git tag -a -m \"#{changes[
|
|
104
|
+
sh %( git tag -a -m \"#{changes[tag]&.gsub '"', '\\"'}\" #{tag} #{sha} )
|
|
55
105
|
end
|
|
56
106
|
end
|
|
107
|
+
|
|
108
|
+
def release(*paths)
|
|
109
|
+
tag = ENV['GITHUB_REF']&.sub(%r|^refs/tags/|, '') || raise('GITHUB_REF tag not set')
|
|
110
|
+
notes = (changelogs[tag] || '').shellescape
|
|
111
|
+
paths = paths.flatten.join ' '
|
|
112
|
+
|
|
113
|
+
sh(%( gh release create #{tag} #{paths} --notes #{notes} )) ||
|
|
114
|
+
sh(%( gh release upload #{tag} #{paths} --clobber )) ||
|
|
115
|
+
raise('failed to upload to releases')
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def changelogs()
|
|
119
|
+
File.read('ChangeLog.md')
|
|
120
|
+
.split(/^\s*##\s*\[\s*(v[\d\.]+)\s*\].*$/)
|
|
121
|
+
.slice(1..)
|
|
122
|
+
.each_slice(2)
|
|
123
|
+
.to_h
|
|
124
|
+
.transform_values(&:strip!)
|
|
125
|
+
rescue Errno::ENOENT
|
|
126
|
+
raise 'failed to get changelogs'
|
|
127
|
+
end
|
data/ChangeLog.md
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
# processing ChangeLog
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## [v1.1.18] - 2026-05-10
|
|
5
|
+
|
|
6
|
+
- Support WebAssembly
|
|
7
|
+
- Disable auto-GC on WASM to avoid mid-draw Asyncify yield
|
|
8
|
+
- Lazy-load net/http and disable HTTP fetch on WASM
|
|
9
|
+
- Skip tmpdir cleanup on WASM
|
|
10
|
+
|
|
11
|
+
|
|
4
12
|
## [v1.1.17] - 2026-04-17
|
|
5
13
|
|
|
6
14
|
- Update dependencies
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.1.
|
|
1
|
+
1.1.18
|
data/lib/processing/all.rb
CHANGED
data/lib/processing/context.rb
CHANGED
data/lib/processing/extension.rb
CHANGED
|
@@ -3449,6 +3449,8 @@ module Processing
|
|
|
3449
3449
|
path = path.sub_ext ext
|
|
3450
3450
|
|
|
3451
3451
|
unless path.file?
|
|
3452
|
+
raise NotImplementedError, 'HTTP request is not supported on WASM' if Xot.wasm?
|
|
3453
|
+
require 'net/http'
|
|
3452
3454
|
Net::HTTP.get_response URI.parse(uri) do |res|
|
|
3453
3455
|
res.value # raise an error unless successful
|
|
3454
3456
|
tmpdir.mkdir unless tmpdir.directory?
|
data/lib/processing/shader.rb
CHANGED
|
@@ -71,15 +71,17 @@ module Processing
|
|
|
71
71
|
ENV__ = {
|
|
72
72
|
attribute_position: [:vertex, :position],
|
|
73
73
|
attribute_texcoord: :texCoord,
|
|
74
|
+
attribute_texcoord_min: :texCoordMin,
|
|
75
|
+
attribute_texcoord_max: :texCoordMax,
|
|
74
76
|
attribute_color: :color,
|
|
75
77
|
varying_position: :vertPosition,
|
|
76
78
|
varying_texcoord: :vertTexCoord,
|
|
79
|
+
varying_texcoord_min: :vertTexCoordMin,
|
|
80
|
+
varying_texcoord_max: :vertTexCoordMax,
|
|
77
81
|
varying_color: :vertColor,
|
|
78
82
|
uniform_position_matrix: [:transform, :transformMatrix],
|
|
79
83
|
uniform_texcoord_matrix: :texMatrix,
|
|
80
|
-
|
|
81
|
-
uniform_texcoord_max: :texMax,
|
|
82
|
-
uniform_texcoord_offset: :texOffset,
|
|
84
|
+
uniform_texcoord_pixel: :texOffset,
|
|
83
85
|
uniform_texture: [:texMap, :texture]
|
|
84
86
|
}.freeze
|
|
85
87
|
|
|
@@ -144,10 +146,10 @@ module Processing
|
|
|
144
146
|
#define PI 3.1415926538
|
|
145
147
|
uniform float radius;
|
|
146
148
|
uniform sampler2D texMap;
|
|
147
|
-
uniform vec3 texMin;
|
|
148
|
-
uniform vec3 texMax;
|
|
149
149
|
uniform vec3 texOffset;
|
|
150
150
|
varying vec4 vertTexCoord;
|
|
151
|
+
varying vec3 vertTexCoordMin;
|
|
152
|
+
varying vec3 vertTexCoordMax;
|
|
151
153
|
varying vec4 vertColor;
|
|
152
154
|
float gaussian(vec2 pos, float sigma) {
|
|
153
155
|
float s2 = sigma * sigma;
|
|
@@ -163,8 +165,8 @@ module Processing
|
|
|
163
165
|
float weight = gaussian(offset, sigma);
|
|
164
166
|
vec2 texcoord = vertTexCoord.xy + offset * texOffset.xy;
|
|
165
167
|
if (
|
|
166
|
-
texcoord.x <
|
|
167
|
-
texcoord.y <
|
|
168
|
+
texcoord.x < vertTexCoordMin.x || vertTexCoordMax.x < texcoord.x ||
|
|
169
|
+
texcoord.y < vertTexCoordMin.y || vertTexCoordMax.y < texcoord.y
|
|
168
170
|
) continue;
|
|
169
171
|
color += texture2D(texMap, texcoord).rgb * weight;
|
|
170
172
|
total_weight += weight;
|
data/lib/processing/window.rb
CHANGED
|
@@ -17,6 +17,11 @@ module Processing
|
|
|
17
17
|
@canvas_view = add CanvasView.new name: :canvas
|
|
18
18
|
@overlay_view = @canvas_view.add Reflex::View.new name: :overlay
|
|
19
19
|
|
|
20
|
+
# On WASM, auto-GC may yield mid-draw via Asyncify and cause partial
|
|
21
|
+
# frames to be presented. Disable auto-GC and run GC.start manually
|
|
22
|
+
# at a safe point (on_canvas_update) to avoid this.
|
|
23
|
+
GC.disable if Xot.wasm?
|
|
24
|
+
|
|
20
25
|
super(*args, size: [width, height], **kwargs, &block)
|
|
21
26
|
|
|
22
27
|
self.center = screen.center
|
|
@@ -101,6 +106,7 @@ module Processing
|
|
|
101
106
|
def on_canvas_update(e)
|
|
102
107
|
call_block @update, e
|
|
103
108
|
@canvas_view.redraw
|
|
109
|
+
GC.start if Xot.wasm? # explicit GC at a safe point (no draw in progress)
|
|
104
110
|
end
|
|
105
111
|
|
|
106
112
|
def on_canvas_draw(e)
|
data/processing.gemspec
CHANGED
|
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
ext = Processing::Extension
|
|
13
|
-
name = ext.name
|
|
13
|
+
name = ext.name true
|
|
14
14
|
rdocs = glob.call *%w[README]
|
|
15
15
|
|
|
16
16
|
s.name = name
|
|
@@ -26,10 +26,10 @@ Gem::Specification.new do |s|
|
|
|
26
26
|
s.required_ruby_version = '>= 3.0.0'
|
|
27
27
|
|
|
28
28
|
s.add_dependency 'rexml'
|
|
29
|
-
s.add_dependency 'xot', '~> 0.3.
|
|
30
|
-
s.add_dependency 'rucy', '~> 0.3.
|
|
31
|
-
s.add_dependency 'rays', '~> 0.3.
|
|
32
|
-
s.add_dependency 'reflexion', '~> 0.3.
|
|
29
|
+
s.add_dependency 'xot', '~> 0.3.12'
|
|
30
|
+
s.add_dependency 'rucy', '~> 0.3.12'
|
|
31
|
+
s.add_dependency 'rays', '~> 0.3.12'
|
|
32
|
+
s.add_dependency 'reflexion', '~> 0.3.15'
|
|
33
33
|
|
|
34
34
|
s.files = `git ls-files`.split $/
|
|
35
35
|
s.test_files = s.files.grep %r{^(test|spec|features)/}
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: processing
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1.
|
|
4
|
+
version: 1.1.18
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- xordog
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-05-09 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rexml
|
|
@@ -30,56 +30,56 @@ dependencies:
|
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 0.3.
|
|
33
|
+
version: 0.3.12
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: 0.3.
|
|
40
|
+
version: 0.3.12
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: rucy
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 0.3.
|
|
47
|
+
version: 0.3.12
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 0.3.
|
|
54
|
+
version: 0.3.12
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: rays
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: 0.3.
|
|
61
|
+
version: 0.3.12
|
|
62
62
|
type: :runtime
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: 0.3.
|
|
68
|
+
version: 0.3.12
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: reflexion
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
73
|
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: 0.3.
|
|
75
|
+
version: 0.3.15
|
|
76
76
|
type: :runtime
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: 0.3.
|
|
82
|
+
version: 0.3.15
|
|
83
83
|
description: Creative Coding Framework has API compatible to Processing or p5.js.
|
|
84
84
|
email: xordog@gmail.com
|
|
85
85
|
executables: []
|