ASTROFOX
Plugins

Plugin-Laufzeitumgebungen

Implementiere Shader-, Canvas-Worker- und Three.js-Plugins für Astrofox.

Die Laufzeitumgebung bestimmt, wie ein Plugin rendert und welche Manifest-Felder es verwendet.

Shader-Display#

Ein Shader-Display erzeugt aus einem Fragment-Shader eine neue Ebene. Es erhält die Größe der Bühne, eine deterministische Zeit, den Audiopegel und alle angeforderten FFT-Daten.

Zu den verfügbaren GLSL-Eingaben gehören:

Schreibe die endgültige Farbe in gl_FragColor. Der Alphakanal wird berücksichtigt, wenn Astrofox das Display in die Komposition einfügt.

Shader-Effekt#

Ein Shader-Effekt erhält die bis dahin gerenderte Komposition in inputTexture sowie Zeit, Delta und Lautstärke. FFT- oder Zeitbereichsdaten erhält er nicht:

Ordne Manifest-Eigenschaften mit dem Objekt uniforms eigenen Uniforms zu. Gültige Typen sind float, int, vec2, vec3, vec4 und color.

Worker-Display#

Ein Worker-Display exportiert als Default-Export eine Factory. Es läuft ohne DOM in einem eigenen Web Worker und zeichnet normalerweise in ein OffscreenCanvas.

Beachte diese Regeln:

  • Leite Animationen aus frame.time und frame.delta ab, niemals aus der Systemzeit.
  • Initialisiere Zufallswerte mit frame.seed, der für die Plugin-Instanz stabil bleibt.
  • Zeichne in jedem Frame das gesamte Canvas neu. Beim Übertragen der Bitmap an den Host wird das zugrunde liegende Canvas des Workers geleert.
  • Gib eigene Ressourcen in dispose() frei.
  • Halte Frames reaktionsschnell. Ein Rendervorgang, der in der Vorschau länger als etwa 3 Sekunden oder beim Export länger als 5 Sekunden dauert, wird abgebrochen und die Instanz als nicht reagierend markiert.

Three.js-Worker-Display#

Fordere die Three.js-Kopie von Astrofox an, statt Three.js herunterzuladen oder zu bündeln:

Die Factory erhält libraries.three und einen gemeinsam genutzten, vom Host konfigurierten renderer. Erstelle deine eigene Szene, Kamera, Geometrie, Materialien und Lichter; verwende den geliehenen Renderer für die Ausgabe.

Der Renderer wird gemeinsam genutzt. Gib ihn nicht frei und ändere nicht dauerhaft seine Clear-Color, den Farbraum, das Tone Mapping, Schatten, das Render-Target, den Scissor-Zustand oder andere globale Einstellungen. Setze jeden Zustand, den du vorübergehend änderst, zurück, bevor du aus render() zurückkehrst.

Kamerasteuerung durch den Host#

Setze "camera": true bei einem Three.js-Worker-Display, um die Eigenschaften cameraAzimuth, cameraPolar und cameraDistance hinzuzufügen und das Orbit-und-Dolly-Kamerawerkzeug der Bühne zu aktivieren.

Das Plugin verwaltet weiterhin die eigentliche Kamera und Beleuchtung. Astrofox liefert nur die Benutzerinteraktion und die gespeicherten Eigenschaftswerte.

Worker-Plugins können nicht auf das Netzwerk zugreifen, sofern das Manifest nicht die Berechtigung network anfordert. Selbst mit dieser Berechtigung bleiben ausführbare Remote-Importe blockiert; bündle den Code, den dein Plugin ausführt.