task(C4): use_pixi_renderer flag on by default with e2e proof
This commit is contained in:
@@ -17,7 +17,7 @@ import { logger } from '../utils/logger';
|
||||
import { CADDocument } from '../kernel/document/CADDocument';
|
||||
import { YjsDocument } from '../crdt/YjsDocument';
|
||||
import { setActiveDocument, getActiveDocument } from '../kernel/document/documentService';
|
||||
import { V2_TOOLS_ENABLED } from '../kernel/featureFlags';
|
||||
import { V2_TOOLS_ENABLED, USE_PIXI_RENDERER } from '../kernel/featureFlags';
|
||||
import { PixiRenderer } from '../render/pixi/PixiRenderer';
|
||||
import { pluginRegistry } from '../plugins';
|
||||
|
||||
@@ -71,18 +71,24 @@ const CanvasArea: React.FC<CanvasAreaProps> = ({
|
||||
// App-Level-Zugriffspunkt für HistoryPanel/Tastenkürzel (Task A4.11):
|
||||
setActiveDocument(v2Doc);
|
||||
|
||||
// ── Task C2: PixiJS-Renderer parallel schalten ──
|
||||
// ── Task C2/C4: PixiJS-Renderer parallel schalten ──
|
||||
// DEFENSIV: Ein Ausfall von Pixi (z.B. WebGL im Headless-Browser)
|
||||
// darf NIEMALS den kompletten Editor-Mount brechen. Im Fehlerfall
|
||||
// läuft weiter ohne Overlay.
|
||||
let pixi: PixiRenderer | null = null;
|
||||
const pixiCanvas = pixiCanvasRef.current;
|
||||
if (pixiCanvas) {
|
||||
if (pixiCanvas && USE_PIXI_RENDERER) {
|
||||
try {
|
||||
pixi = new PixiRenderer();
|
||||
pixiRendererRef.current = pixi;
|
||||
pixi.init(pixiCanvas);
|
||||
pixi.waitForReady().catch((err) => {
|
||||
pixi.waitForReady().then(() => {
|
||||
// Task C4: Debug-Hook für Playwright-E2E-Assertions
|
||||
(window as unknown as { __v2Debug: unknown }).__v2Debug = {
|
||||
renderer: pixi,
|
||||
info: () => pixiRendererRef.current?.getDebugInfo() ?? null,
|
||||
};
|
||||
}).catch((err) => {
|
||||
logger.warn('Pixi init failed — V2-Overlay deaktiviert:', err);
|
||||
pixi = null;
|
||||
pixiRendererRef.current = null;
|
||||
|
||||
@@ -13,3 +13,11 @@
|
||||
/** Ist der V2-Werkzeugpfad (Dispatcher/CADDocument) aktiv? Default: ja. */
|
||||
export const V2_TOOLS_ENABLED: boolean =
|
||||
import.meta.env.VITE_TOOL_DISPATCHER !== 'legacy';
|
||||
|
||||
/**
|
||||
* Task C4: Pixi als Primär-Renderer für V2-Elemente (Overlay über Legacy).
|
||||
* Default: ja (durch phase-a-verify E2E abgesichert).
|
||||
* Opt-out: VITE_USE_PIXI=false.
|
||||
*/
|
||||
export const USE_PIXI_RENDERER: boolean =
|
||||
import.meta.env.VITE_USE_PIXI !== 'false';
|
||||
|
||||
@@ -48,6 +48,9 @@ export class PixiRenderer implements RenderAdapter {
|
||||
await this.ready;
|
||||
}
|
||||
|
||||
/** Task C4: true sobald setupApp fertig ist (via readyResolve gesetzt). */
|
||||
private initialized = false;
|
||||
|
||||
// ── Lifecycle ────────────────────────────────────────────
|
||||
|
||||
init(canvas: HTMLCanvasElement): void {
|
||||
@@ -89,6 +92,7 @@ export class PixiRenderer implements RenderAdapter {
|
||||
this.overlayLayer = overlay;
|
||||
this.app.stage.addChild(overlay);
|
||||
this.applyViewportTransform();
|
||||
this.initialized = true; // Task C4: fuer getDebugInfo
|
||||
});
|
||||
}
|
||||
|
||||
@@ -252,6 +256,17 @@ export class PixiRenderer implements RenderAdapter {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Task C4: Debug-Info für Playwright-E2E-Assertions.
|
||||
* Ermöglicht Testabfragen wie 'wie viele Elemente sind gerendert?'
|
||||
*/
|
||||
getDebugInfo(): { cachedElements: number; ready: boolean } {
|
||||
return {
|
||||
cachedElements: this.graphicsCache.size,
|
||||
ready: this.initialized,
|
||||
};
|
||||
}
|
||||
|
||||
// ── Internes ─────────────────────────────────────────────
|
||||
|
||||
private applyViewportTransform(): void {
|
||||
|
||||
Reference in New Issue
Block a user