Ruffleshop UltraLow – Entwicklerdokumentation

Der UltraLow-Modus ist ein automatischer Leistungsmodus des Ruffleshop-Systems, der Geräte mit extrem schwacher Grafikleistung erkennt und auf eine speziell optimierte Shop-Version umschaltet.
Der gesamte Autostart-Code befindet sich direkt in jeder Startdatei — es gibt keine separate Autostart.js mehr.

 

In folgenden Mustershops ist die UltraLow-Version bereits verbaut worden und zugleich auch in der Firmware Downloadbar. (Es sind beide Editionen (Edition Classic sowie Webdesigner Edition in diesen Farben in Germany Gold und Himmelblau mit UltraLow-Version ausgerüstet. Hier zeigen wir die Webdesigner Edition in Germany Gold und Himmelblau mit dem Technology Modus).

 

Art-Nr. 055    (Package with 2 Kernels)


 

USD   USD       Art-Nr. 055 USD Germany Gold


 

EUR      EUR      Art-Nr. 055 EUR Germany Gold


 

CHF       CHF     Art-Nr. 055 CHF Germany Gold


 

 

 

Art-Nr. 065  (Package with 2 Kernels)



USD    USD     Art-Nr. 065   USD Himmelblau


 

EUR     EUR    Art-Nr. 065 EUR Himmelblau


 

CHF     CHF    Art-Nr. 065 CHF Himmelblau


 

 

1) Aufbau jeder Startdatei

Jede Startdatei enthält:

• den vollständigen Autostart-Code
• die GPU-Erkennung
• die automatische Weiterleitung (nur in normalen Startdateien)
• die Engine-Einstellungen
• den Kernel-Start

Die UltraLow-Version ist eine Duplikation der normalen Startdatei — aber mit zwei Änderungen:

1. Punkt 3 (Weiterleitung) wird entfernt
2. Ruffle-Qualität wird auf „low“ gesetzt

 

2) Wie erkennt der Ruffleshop ein UltraLow-Gerät?

Beim Laden der Seite führt der Autostart-Code einen Mini-Benchmark aus:

• Canvas-Test
• Renderzeit messen
• GPU-Klasse bestimmen

Wenn die Renderzeit über 0.30 ms liegt, wird das Gerät als:

ultra-low-end

klassifiziert.

 

3) GPU-Klassifizierung

function classifyGPU(avgFrame) {
if (avgFrame < 0.12) return "high-end";
if (avgFrame < 0.20) return "mid-range";
if (avgFrame < 0.30) return "low-end";
return "ultra-low-end";
}

Damit sind vier Leistungsstufen definiert:

• high-end
• mid-range
• low-end
• ultra-low-end

 

4) Wie wird die UltraLow-Version geladen?

In normalen Startdateien steht:

if (mode === "ultra-low-end") {
self.location.href = "ScarlettWebdesignerUltraLow.php";
return;
}

Das bedeutet:

• Der normale Ruffleshop wird nicht gestartet
• Stattdessen wird die UltraLow-Version geladen
• Der Webdesigner muss nichts tun
• Die Qualität des Ruffle-Players wird automatisch auf “low” gesetzt

 

5) Wichtiger Hinweis für Entwickler

In der UltraLow-Startdatei selbst muss Punkt 3 entfernt werden:

// 3) HTML-Version starten (sofort, ohne Kernel)
// Dieser Block wird in der UltraLow-Version GELÖSCHT

Warum?

• Die UltraLow-Version ist bereits die richtige Datei
• Sie darf sich nicht erneut weiterleiten
• Sonst entsteht eine Endlosschleife

 

6) Engine-Optimierung im UltraLow-Modus

Die Engine-Settings für UltraLow:

resolution: 0.60,
shadows: "off",
blur: false,
particles: "none",
shaderPasses: 1,
animations: "minimal"

Diese Einstellungen reduzieren:

• Renderauflösung
• Schattenberechnung
• Shader-Komplexität
• Partikel-Effekte
• Animationslast

Das ist die Engine-Ebene.


7) Rendering-Optimierung im UltraLow-Modus

Zusätzlich wird die Rendering-Qualität auf „low“ gesetzt:

Classic Edition

quality="low"

