summaryrefslogtreecommitdiffstats
path: root/2026/talks/el-gpu.md
blob: f606d21d893de2c3a4774897959a2b09415bb0f5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[[!meta title="El-gpu and pix-el: GNU Emacs 2D and 3D game programming"]]
[[!meta copyright="Copyright © 2026 Emanuel Berg"]]
[[!inline pages="internal(2026/info/el-gpu-nav)" raw="yes"]]

<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
<!-- You can manually edit this file to update the abstract, add links, etc. --->


# El-gpu and pix-el: GNU Emacs 2D and 3D game programming
Emanuel Berg (he/him) - Pronunciation: Swenglish, IRC: lacni, incal@dataswamp.org

[[!inline pages="internal(2026/info/el-gpu-before)" raw="yes"]]

In this project, prepared especially for EmacsConf 2026, two modules -
`el-gpu` and `pix-el` - for graphics on-board the GPU and CPU,
respectively - have joined forces and been adapted to the newly added
canvas format, an exciting new feature included in vanilla GNU Emacs.

In this video we show no less than three games - a snake clone, which
operates on a per-pixel basis; a Tetris game, with tiles loaded on the
fly from any visual creation even as it only exists in drawing
program, still a dynamic, editable object; and a Descent-like space
shooter, powered-up by SDL and OpenGL, executing part CPU-side Emacs
Lisp (Elisp), part CPU-side dynamic module C, and part all-GPU GLSL.

el-gpu and pix-el, like their predecessor, bad.el (boxing after dark),
which was demonstrated at EmacsConf 2025, comes with an interactive
studio, that has its own UI; it offers OOP-style drawing, as well as
explicit pixel-plotting, with layerjs, procedural shaders, functional
alpha masks, and RGB bitwise blenders, including for transparency;
with image editing, effects, rotation, and transformation, with new
idiomatic GNU Emacs lisp, e.g. the `with-pixels` macro; also offering
several ways of drawing text on the CPU as well as GPU; and much more.

<https://dataswamp.org/~incal/el-gpu>

[[!inline pages="internal(2026/info/el-gpu-after)" raw="yes"]]

[[!inline pages="internal(2026/info/el-gpu-nav)" raw="yes"]]