Skip to content

Commit 9987955

Browse files
committed
Add support for IPython / Jupyter.
1 parent 8e18e61 commit 9987955

36 files changed

Lines changed: 4566 additions & 233 deletions

Cargo.lock

Lines changed: 90 additions & 90 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/processing_ffi/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ pub extern "C" fn processing_surface_create_x11(
118118
pub extern "C" fn processing_graphics_create(surface_id: u64, width: u32, height: u32) -> u64 {
119119
error::clear_error();
120120
let surface_entity = Entity::from_bits(surface_id);
121-
error::check(|| graphics_create(surface_entity, width, height))
121+
error::check(|| graphics_create(surface_entity, width, height, TextureFormat::Rgba16Float))
122122
.map(|e| e.to_bits())
123123
.unwrap_or(0)
124124
}

crates/processing_pyo3/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ pyo3 = "0.27.0"
2020
processing = { workspace = true }
2121
bevy = { workspace = true, features = ["file_watcher"] }
2222
glfw = { version = "0.60.0"}
23+
png = "0.18"
2324

24-
[target.'cfg(target_os = "macos")'.dependencies]
25+
[target.'cfg(any(target_os = "macos", target_os = "windows"))'.dependencies]
2526
glfw = { version = "0.60.0", features = ["static-link"] }
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": null,
6+
"metadata": {},
7+
"outputs": [],
8+
"source": [
9+
"from processing import *"
10+
]
11+
},
12+
{
13+
"cell_type": "code",
14+
"execution_count": null,
15+
"metadata": {},
16+
"outputs": [],
17+
"source": [
18+
"size(800, 600)"
19+
]
20+
},
21+
{
22+
"cell_type": "code",
23+
"execution_count": null,
24+
"metadata": {},
25+
"outputs": [],
26+
"source": [
27+
"background(220)"
28+
]
29+
},
30+
{
31+
"cell_type": "code",
32+
"execution_count": null,
33+
"metadata": {},
34+
"outputs": [],
35+
"source": [
36+
"fill(255, 0, 0)\n",
37+
"rect(100, 100, 200, 150)"
38+
]
39+
},
40+
{
41+
"cell_type": "code",
42+
"execution_count": null,
43+
"metadata": {},
44+
"outputs": [],
45+
"source": [
46+
"fill(0, 0, 255)\n",
47+
"rect(350, 200, 100, 300)"
48+
]
49+
}
50+
],
51+
"metadata": {
52+
"kernelspec": {
53+
"display_name": "Python 3",
54+
"language": "python",
55+
"name": "python3"
56+
},
57+
"language_info": {
58+
"name": "python",
59+
"version": "3.12.0"
60+
}
61+
},
62+
"nbformat": 4,
63+
"nbformat_minor": 4
64+
}
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": null,
6+
"id": "cell-0",
7+
"metadata": {},
8+
"outputs": [],
9+
"source": [
10+
"from processing import *"
11+
]
12+
},
13+
{
14+
"cell_type": "code",
15+
"execution_count": null,
16+
"id": "cell-1",
17+
"metadata": {},
18+
"outputs": [],
19+
"source": [
20+
"size(200, 100)\n",
21+
"mode_3d()"
22+
]
23+
},
24+
{
25+
"cell_type": "code",
26+
"execution_count": null,
27+
"id": "cell-2",
28+
"metadata": {},
29+
"outputs": [],
30+
"source": [
31+
"# Directional light\n",
32+
"dir_light = create_directional_light(0.5, 0.24, 1.0, 1500.0)"
33+
]
34+
},
35+
{
36+
"cell_type": "code",
37+
"execution_count": null,
38+
"id": "cell-3",
39+
"metadata": {},
40+
"outputs": [],
41+
"source": [
42+
"# Point lights\n",
43+
"point_light_a = create_point_light(1.0, 0.5, 0.25, 1000000.0, 200.0, 0.5)\n",
44+
"point_light_a.position(-25.0, 5.0, 51.0)\n",
45+
"point_light_a.look_at(0.0, 0.0, 0.0)\n",
46+
"\n",
47+
"point_light_b = create_point_light(0.0, 0.5, 0.75, 2000000.0, 200.0, 0.25)\n",
48+
"point_light_b.position(0.0, 5.0, 50.5)\n",
49+
"point_light_b.look_at(0.0, 0.0, 0.0)"
50+
]
51+
},
52+
{
53+
"cell_type": "code",
54+
"execution_count": null,
55+
"id": "cell-4",
56+
"metadata": {},
57+
"outputs": [],
58+
"source": [
59+
"# Spot light\n",
60+
"spot_light = create_spot_light(0.25, 0.8, 0.19, 15.0 * 1000000.0, 200.0, 0.84, 0.0, 0.7854)\n",
61+
"spot_light.position(40.0, 0.0, 70.0)\n",
62+
"spot_light.look_at(0.0, 0.0, 0.0)"
63+
]
64+
},
65+
{
66+
"cell_type": "code",
67+
"execution_count": null,
68+
"id": "cell-5",
69+
"metadata": {},
70+
"outputs": [],
71+
"source": [
72+
"camera_position(100.0, 100.0, 300.0)\n",
73+
"camera_look_at(0.0, 0.0, 0.0)\n",
74+
"background(220)\n",
75+
"box(100.0, 100.0, 100.0)"
76+
]
77+
},
78+
{
79+
"cell_type": "code",
80+
"execution_count": null,
81+
"id": "cell-6",
82+
"metadata": {},
83+
"outputs": [],
84+
"source": [
85+
"# Rotate and draw again\n",
86+
"background(220)\n",
87+
"rotate(0.5)\n",
88+
"box(100.0, 100.0, 100.0)"
89+
]
90+
},
91+
{
92+
"cell_type": "code",
93+
"execution_count": null,
94+
"id": "cell-7",
95+
"metadata": {},
96+
"outputs": [],
97+
"source": [
98+
"# Rotate more\n",
99+
"background(220)\n",
100+
"rotate(1.0)\n",
101+
"box(100.0, 100.0, 100.0)"
102+
]
103+
}
104+
],
105+
"metadata": {
106+
"kernelspec": {
107+
"display_name": "Python 3",
108+
"language": "python",
109+
"name": "python3"
110+
},
111+
"language_info": {
112+
"name": "python",
113+
"version": "3.12.0"
114+
}
115+
},
116+
"nbformat": 4,
117+
"nbformat_minor": 5
118+
}