Webdesigner Edition

quality: "low"

Effekte:

• grobe Schrift
• kantige Linien
• vereinfachte Vektoren
• extrem schnelle Darstellung

Das ist die Rendering-Ebene.

 

8) Der Doppelschlag

UltraLow kombiniert:

• Engine-Low (GPU-Storm-Optimierung)
• Rendering-Low (Flash/Ruffle-Qualität)

Dieser Doppelschlag sorgt dafür, dass selbst sehr alte Android-Geräte den Shop wieder bewältigen können.

 

9) Vollständiger Autostart-Code (direkt in jeder Startdatei)

// ===============================
// RUFFLESHOP AUTO GPU START
// ===============================

(async function RuffleshopAutoStart() {

// 1) Mini-Benchmark
const avgFrame = await ruffleshopMiniBenchmark();

// 2) GPU-Klasse bestimmen
const mode = classifyGPU(avgFrame);

// 3) HTML-Version starten (sofort, ohne Kernel)
if (mode === "ultra-low-end") {
self.location.href = "ScarlettWebdesignerUltraLow.php";
return;
// WICHTIG: Kernel darf NICHT mehr starten
}

// 4) Modus anwenden
applyRuffleshopMode(mode);

// 5) Log für Entwickler
console.log("Ruffleshop GPU-Modus:", mode, "FrameTime:", avgFrame.toFixed(2), "ms");

// 6) Kernel starten
RuffleshopKernel.init();

})();

 

const RuffleshopKernel = {

init() {

const cfg = window.RUFFLESHOP_SETTINGS;

// Auflösung setzen
RuffleshopDisplay.setResolution(cfg.resolution);

// Shader konfigurieren
RuffleshopShaders.setPasses(cfg.shaderPasses);

// Schatten
RuffleshopEffects.setShadows(cfg.shadows);

// Blur
RuffleshopEffects.setBlur(cfg.blur);

// Partikel
RuffleshopParticles.setLevel(cfg.particles);

// Batching
if (cfg.batching) {
RuffleshopGPU.enableBatching();
}

// Animationen
RuffleshopAnimations.setMode(cfg.animations);

// UI laden
RuffleshopUI.init();

// App starten
RuffleshopApp.start();
}
};

 

 

async function ruffleshopMiniBenchmark() {
const frames = [];
const start = performance.now();

while (performance.now() - start < 100) {
const frameStart = performance.now();
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
ctx.fillStyle = '#000';
ctx.fillRect(0, 0, 50, 50);
frames.push(performance.now() - frameStart);
}

return frames.reduce((a, b) => a + b, 0) / frames.length;
}

function classifyGPU(avgFrame) {
if (avgFrame < 0.12) return "high-end";
if (avgFrame < 0.20) return "mid-range";
if (avgFrame < 0.30) return "low-end";
return "ultra-low-end";
}

function applyRuffleshopMode(mode) {
switch (mode) {
case "high-end":
window.RUFFLESHOP_SETTINGS = {
resolution: 1.0,
shadows: "dynamic",
blur: true,
particles: "high",
shaderPasses: 2
};
break;

case "mid-range":
window.RUFFLESHOP_SETTINGS = {
resolution: 0.85,
shadows: "static",
blur: "reduced",
particles: "medium",
shaderPasses: 1
};
break;

case "low-end":
window.RUFFLESHOP_SETTINGS = {
resolution: 0.70,
shadows: "off",
blur: false,
particles: "low",
shaderPasses: 1,
batching: true
};
break;

case "ultra-low-end":
window.RUFFLESHOP_SETTINGS = {
resolution: 0.60,
shadows: "off",
blur: false,
particles: "none",
shaderPasses: 1,
animations: "minimal"
};
break;
}
}

//=========================================================

Die UltraLow-Version enthält denselben Code — aber ohne Punkt 3. Und mit Quality = "low".

 

10) Fazit

Der UltraLow-Modus ist die technisch sauberste Lösung, um den Ruffleshop auf extrem schwacher Hardware nutzbar zu machen. Durch die Kombination aus Engine-Optimierung und Rendering-Optimierung entsteht ein Modus, der selbst alte Android-Geräte wieder voll funktionsfähig macht.