pixelflow_canvas 0.4.2 → 0.4.3
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/lib/pixelflow_canvas/version.rb +1 -1
- data/lib/pixelflow_canvas/vga_palette.rb +50 -0
- data/lib/pixelflow_canvas.rb +37 -5
- data/test-anaglyph.rb +3 -1
- data/test-sirds.rb +2 -1
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 03bac01ad660c83aac3bb58e8b9dc009f07d99d773ebf3e4c9c77106c9016a08
|
4
|
+
data.tar.gz: 810c59ec0266aec7f5b4b20b7b411fe5e7c4383db0dd0c1614e0fc1446ae5ffc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f4d69987a229d3c369acaab172efb8d39a189ed739b0e21f5078de233b612eff4b8daaf9d85eea46a8b9c5020aafdc528fd3e6cca2f5618ca3d87e5328f1b41
|
7
|
+
data.tar.gz: 921f5a582cd70c7024e502feae11dbd2eed01eb59fa6487bc9534913b859125d8d0fe6a13665bf389184137a6f9f2b563be266832002e5fa88c772b5e5476b6f
|
@@ -0,0 +1,50 @@
|
|
1
|
+
VGA_PALETTE = [
|
2
|
+
0x00,0x00,0x00,0x00,0x00,0xaa,0x00,0xaa,0x00,0x00,0xaa,0xaa,0xaa,0x00,0x00,0xaa,
|
3
|
+
0x00,0xaa,0xaa,0x55,0x00,0xaa,0xaa,0xaa,0x55,0x55,0x55,0x55,0x55,0xff,0x55,0xff,
|
4
|
+
0x55,0x55,0xff,0xff,0xff,0x55,0x55,0xff,0x55,0xff,0xff,0xff,0x55,0xff,0xff,0xff,
|
5
|
+
0x00,0x00,0x00,0x14,0x14,0x14,0x20,0x20,0x20,0x2c,0x2c,0x2c,0x38,0x38,0x38,0x45,
|
6
|
+
0x45,0x45,0x51,0x51,0x51,0x61,0x61,0x61,0x71,0x71,0x71,0x82,0x82,0x82,0x92,0x92,
|
7
|
+
0x92,0xa2,0xa2,0xa2,0xb6,0xb6,0xb6,0xcb,0xcb,0xcb,0xe3,0xe3,0xe3,0xff,0xff,0xff,
|
8
|
+
0x00,0x00,0xff,0x41,0x00,0xff,0x7d,0x00,0xff,0xbe,0x00,0xff,0xff,0x00,0xff,0xff,
|
9
|
+
0x00,0xbe,0xff,0x00,0x7d,0xff,0x00,0x41,0xff,0x00,0x00,0xff,0x41,0x00,0xff,0x7d,
|
10
|
+
0x00,0xff,0xbe,0x00,0xff,0xff,0x00,0xbe,0xff,0x00,0x7d,0xff,0x00,0x41,0xff,0x00,
|
11
|
+
0x00,0xff,0x00,0x00,0xff,0x41,0x00,0xff,0x7d,0x00,0xff,0xbe,0x00,0xff,0xff,0x00,
|
12
|
+
0xbe,0xff,0x00,0x7d,0xff,0x00,0x41,0xff,0x7d,0x7d,0xff,0x9e,0x7d,0xff,0xbe,0x7d,
|
13
|
+
0xff,0xdf,0x7d,0xff,0xff,0x7d,0xff,0xff,0x7d,0xdf,0xff,0x7d,0xbe,0xff,0x7d,0x9e,
|
14
|
+
0xff,0x7d,0x7d,0xff,0x9e,0x7d,0xff,0xbe,0x7d,0xff,0xdf,0x7d,0xff,0xff,0x7d,0xdf,
|
15
|
+
0xff,0x7d,0xbe,0xff,0x7d,0x9e,0xff,0x7d,0x7d,0xff,0x7d,0x7d,0xff,0x9e,0x7d,0xff,
|
16
|
+
0xbe,0x7d,0xff,0xdf,0x7d,0xff,0xff,0x7d,0xdf,0xff,0x7d,0xbe,0xff,0x7d,0x9e,0xff,
|
17
|
+
0xb6,0xb6,0xff,0xc7,0xb6,0xff,0xdb,0xb6,0xff,0xeb,0xb6,0xff,0xff,0xb6,0xff,0xff,
|
18
|
+
0xb6,0xeb,0xff,0xb6,0xdb,0xff,0xb6,0xc7,0xff,0xb6,0xb6,0xff,0xc7,0xb6,0xff,0xdb,
|
19
|
+
0xb6,0xff,0xeb,0xb6,0xff,0xff,0xb6,0xeb,0xff,0xb6,0xdb,0xff,0xb6,0xc7,0xff,0xb6,
|
20
|
+
0xb6,0xff,0xb6,0xb6,0xff,0xc7,0xb6,0xff,0xdb,0xb6,0xff,0xeb,0xb6,0xff,0xff,0xb6,
|
21
|
+
0xeb,0xff,0xb6,0xdb,0xff,0xb6,0xc7,0xff,0x00,0x00,0x71,0x1c,0x00,0x71,0x38,0x00,
|
22
|
+
0x71,0x55,0x00,0x71,0x71,0x00,0x71,0x71,0x00,0x55,0x71,0x00,0x38,0x71,0x00,0x1c,
|
23
|
+
0x71,0x00,0x00,0x71,0x1c,0x00,0x71,0x38,0x00,0x71,0x55,0x00,0x71,0x71,0x00,0x55,
|
24
|
+
0x71,0x00,0x38,0x71,0x00,0x1c,0x71,0x00,0x00,0x71,0x00,0x00,0x71,0x1c,0x00,0x71,
|
25
|
+
0x38,0x00,0x71,0x55,0x00,0x71,0x71,0x00,0x55,0x71,0x00,0x38,0x71,0x00,0x1c,0x71,
|
26
|
+
0x38,0x38,0x71,0x45,0x38,0x71,0x55,0x38,0x71,0x61,0x38,0x71,0x71,0x38,0x71,0x71,
|
27
|
+
0x38,0x61,0x71,0x38,0x55,0x71,0x38,0x45,0x71,0x38,0x38,0x71,0x45,0x38,0x71,0x55,
|
28
|
+
0x38,0x71,0x61,0x38,0x71,0x71,0x38,0x61,0x71,0x38,0x55,0x71,0x38,0x45,0x71,0x38,
|
29
|
+
0x38,0x71,0x38,0x38,0x71,0x45,0x38,0x71,0x55,0x38,0x71,0x61,0x38,0x71,0x71,0x38,
|
30
|
+
0x61,0x71,0x38,0x55,0x71,0x38,0x45,0x71,0x51,0x51,0x71,0x59,0x51,0x71,0x61,0x51,
|
31
|
+
0x71,0x69,0x51,0x71,0x71,0x51,0x71,0x71,0x51,0x69,0x71,0x51,0x61,0x71,0x51,0x59,
|
32
|
+
0x71,0x51,0x51,0x71,0x59,0x51,0x71,0x61,0x51,0x71,0x69,0x51,0x71,0x71,0x51,0x69,
|
33
|
+
0x71,0x51,0x61,0x71,0x51,0x59,0x71,0x51,0x51,0x71,0x51,0x51,0x71,0x59,0x51,0x71,
|
34
|
+
0x61,0x51,0x71,0x69,0x51,0x71,0x71,0x51,0x69,0x71,0x51,0x61,0x71,0x51,0x59,0x71,
|
35
|
+
0x00,0x00,0x41,0x10,0x00,0x41,0x20,0x00,0x41,0x30,0x00,0x41,0x41,0x00,0x41,0x41,
|
36
|
+
0x00,0x30,0x41,0x00,0x20,0x41,0x00,0x10,0x41,0x00,0x00,0x41,0x10,0x00,0x41,0x20,
|
37
|
+
0x00,0x41,0x30,0x00,0x41,0x41,0x00,0x30,0x41,0x00,0x20,0x41,0x00,0x10,0x41,0x00,
|
38
|
+
0x00,0x41,0x00,0x00,0x41,0x10,0x00,0x41,0x20,0x00,0x41,0x30,0x00,0x41,0x41,0x00,
|
39
|
+
0x30,0x41,0x00,0x20,0x41,0x00,0x10,0x41,0x20,0x20,0x41,0x28,0x20,0x41,0x30,0x20,
|
40
|
+
0x41,0x38,0x20,0x41,0x41,0x20,0x41,0x41,0x20,0x38,0x41,0x20,0x30,0x41,0x20,0x28,
|
41
|
+
0x41,0x20,0x20,0x41,0x28,0x20,0x41,0x30,0x20,0x41,0x38,0x20,0x41,0x41,0x20,0x38,
|
42
|
+
0x41,0x20,0x30,0x41,0x20,0x28,0x41,0x20,0x20,0x41,0x20,0x20,0x41,0x28,0x20,0x41,
|
43
|
+
0x30,0x20,0x41,0x38,0x20,0x41,0x41,0x20,0x38,0x41,0x20,0x30,0x41,0x20,0x28,0x41,
|
44
|
+
0x2c,0x2c,0x41,0x30,0x2c,0x41,0x34,0x2c,0x41,0x3c,0x2c,0x41,0x41,0x2c,0x41,0x41,
|
45
|
+
0x2c,0x3c,0x41,0x2c,0x34,0x41,0x2c,0x30,0x41,0x2c,0x2c,0x41,0x30,0x2c,0x41,0x34,
|
46
|
+
0x2c,0x41,0x3c,0x2c,0x41,0x41,0x2c,0x3c,0x41,0x2c,0x34,0x41,0x2c,0x30,0x41,0x2c,
|
47
|
+
0x2c,0x41,0x2c,0x2c,0x41,0x30,0x2c,0x41,0x34,0x2c,0x41,0x3c,0x2c,0x41,0x41,0x2c,
|
48
|
+
0x3c,0x41,0x2c,0x34,0x41,0x2c,0x30,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
49
|
+
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
50
|
+
]
|
data/lib/pixelflow_canvas.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "pixelflow_canvas/version"
|
4
|
+
require_relative "pixelflow_canvas/vga_palette.rb"
|
5
|
+
require 'chunky_png'
|
4
6
|
require 'socket'
|
5
7
|
require 'time'
|
6
8
|
|
@@ -39,7 +41,7 @@ module Pixelflow
|
|
39
41
|
@advance_mode = :right
|
40
42
|
@draw_mode = :direct
|
41
43
|
@compose_mode = :over
|
42
|
-
@palette =
|
44
|
+
@palette = VGA_PALETTE.dup
|
43
45
|
@socket = TCPSocket.new('127.0.0.1', 19223)
|
44
46
|
set_size(width, height)
|
45
47
|
set_color_mode(color_mode) if color_mode
|
@@ -67,6 +69,9 @@ module Pixelflow
|
|
67
69
|
raise "Invalid color mode: #{mode}"
|
68
70
|
end
|
69
71
|
@color_mode = mode
|
72
|
+
if mode == :palette
|
73
|
+
@palette = VGA_PALETTE.dup
|
74
|
+
end
|
70
75
|
recreate_screen()
|
71
76
|
@socket.write([2, COLOR_MODES[@color_mode]].pack('CC'))
|
72
77
|
@socket.flush
|
@@ -122,6 +127,29 @@ module Pixelflow
|
|
122
127
|
@last_timestamp = t
|
123
128
|
end
|
124
129
|
|
130
|
+
def save_as_png(path)
|
131
|
+
if @color_mode == :rgb
|
132
|
+
image = ChunkyPNG::Image.from_rgb_stream(@width, @height, @screen.pack('C*'))
|
133
|
+
image.save(path)
|
134
|
+
else
|
135
|
+
buffer = [0] * @width * @height * 3
|
136
|
+
offset = 0
|
137
|
+
source = 0
|
138
|
+
(0...@height).each do |y|
|
139
|
+
(0...@width).each do |x|
|
140
|
+
i = @screen[source]
|
141
|
+
buffer[offset + 0] = @palette[i + 0]
|
142
|
+
buffer[offset + 1] = @palette[i + 1]
|
143
|
+
buffer[offset + 2] = @palette[i + 2]
|
144
|
+
source += 1
|
145
|
+
offset += 3
|
146
|
+
end
|
147
|
+
end
|
148
|
+
image = ChunkyPNG::Image.from_rgb_stream(@width, @height, buffer.pack('C*'))
|
149
|
+
image.save(path)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
125
153
|
def set_color(r, g = 0, b = 0)
|
126
154
|
@r = r
|
127
155
|
@g = g
|
@@ -129,11 +157,15 @@ module Pixelflow
|
|
129
157
|
end
|
130
158
|
|
131
159
|
def set_palette(i, r, g, b)
|
132
|
-
i = i
|
133
|
-
r = (
|
134
|
-
g = (
|
135
|
-
b = (
|
160
|
+
i = i.to_i.clamp(0, 255)
|
161
|
+
r = r.to_i.clamp(0, 255)
|
162
|
+
g = g.to_i.clamp(0, 255)
|
163
|
+
b = b.to_i.clamp(0, 255)
|
164
|
+
@palette[i * 3 + 0] = r
|
165
|
+
@palette[i * 3 + 1] = g
|
166
|
+
@palette[i * 3 + 2] = b
|
136
167
|
@socket.write([3, i, r, g, b].pack('CCCCC'))
|
168
|
+
@socket.flush
|
137
169
|
end
|
138
170
|
|
139
171
|
def move_to(x, y)
|
data/test-anaglyph.rb
CHANGED
data/test-sirds.rb
CHANGED
@@ -10,7 +10,7 @@ width = 256
|
|
10
10
|
height = 256
|
11
11
|
|
12
12
|
canvas = Pixelflow::Canvas.new(width, height, :palette)
|
13
|
-
(0...64).each { |i| canvas.set_palette(i, i, i, i) }
|
13
|
+
(0...64).each { |i| canvas.set_palette(i, i * 4, i * 4, i * 4) }
|
14
14
|
(0...height).each do |y|
|
15
15
|
(0...48).each do |x|
|
16
16
|
canvas.set_pixel(x, y, rand(64))
|
@@ -34,3 +34,4 @@ end
|
|
34
34
|
# end
|
35
35
|
# end
|
36
36
|
|
37
|
+
canvas.save_as_png('sirds.png')
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pixelflow_canvas
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Specht
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-10-
|
12
|
-
dependencies:
|
11
|
+
date: 2024-10-28 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: chunky_png
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.4.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.4.0
|
13
27
|
description: Use a virtual CRT for old school graphics programming, in VS Code, from
|
14
28
|
Ruby.
|
15
29
|
email:
|
@@ -23,6 +37,7 @@ files:
|
|
23
37
|
- Rakefile
|
24
38
|
- lib/pixelflow_canvas.rb
|
25
39
|
- lib/pixelflow_canvas/version.rb
|
40
|
+
- lib/pixelflow_canvas/vga_palette.rb
|
26
41
|
- sig/pixelflow_canvas.rbs
|
27
42
|
- test-anaglyph.rb
|
28
43
|
- test-draw.rb
|