microscrap / vulkan-gfx
VulkanEngine plugin for ScrapyardIO Tubes — DeferredFramebuffer, WindowHandler, Rendering Engine, and Input Handler.
0.7.0
2026-08-09 18:58 UTC
Requires
- php: ^8.4|^8.5|^8.6
- ext-vulkan: ^0.7.0
- fabricate/nuts-and-bolts: ^0.7.0
- microscrap/glfw: ^0.7.0
- microscrap/vulkan: ^0.7.0
- scrapyard-io/tubes: ^0.7.0
Requires (Dev)
- pestphp/pest: ^4
This package is not auto-updated.
Last update: 2026-08-10 17:26:48 UTC
README
Docs: ScrapyardIO — microscrap/vulkan-gfx 0.7.x
Vulkan companion for ScrapyardIO tubes 0.7 — registers:
- Framebuffer key
vulkanas a Deferred (VulkanHandledFramebuffer) - Window key
vulkanas aVulkanWindowHandler(GLFWNO_API+ surface + swapchain) - Human Input via
VulkanInputHandler(GLFW Input afterpollEvents; wrap with tubesEngineInput) - Ships
VulkanRenderer2D(full tubesDrawingAPI+DrawsText)
Highlights
VulkanHandledFramebufferextendsDeferredFramebuffer(not Managed / notPixelStore)- Headless —
VkInstance+ CPU shadow canvas (no window required) - Windowed —
Window::driver('vulkan')->…->open();attachedTo+presentFrame(clear + ≤3 rects from shadow) VulkanRenderer2D— fullDrawingAPI+ tubesDrawsTextinto the borrowed Vulkan framebuffer- Factory keys via
extendDeferred+$windows->extend— publish tagstubes-framebuffers-vulkan/tubes-windows-vulkan
Note: ext-vulkan 0.7.0 has no offscreen image/readback APIs yet (Metal-gfx uses
MTLTexture). Headless pixels live in a PHP shadow; windowed present usesVk::presentFramerect slots until a richer GPU store lands.
Requirements
- PHP 8.4+
- ext-vulkan ^0.7.0
- ext-glfw (via
microscrap/glfw^0.7.0) microscrap/vulkan^0.7.0scrapyard-io/tubes^0.7.0 (umbrella; provides framebuffers + contracts + rendering + fonts)
Installation
php -m | grep vulkan composer require microscrap/vulkan-gfx:^0.7.0 php workshop vendor:publish --tag=tubes-framebuffers-vulkan php workshop vendor:publish --tag=tubes-windows-vulkan # or: php workshop install:gfx vulkan
Usage
use Microscrap\GFX\Vulkan\VulkanHandledFramebuffer; use Microscrap\GFX\Vulkan\VulkanRenderer2D; use Microscrap\GFX\Vulkan\VulkanWindowHandler; use ScrapyardIO\Tubes\Core\MagicAliases\Framebuffer; use ScrapyardIO\Tubes\Core\MagicAliases\Window; use ScrapyardIO\Tubes\HumanInput\EngineInput; $buffer = Framebuffer::driver('vulkan') ->size(320, 240) ->format(VulkanHandledFramebuffer::rgbaSpec()) ->create(); // DeferredFramebuffer — headless $buffer->setPixel(10, 10, 0xFF0000FF); $bytes = $buffer->flush(VulkanHandledFramebuffer::rgbaSpec()); $window = Window::driver('vulkan')->title('Demo')->size(800, 600)->open(); $fb = $window->framebuffer(); $gfx = (new VulkanRenderer2D)->setFramebuffer($fb); $gfx->fill(0x141820FF) ->fillCircle(400, 300, 80, 0xF0A030FF) ->setTextColor(0xFFFFFFFF) ->setCursor(40, 40) ->print('Vulkan'); $handler = $window->handler(); $input = $handler instanceof VulkanWindowHandler ? new EngineInput($handler->inputHandler()) : null; $window->present()->pollEvents(); // also refreshes HumanInput devices $mouse = $input?->mouse();
See tubes Rendering and Fonts (if published).
Stack
ext-vulkan + microscrap/vulkan (+ glfw)
└── microscrap/vulkan-gfx (Deferred + Window + Renderer2D) ← this package
└── scrapyard-io/tubes factories + DrawingAPI + DrawsText
License
MIT