Projektatlas · Spiele, GPU-Software und V-Werkzeuge
Torus Trooper, hardwarebeschleunigtes Video, OpenCL-Compute und eine V-Entwicklungsumgebung für Kakoune – mit nachvollziehbaren APIs, Speicherbausteinen und dokumentierten Builds.
Jetzt quelloffen
Torus Trooper
Ein freier Tunnel-Racing-Arcade-Shooter in V mit Vulkan-Grafik für Windows und Linux, inspiriert von Kenta Chos Original. Eigene Raumschiffe und Strecken, drei Schwierigkeitsgrade, anpassbare Steuerung und eine Replay-Bibliothek mit Import und Export.
Fertige Pakete für Windows 10/11 x64 und Linux x64 sind verfügbar. Ein Vulkan-fähiger Grafiktreiber ist erforderlich; Linux benötigt glibc 2.38 oder neuer, etwa Ubuntu 24.04. macOS wird nicht offiziell unterstützt.
Hinter dem Arcade-Shooter steht eine klar getrennte Architektur. Der Design-Guide führt von Eingabe und Simulation bis zum fertigen Bild und erklärt auch, wann andere Ansätze sinnvoller wären.
01
Spielregeln vom Bildschirm trennen
Die Simulation läuft in festen 60-Hz-Schritten. Fenster, Vulkan-Darstellung und Audio sind davon getrennt; die Spielregeln lassen sich auch ohne Fenster testen.
02
Eine Runde nachvollziehbar wiedergeben
Replays speichern Startwert, Spielmodus und logische Eingaben statt eines Videos. Die Wiedergabe braucht kompatible Simulationsregeln – das Dateiformat allein garantiert das nicht.
03
Aus Zuständen sichtbare Bewegung machen
Render-Snapshots verbinden die Simulation mit prozeduralen Strecken, Raumschiffen und Vulkan-Rendering. Interpolation glättet die Darstellung zwischen zwei Spielschritten.
04
Entscheidungen mit Belegen prüfen
Der neunteilige Guide behandelt Speicherlayouts, Ressourcenbesitz, optionales Compute, Konfiguration und Tests. Er zeigt die Grenzen der Messungen und vergleicht alternative Designs.
Entwicklerwerkzeuge / vlang.kak
Eine V-Entwicklungsumgebung für Kakoune
Ein tastaturorientierter V-Arbeitsablauf: Code verstehen, Tests ausführen und ein laufendes Programm untersuchen, ohne Kakoune zu verlassen.
01
Code finden und verstehen
VLS und kak-lsp liefern Sprachfunktionen. Projektexplorer, Suche, Definitionen, Dokumentation und kontextabhängige Menüs halten die Navigation nah am Quellcode.
02
Bauen, testen, untersuchen
Projektaufgaben und Tests laufen mit navigierbaren Fehlermeldungen. Lokales GDB-Debugging ergänzt Breakpoints, Einzelschritte, Stack, Variablen und Watches.
03
Die Umgebung weiterpflegen
Ein isolierter Launcher hält das V-Setup von der persönlichen Kakoune-Konfiguration getrennt. Verwaltete Updates erhalten eigene Einstellungen; dokumentierte Wiederherstellung hilft bei Sitzungswechseln.
Das verwaltete Setup und der geprüfte lokale GDB-Pfad zielen auf Linux. Unter Windows ist WSL vorgesehen; Sprachfunktionen hängen von der installierten VLS-Version ab.
Zwei Wege von Spezifikationen zur laufenden GPU-Anwendung
Kleine Repositories trennen API-Erzeugung, Datenformate, Speicher, Oberfläche und Anwendung. Der Vulkan-Video-Pfad spielt H.264 ab; der OpenCL-Pfad berechnet und visualisiert Partikel gemeinsam mit Vulkan.
Ein H.264/AVC-MP4-Player in V mit Vulkan-Video-Dekodierung, B-Frame-Ausgabereihenfolge, Metadatenrotation, Timing, Resize und Looping. Der aktuelle Linux-Prerelease verbessert H.264-Verarbeitung und Paketprüfung; Windows-Hardwarewiedergabe ist noch nicht validiert.
01
Eingabe
minimp4 liest den MP4-Container. h264 interpretiert den Videostream und liefert Metadaten und Bildreihenfolge.
02
Dekodierung
Die Vulkan-Bindings stellen die native API in V bereit. Der Player prüft das Videoprofil und wählt eine kompatible GPU.
03
Darstellung
GLFW erzeugt Fenster und Eingabe, Dear ImGui liefert die Oberfläche und vkmemalloc unterstützt den GPU-Speicher.
04
Orchestrierung
v_vulkan_video verbindet Parsing, GPU-Auswahl, Dekodierung, Timing, Resize, Präsentation und Looping.
opencl
Compute und Grafik auf derselben GPU verbinden
Generierte OpenCL-1.0–3.0-Bindings für V, typsichere Hilfen für Buffer, Bilder und SVM sowie ein Partikelsystem, in dem OpenCL und Vulkan Speicher und Synchronisation teilen.
01
Generieren
v_opencl_bindings liest die kanonische Khronos-Registry und erzeugt nachvollziehbare V-Bindings für OpenCL 1.0 bis 3.0.
02
Sicher verwenden
opencl ergänzt die vollständige Low-Level-API um optionale, typsichere Hilfen für Discovery, Buffer, Bilder, SVM, Events und Lebenszyklen.
03
Portabel validieren
CI prüft Laufzeitpfade unter Linux sowie ABI-Builds für macOS und Windows; GCC, Clang, MSVC und TinyCC werden abgedeckt.
04
APIs verbinden
Das Partikelbeispiel kombiniert OpenCL-Compute mit Vulkan-Darstellung, nutzt nach Möglichkeit gemeinsamen Speicher und Semaphore und fällt sonst auf Host-Staging zurück.
Warum jeder Baustein wichtig ist
Ein Videoplayer wirkt wie eine einzelne Anwendung. Tatsächlich löst er mehrere sehr unterschiedliche Probleme, die hier bewusst in verständliche, wiederverwendbare Projekte getrennt sind.
minimp4
Findet die Videodaten
Eine MP4-Datei ist ein Behälter. minimp4 findet darin Bilder, Zeitangaben und technische Metadaten – vergleichbar mit einem Inhaltsverzeichnis.
h264
Versteht die komprimierten Bilder
H.264 speichert meist nur Veränderungen zu anderen Bildern. Dieses Projekt liest die Regeln, Abhängigkeiten und Reihenfolge, die zum Rekonstruieren nötig sind.
v_vulkan_bindings + vulkan
Übersetzt zwischen V und dem Grafiktreiber
Vulkan spricht die Sprache der GPU. Der Generator hält tausende Definitionen aktuell; die Bindings machen sie aus V heraus sicher und reproduzierbar erreichbar.
vulkan_memory_allocator
Verwaltet knappen GPU-Speicher
Der V-native Allokator vkmemalloc nutzt memory für Block-Suballokation und ergänzt Speicherbudgets, Upload-Ringe und Diagnostik. Er ist kein Binding für AMDs Vulkan Memory Allocator.
glfw + imgui
Macht das Ergebnis bedienbar
GLFW verbindet Fenster, Bildschirm und Eingabe. ImGui liefert Kontrollen und Diagnoseoberflächen, damit aus der Pipeline ein benutzbares Programm wird.
v_vulkan_video
Orchestriert das Gesamtsystem
Der Player koordiniert Dateizugriff, Zeittakt, Referenzbilder, GPU-Warteschlangen, Darstellung und Fensteränderungen zu einem sichtbaren Video.
opencl
Macht Compute kontrollierbar
Die vollständigen Bindings bleiben zugänglich; eine optionale Eigentums- und Typschicht vereinfacht Buffer, Bilder, SVM, Events und Kernel-Aufrufe.
v_opencl_bindings
Hält die API reproduzierbar
Der Generator bindet die Ausgabe an feste Khronos-Eingaben und validiert die generierte Oberfläche über mehrere Plattformen und Compiler.
v_imgui_examples
Zeigt die Integration kompakt
Ein getestetes Beispiel verbindet V, Vulkan, GLFW und Dear ImGui als kurzen Einstieg in die Grafik-Toolchain.
memory
Stellt wiederverwendbare Speicherbausteine bereit
Geprüfte Objekt- und Slot-Pools sowie Bereichs-, Linear-, Ring- und Buddy-Allokatoren für V; der Kern funktioniert unabhängig von Vulkan.
Ein Bild durch die Strukturkette
Für technisch Interessierte: Ein einzelnes H.264-Bild wird nicht mit einem Funktionsaufruf „angezeigt“. Metadaten, Referenzbilder, GPU-Ressourcen und Synchronisation werden als miteinander verknüpfte Vulkan-Strukturen beschrieben.
StdVideoDecodeH264PictureInfo
Bildnummer, SPS/PPS-IDs, Picture Order Count und Flags beschreiben das H.264-Bild unabhängig von Vulkan-Ressourcen.
VideoDecodeH264PictureInfoKHR → pNext
Ergänzt Slice-Anzahl und Slice-Offsets und hängt die codec-spezifischen Angaben über pNext an die allgemeine Dekodierstruktur.
StdVideoDecodeH264ReferenceInfo
Beschreibt jedes ältere Referenzbild, von dem P- oder B-Bilder abhängen. Ohne diese Historie kann die GPU das aktuelle Bild nicht rekonstruieren.
Verbindet H.264-Referenzdaten mit einem Slot im Decoded Picture Buffer und dessen konkreter Bildressource.
VideoPictureResourceInfoKHR
Zeigt über imageViewBinding auf das GPU-Bild und nennt kodierte Größe und Array-Layer. Dies ist der physische Ziel- oder Referenzspeicher.
VideoBeginCodingInfoKHR
Öffnet den Videokodierbereich mit Session, Session-Parametern und aktiven Referenzslots. Optional folgt ein Session-Reset.
VideoDecodeInfoKHR → vkCmdDecodeVideoKHR
Bündelt Bitstream-Puffer, Bytebereich, Zielbild, aktuellen DPB-Slot und alle Referenzslots. Erst jetzt wird der Dekodierbefehl aufgezeichnet.
ImageMemoryBarrier2 + Semaphore
Barrieren wechseln Bildlayout und Besitz zwischen Video- und Grafikwarteschlange; ein Semaphor verhindert, dass die Grafik ein unfertiges Bild liest.
SubmitInfo → Draw → PresentInfoKHR
Die Dekodierwarteschlange erzeugt das Bild, die Grafikwarteschlange zeichnet es in ein Swapchain-Bild, und vkQueuePresentKHR übergibt dieses an den Bildschirm.