76 lines
2.2 KiB
Markdown
76 lines
2.2 KiB
Markdown
# emacs-gpu
|
|
|
|
GNU Emacs with a GPU-accelerated display backend.
|
|
|
|
On **macOS** it renders with **native Apple Metal**: text goes through a
|
|
GPU glyph atlas, images and inline video are textures, and the whole
|
|
frame is composited by the GPU instead of CoreGraphics. The output is
|
|
pixel-accurate against the stock Cocoa backend.
|
|
|
|
**OpenGL support for GNU/Linux and Windows is planned but not implemented
|
|
yet.** The drawing logic is already platform-neutral (`src/gfxterm.c`)
|
|
behind a small driver interface (`src/gfxdrv.h`); an OpenGL driver only
|
|
needs to implement that interface (`src/glterm.c` is the documented
|
|
skeleton). Contributions welcome.
|
|
|
|
> Status: experimental, under active development.
|
|
>
|
|
> **Note:** I am not answering issues for now. Feel free to open them as
|
|
> a public record (they will be read eventually), but do not expect a
|
|
> reply at this stage.
|
|
|
|
## Building on macOS
|
|
|
|
Requires Xcode (or the Command Line Tools) and the usual Emacs build
|
|
dependencies (`brew install autoconf automake gnutls texinfo pkg-config`).
|
|
|
|
```sh
|
|
./autogen.sh
|
|
|
|
SDK=$(xcrun --sdk macosx --show-sdk-path)
|
|
CC="xcrun clang" OBJC="xcrun clang" \
|
|
CFLAGS="-isysroot $SDK" CPPFLAGS="-isysroot $SDK" OBJCFLAGS="-isysroot $SDK" \
|
|
./configure --with-ns --with-mtl
|
|
|
|
make -j$(sysctl -n hw.ncpu)
|
|
```
|
|
|
|
The binary is `src/emacs` (or install the app bundle from `nextstep/`).
|
|
|
|
## Enabling the GPU backend
|
|
|
|
Emacs starts with the regular Cocoa backend; switch a frame to Metal
|
|
with:
|
|
|
|
```elisp
|
|
(add-to-list 'load-path "/path/to/emacs-gpu/lisp")
|
|
(require 'mtl)
|
|
(mtl-enable)
|
|
```
|
|
|
|
Extras once enabled:
|
|
|
|
```elisp
|
|
(mtl-video-insert "video.mp4" 480 270 t) ; inline video, follows scrolling
|
|
(mtl-animations t) ; GPU cursor effects (experimental)
|
|
(mtl-draw-stats) ; renderer counters
|
|
```
|
|
|
|
## How it works
|
|
|
|
```
|
|
redisplay engine (xdisp.c, untouched)
|
|
↓
|
|
src/gfxterm.c platform-neutral drawing policy
|
|
↓
|
|
src/gfxdrv.h driver interface (~25 ops)
|
|
↓
|
|
src/mtlterm.m Metal driver: glyph atlas (CoreText → R8 texture),
|
|
render cycle on a persistent texture, AVFoundation
|
|
video through CVMetalTextureCache
|
|
```
|
|
|
|
## License
|
|
|
|
GNU General Public License v3 or later, same as GNU Emacs.
|