microscrap/metal-gfx

macOS Metal plugin for ScrapyardIO Tubes — DeferredFramebuffer, WindowHandler, Rendering Engine, and Input Handler.

Maintainers

Package info

github.com/microscrap/metal-gfx

Homepage

Documentation

pkg:composer/microscrap/metal-gfx

Transparency log

Statistics

Installs: 9

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

0.7.1 2026-08-09 19:31 UTC

This package is not auto-updated.

Last update: 2026-08-10 18:00:16 UTC


README

Docs PHP Platform License: MIT

Docs: ScrapyardIO — microscrap/metal-gfx 0.7.x

Metal companion for ScrapyardIO tubes 0.7 — Deferred framebuffer key metal plus a live MetalWindowHandler for Window::driver('metal').

Highlights

  • MetalHandledFramebuffer extends DeferredFramebuffer (not Managed / not PixelStore)
  • Headless — system MTLDevice + queue + offscreen RGBA8 MTLTexture
  • WindowedMetalWindowHandler opens an NSWindow; present() blits texture → CAMetalLayer (no PHP flush)
  • MetalRenderer2D — full tubes DrawingAPI + DrawsText into the borrowed Metal framebuffer (fill uses GPU texture clear)
  • Framebuffer key metal via extendDeferred + publish tag tubes-framebuffers-metal
  • Window slug metal via WindowFactory::extend + publish tag tubes-windows-metal

Requirements

  • PHP 8.4+
  • macOS + ext-metal ^0.7.2
  • microscrap/metal ^0.7.2
  • scrapyard-io/tubes ^0.7.0

Installation

php -m | grep metal
composer require microscrap/metal-gfx:^0.7.0
php workshop vendor:publish --tag=tubes-framebuffers-metal
php workshop vendor:publish --tag=tubes-windows-metal
# or: php workshop install:gfx metal

Usage

Headless framebuffer

use ScrapyardIO\Tubes\Core\MagicAliases\Framebuffer;
use Microscrap\GFX\Metal\MetalHandledFramebuffer;

$buffer = Framebuffer::driver('metal')
    ->size(320, 240)
    ->format(MetalHandledFramebuffer::rgbaSpec())
    ->create();

$buffer->setPixel(10, 10, 0xFF0000FF);

Visible OS window + DrawingAPI

use ScrapyardIO\Tubes\Core\MagicAliases\Window;
use Microscrap\GFX\Metal\MetalRenderer2D;

$window = Window::driver('metal')->title('Metal')->size(800, 600)->open();
$fb = $window->framebuffer(); // MetalHandledFramebuffer, not headless
$gfx = (new MetalRenderer2D)->setFramebuffer($fb);
$gfx->fill(0xFF203040)
    ->fillCircle(400, 300, 80, 0xE0E0E0FF)
    ->setTextColor(0xFFFFFFFF)
    ->setCursor(40, 40)
    ->print('Metal');
$window->present()->pollEvents();
$window->close();

Stack

ext-metal ≥ 0.7.2 + microscrap/metal
  └── microscrap/metal-gfx   (Deferred + Window key metal)  ← this package
        └── scrapyard-io/tubes factory

License

MIT © Angel Gonzalez