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.timeundframe.deltaab, 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.
