microscrap / metal-gfx
macOS Metal plugin for ScrapyardIO Tubes — DeferredFramebuffer, WindowHandler, Rendering Engine, and Input Handler.
0.7.1
2026-08-09 19:31 UTC
Requires
- php: ^8.4|^8.5|^8.6
- ext-metal: ^0.7.2
- fabricate/nuts-and-bolts: ^0.7.0
- microscrap/metal: ^0.7.3
- scrapyard-io/tubes: ^0.7.0
Requires (Dev)
- pestphp/pest: ^4
This package is not auto-updated.
Last update: 2026-08-10 18:00:16 UTC
README
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
MetalHandledFramebufferextendsDeferredFramebuffer(not Managed / notPixelStore)- Headless — system
MTLDevice+ queue + offscreen RGBA8MTLTexture - Windowed —
MetalWindowHandleropens anNSWindow;present()blits texture →CAMetalLayer(no PHP flush) MetalRenderer2D— full tubesDrawingAPI+DrawsTextinto the borrowed Metal framebuffer (filluses GPU texture clear)- Framebuffer key
metalviaextendDeferred+ publish tagtubes-framebuffers-metal - Window slug
metalviaWindowFactory::extend+ publish tagtubes-windows-metal
Requirements
- PHP 8.4+
- macOS + ext-metal ^0.7.2
microscrap/metal^0.7.2scrapyard-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