Engine

El Engine es el estado central de la escena. Expone el viewport reactivo, la luz global, la calidad por defecto, los vidrios registrados y los niveles de captura. Se accede con useEngine(), dentro de un EssentiaRoot.

Uso

<script>
  import { useEngine } from 'essentia-core'

  const engine = useEngine()
  const width = $derived(engine.viewport.width)
</script>

Referencia

MiembroTipoDefaultDescripción
viewportViewport—
ticknumber—
cameraOrthographicCamera | null—
envMapTexture | null—Textura de entorno compartida por toda la escena. Asignada por EssentiaRoot.
lightLight—Luz direccional global, compartida por todas las primitivas que iluminan. Asignada por EssentiaRoot desde su prop light.
backgroundTargetWebGLRenderTarget | null—Captura de fondo del nivel 0 (el más profundo), la única sin stacking. Asignada por BackgroundCapture. Para muestrear la del nivel que corresponde a un Glass, usá captureFor(z).
glassMeshesSet<Mesh>—Registro de meshes Glass activos en escena. BackgroundCapture los agrupa por z en niveles de captura y oculta los de cada nivel (y los superiores) durante su captura, para que no aparezcan en su propio fondo. No es $state — no necesita reactividad, es un Set mutable de referencias.
postCaptureSet<PostCaptureHook>—Pasadas que BackgroundCapture ejecuta sobre cada captura de fondo después de renderizarla, en orden de registro (una vez por nivel). Las registra essentia-styles (p. ej. la pirámide de blur) mientras alguna primitiva las necesite. No es $state: es un Set mutable que se recorre en cada frame.
captureLevelsreadonly CaptureLevel[]—Niveles de captura activos en el último frame renderizado, del más profundo al de más adelante (como mínimo uno mientras BackgroundCapture esté montado). Los escribe BackgroundCapture en cada captura: no es $state, se lee en el render (ver captureFor).
qualityQuality—Calidad por defecto de las primitivas que la heredan (<Glass quality>). Asignada por EssentiaRoot desde su prop quality.
dirtyGlassSet<Object3D>—Glass que cambiaron desde la última captura sin que cambie nada más (ver invalidateGlass). Los lee y vacía BackgroundCapture en cada frame que renderiza. No es $state: se escribe y se lee en el render loop.
requestGlassFrame(() => void) | null—Pide el frame de invalidateGlass sin marcar el fondo como cambiado. Lo conecta BackgroundCapture; sin él invalidateGlass devuelve false.
invalidateGlass(mesh: Object3D) => boolean—Pide un frame porque cambió **solo** un Glass (hover, press, specular animado): lo que hay detrás de él no cambió, así que la captura de su nivel y las de los inferiores siguen vigentes y solo se rehacen las de los niveles que lo incluyen (z mayor). Cualquier otra invalidación en el mismo frame (invalidate() de Threlte, una task con autoInvalidate) vuelve a capturar todo: no usar esta API nunca deja una captura vieja. Solo para cambios que no tocan el fondo; un Glass que se mueve o cambia de tamaño va por invalidate().
captureFor(z: number) => CaptureLevel | null—Nivel de captura que muestrea un Glass a z de mundo z: el último cuyo z es <= al dado, así nunca muestrea la captura en la que se dibuja. Hay que llamarlo en el render (p. ej. en onBeforeRender): los niveles se reagrupan en cada captura. null si BackgroundCapture no está montado.

Anterior: EssentiaNode

Siguiente: Hybrid Bridge