crates/processing_pyo3/examples/box.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def draw():
1414

1515
push_matrix()
1616
rotate(angle)
17-
draw_box(100.0, 100.0, 100.0)
17+
box(100.0, 100.0, 100.0)
1818
pop_matrix()
1919

2020
angle += 0.02

crates/processing_pyo3/examples/lights.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def draw():
3131

3232
push_matrix()
3333
rotate(angle)
34-
draw_box(100.0, 100.0, 100.0)
34+
box(100.0, 100.0, 100.0)
3535
pop_matrix()
3636

3737
angle += 0.02
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": 1,
6+
"metadata": {
7+
"scrolled": true
8+
},
9+
"outputs": [],
10+
"source": [
11+
"from processing import *"
12+
]
13+
},
14+
{
15+
"cell_type": "code",
16+
"execution_count": null,
17+
"metadata": {},
18+
"outputs": [],
19+
"source": [
20+
"size(200, 100)"
21+
]
22+
},
23+
{
24+
"cell_type": "code",
25+
"execution_count": 3,
26+
"metadata": {},
27+
"outputs": [
28+
{
29+
"data": {
30+
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAAAAXNSR0IArs4c6QAABH5JREFUeJztnUtu5DAMRBNh7n+uHGLukkEwMKT0x1ZZYkmW31vVziSrtGAQNP/8/fr6/piEn0I+BT0rq/RRcldv0kcA36Le+BR1NKv0UYI3mk4zFBENQc/gjUaaoYhaCHoGb+L5qTeNKIKgZwh6PC09Ne0gDDND0OMZ0VMa9eFoCLqmnVyppzTqw7UQdE07uYM3IX/mVYt4pTcIejx4817LD4RhatoJ3mi6huodJLKIFgh6Bm/6U72DREPQMwQ9ntqeuu8gBD1D0OOJ7imN+vAICLqmncza09MO4vpwCwRd005W8+ZpB3FC0DXtBG/+02UHYZiadoI3mn4kzVBEbwh6Bm/aSDMU8Q6CnsGbeF7VbvlXE4KeIejx9OxJeiAMM0PQ45mhp8QwNR0NQc/M0FNimDEQ9MyVvQnbQQi6pp3gTb0+fCAMU9NO8EbTZ0gM87V2QtA17SQxzH4QdE07OdtT8w7CMDMEPR53T2nUhx0QdE07uUpPadSHFQi6pp2s7o3tV032iiDor7UTvHmtTz0QhqlpJ3ij6SOkHSSqiFYIegZv+iLtINEQ9AxBj6emDw7oVELQNe0ksqdbHNApIeiadjJjT5c6oFNC0DXtZCVvhhzQeSxC0RsEPR686biDMExNO8EbTZekGYqIgKBn8OY8aYYi9iDoGbyJ57F2Dug0QNA17aRXT7c9oFNC0DXtZHRPlz+gU0LQNe3kqj1Nc0CnhKBr2sndvAndQQi6pp3gTZ2ueiAMU9NO8EbTKrs7iKsIFYKewZtYdneQaAh6hqDHc6YnDui8gaBr2omzpyUP6JQQdE07uUJPUx/QKSHomnaysjfWXzUpP1yrNwh6PHjzrE8/EIapaSd4o+k9EsPUtBO80XQEiWHGQ9A17eSoDw7oCBB0TTuJ6uk2B3RKCLqmnczW0+UO6JQQdE07WaWnxDD7QdAzq3jTdQch6Jp2gjea3kgzFBEFQc/gzTkSwxwDQde0k7LexDDbIOiadtKjp1sf0Ckh6Jp2MrKnJQ7olBB0TTu5Yk9THdApIeiadnInb8L/3Z2ga9oJ3hzr6gfCMDXtBG80rXC4gziKOANBz+BNHIc7SDQEPUPQ41F74oDODgRd005cPS17QKeEoGvayew9TX9Ap4Sga9rJqt7Yf9Vk+7CiNwh6PHjzWzc9EIapaSd4o+l3VB/QYZhjwBtN96b6gA7DbIOga9rJXh8c0BEh6Jp2EtHTrQ7olBB0TTuZqadLHtApIeiadrJCT0MP6JQQdE07ubM33XcQgq5pJ3ij6R/SDEVEQtAzeKPztIOMKKIGgp7Bm3i2ep92ENeHa/UGQY8HbzJbvbc/oFNC0DXtZFRPyxzQKSHomnZytZ6mO6BTQtA17eQu3lj+3Z2ga9oJ3uxr6YEwTE07wRtN15IY5rF2QtA1HU1imDEQdE07UXrigM4BBF3TThw9LX1Ap4Sga9rJzD1d4oBOCUHXtJMVvUkMsw2CnlnRm+YdhGFq2gneaPoV0gEdhjkGvNF0T6QDOgyzDYKuaSfvav8HCrMWkoMp3jYAAAAASUVORK5CYII=",
31+
"text/plain": [
32+
"<IPython.core.display.Image object>"
33+
]
34+
},
35+
"metadata": {},
36+
"output_type": "display_data"
37+
}
38+
],
39+
"source": [
40+
"background(220, 200, 200)"
41+
]
42+
},
43+
{
44+
"cell_type": "code",
45+
"execution_count": 4,
46+
"metadata": {},
47+
"outputs": [
48+
{
49+
"data": {
50+
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAAAAXNSR0IArs4c6QAABNVJREFUeJztnVFu2zAQRG0iR+khev8v36G9i4ugFcgmssURuSOKeu9rEATh7s4oMQPD+/H78XjeBuGzkLugR2WWPkqu6k26BfAU9cJd1NHM0kcJ3mg6jVBENAQ9gzcaaYQiaiHoGbyJ57PedEQRBD1D0ONp6anpDsIwMwQ9niN6SkcdHA1B17STM/WUjjq4FoKuaSdX8Cbk37xqEWt6gaDHgzevtfyAMExNO8EbTddQfQeJLKIFgp7Bm/5U30GiIegZgh5PbU/d7yAEPUPQ44nuKR118BEQdE07GbWnb3cQ18EtEHRNO5nNm293ECcEXdNO8OYvXe4gDFPTTvBG019JIxTRG4KewZs20ghFvIKgZ/AmnrXaLW81IegZgh5Pz56kB4RhZgh6PCP0lBimpqMh6JkRekoMMwaCnjmzN2F3EIKuaSd4U683HxCGqWkneKPpPSSGua6dEHRNO0kMsx8EXdNO9vbUfAdhmBmCHo+7p3TUwQ4IuqadnKWndNTBCgRd005m98b2qSbviiDo69oJ3qzrXQ8Iw9S0E7zR9BbSHSSqiFYIegZv+iLdQaIh6BmCHk9NHyzQqYSga9pJZE+XWKBTQtA17WTEnk61QKeEoGvayUzeHLJA52sRil4g6PHgTcc7CMPUtBO80XRJGqGICAh6Bm/2k0Yo4h0EPYM38XytnQU6DRB0TTvp1dNlF+iUEHRNOzm6p9Mv0Ckh6Jp2ctaehlmgU0LQNe3kat6E3kEIuqad4E2drnpAGKamneCNplXe3kFcRagQ9AzexPL2DhINQc8Q9Hj29PRx63TwXdALow/ziJ5+/Px568mvxwNv/rGnp4+jDnZxpp4+H47nbT9f+7jf8KaVoRfolFz9pUsNeNPGWr3WTzUpD67VC7MEnV9C8fTsY/cDwjA1fRR4s63fkWYJyOxBf8XWyzG8aSMR9HhmuXdc0RsW6Ajw11bTTqJ6uswCnZIrvRzDm3Vdy+kW6JTM+Bu95XvWwJs2EkHvR48+XoE3bezto+sdhKBr2gneaHohjVBEFFe6a5TgTT8SwzyGrdrffX0LvGmjrDcxzDZ693Sr+HoEeJMp6931dvdn8UNq9NrBIw5zhJ6i+sebbb3G/ffj8VQPHpm9wxyNWfooOWNPQy3QKeEfBZp2ciVvwt/uTtA17QRvtnX1A8IwNe0EbzStsLnE01HEHgh6Bm/i2LyDREPQMwQ9HrUnFui8gaBr2omrp2kX6JQQdE07Gb2n4RfolBB0TTuZ1Rv7p5osByt6gaDHgzf/66YHhGFq2gneaPoV1Qt0GOYx4I2me1O9QIdhtkHQNe3kXR8s0BEh6Jp2EtHTpRbolBB0TTsZqadTLtApIeiadjJDT4cu0Ckh6Jp2cmVvut9BCLqmneCNpj9JIxQRCUHP4I3OtzvIEUXUQNAzeBPPUu+3O4jr4Fq9QNDjwZvMUu/lF+iUEHRNOzmqp2kW6JQQdE07OVtPwy3QKSHomnZyFW8sb3cn6Jp2gjfvtfSAMExNO8EbTdeSGOa2dkLQNR1NYpgxEHRNO1F6YoHOBgRd004cPU29QKeEoGvaycg9nWKBTglB17STGb1JDLMNgp6Z0ZvmOwjD1LQTvNH0GpsfXs0w17UTvNF0T6QFOgyzDYKuaSevav8D1XoLw4iecngAAAAASUVORK5CYII=",
51+
"text/plain": [
52+
"<IPython.core.display.Image object>"
53+
]
54+
},
55+
"metadata": {},
56+
"output_type": "display_data"
57+
}
58+
],
59+
"source": [
60+
"box("
61+
]
62+
},
63+
{
64+
"cell_type": "code",
65+
"execution_count": 5,
66+
"metadata": {},
67+
"outputs": [
68+
{
69+
"data": {
70+
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAAAAXNSR0IArs4c6QAABR5JREFUeJztnWGO2zoMhBNhj/LeHXr/X7lD9y4pgoUrNXFijSVStPx9QIHBoliTnLETLYLw6/t2u1+C8CjkKuiozNJHyVm9SRcD7qJeuIramln6KMEbTacIRVhD0DN4o5EiFFELQc/gjT2PetOIIgh6hqDb09JT0xmEYWYIuj0jekqjLmwNQde0J0fqKY26cC0EXdOenMEbkz/zqkWs6QWCbg/evNfyDcIwNe0J3mi6huoziGURLRD0DN70p/oMYg1BzxB0e2p76n4GIegZgm6PdU9p1IVHQNA17UnUnl7OIF4XboGga9qT2bx5OYN4QtA17Qne/NDlDMIwNe0J3mj6mRShiN4Q9AzetJEiFPEOgp7BG3vWav+6OPC42LVC///rV82vu3zfbn/1yGFeBb0QMegz9FHSsyfpDGL51Pi5Oe4V//rCE13TnkToKTFMTVtD0DMRekrRhlkDQR/DGR9CZh933zvMGgh6G7za1uvNG4RhatoTvNH0HtLsAVkg6PbM+BBK0YapQNBt4NU203wG6T3MCBB0TXvi3VMadWEPCLqmPTlKT2nUhXtA0Ne1J7M/hNy+1eRTEffLPgh6P3i1Xde7bhDLYXpC0DO82q4jnUGsimiFoGfwpi/SGSQqBN2esz6EQi3QiQxB17Qnlj2dYoFOCUHXtCcRezrUAp0Sgq5pT2byZsgCneci9kDQ7eEh1PEM0mOYESDoGR5CKzcIw9S0J3ij6R6kCEXsgaBva2vO8BAKtUBHgaD3g1fbzHPtoRbojIKga9qT0T0dfoFOCUHXtCdH7SnMAh0Vgj6Gsz2ETM8ge4dZA0Fvg1fbOl11gzBMTXuCN5pW+XgG8SpChaBn8MaWj2cQa3q8vSLoNvAQ+qHLt7s/fulV0Auvgxo1uld69LQnIP9VfsN9Lb9vtyF9WOLpzdeoCz9TrjToycieVB43x95X1QfPfVwvBL2V0At0Ss7+1qUGvGljrV7XbzUpL1yrF2YJOg8he3r2sfsGYZiaHgXebOtPpFkCMnvQ37H1dgxv2kgE3Z5Zzh1n9CbcAh3eo9uDN5mtPk6zQKfkTG/H8GZd1zL9Ap2jPdFb/s8aeNNGIuj96NHHO/Cmjb19dD2DEHRNe4I3ml5IEYqw4kxnjRK86UdimGPYqv3Tz7fAmzbKehPDbKN3T5eKn1uAN5my3l0fd78Xv6RGr1044jAj9GTVP95s6zWu37fbXb1wZPYOMxqz9FFyxJ7CLtDhDwWa9uRM3ph/3J2ga9oTvNnW1TcIw9S0J3ijaYXNJZ4eReyBoGfwxo7NM4g1BD1D0O1Rewq1QIeg24A3GbWnaRfolBB0TXsSvadDLdAh6Jr2ZFZv3L/VZLmwohcIuj14869uukEYpqY9wRtNv6N6gQ7DHAPeaLo31Qt0GGYbBF3TnnzqI+QCHYJuD95kPvVxqgU6JQRd055E6umQC3RKCLqmPZmhp6ELdEoIuqY9ObM33c8gBF3TnuCNph+kCEVYQtAzeKPzcgYZUUQNBD2DN/Ys9b6cQbwuXKsXCLo9eJNZ6j39Ap0Sgq5pT0b1NM0CnRKCrmlPjtZTuAU6JQRd056cxRuXj7sTdE17gjeftXSDMExNe4I3mq4lMcxt7QlB17Q1iWHaQNA17YnSEwt0NiDomvbEo6epF+iUEHRNexK5p0Ms0Ckh6Jr2ZEZvEsNsg6BnZvSm+QzCMDXtCd5oeo3NL69mmOvaE7zRdE+kBToMsw2CrmlP3tX+B0K7Acom0WeCAAAAAElFTkSuQmCC",
71+
"text/plain": [
72+
"<IPython.core.display.Image object>"
73+
]
74+
},
75+
"metadata": {},
76+
"output_type": "display_data"
77+
}
78+
],
79+
"source": [
80+
"fill(0, 0, 255)\n",
81+
"rect(35, 20, 10, 30)"
82+
]
83+
}
84+
],
85+
"metadata": {
86+
"kernelspec": {
87+
"display_name": "Python 3 (ipykernel)",
88+
"language": "python",
89+
"name": "python3"
90+
},
91+
"language_info": {
92+
"codemirror_mode": {
93+
"name": "ipython",
94+
"version": 3
95+
},
96+
"file_extension": ".py",
97+
"mimetype": "text/x-python",
98+
"name": "python",
99+
"nbconvert_exporter": "python",
100+
"pygments_lexer": "ipython3",
101+
"version": "3.12.9"
102+
}
103+
},
104+
"nbformat": 4,
105+
"nbformat_minor": 4
106+
}

crates/processing_pyo3/examples/test_jupyter_3d.ipynb

Lines changed: 84 additions & 0 deletions
Large diffs are not rendered by default.

crates/processing_pyo3/pyproject.toml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ classifiers = [
1111
"Programming Language :: Python :: Implementation :: PyPy",
1212
]
1313
dynamic = ["version"]
14+
dependencies = [
15+
"ipython>=8.12.3",
16+
"jupyter>=1.1.1",
17+
]
1418

1519
[dependency-groups]
1620
dev = ["maturin>=1.10,<2.0"]
@@ -23,4 +27,7 @@ cache-keys = [
2327
{ file = "pyproject.toml" },
2428
{ file = "Cargo.toml" },
2529
{ file = "src/**/*.rs" },
30+
{ file = "../../src/**/*.rs" },
31+
{ file = "../processing_render/src/**/*.rs" },
32+
{ file = "../processing_render/Cargo.toml" },
2633
]

0 commit comments

Comments
 (0)