前端开发
PixiJS v8 渲染核心概念:需要选择或确认…
当你使用 PixiJS v8 并需要理解或控制渲染器后端选择、每帧渲染流程、环境适配、RenderTexture/RenderTarget 以及上下文/设备丢失恢复时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
PixiJS v8 渲染核心概念:需要选特定
解决思路
- 查看 `app.renderer.name` 来判断当前实际后端,值为 `'webgl' | 'webgpu' | 'canvas'`。
- 用 `app.ticker.add((ticker) => { sprite.rotation += 0.01 * ticker.deltaTime; });` 注册每帧回调,并按 `ticker.deltaTime` 做帧率无关更新。
- 用 `const tex = app.renderer.extract.texture({ target: app.stage });` 从 `app.stage` 提取纹理。
- 用 `app.renderer.render({ container: app.stage });` 手动触发对舞台的渲染。
- 知道 `app.renderer` 是由 `autoDetectRenderer` 选择的 `WebGLRenderer`、`WebGPURenderer` 或 `CanvasRenderer`。
- 理解 `TickerPlugin` 会自动驱动 `renderer.render()`;只有设置 `autoStart: false` 时才需要自己手动调用。
- 后端选择发生在 `Application.init({ preference })` 中;Application 的构造和生命周期参考 `pixijs-application`。
- 需要在 WebGL 和 WebGPU 之间选择时,把 `preference` 设为 `['webgpu', 'webgl']`;WebGPU 可用时最快,WebGL 是可靠降级。
- 需要看后端偏好形式、每种 renderer 的选项、systems 与 pipes 时,打开 `references/renderers.md`。
- 需要看每帧执行、优先级顺序、时间单位和手动渲染时,打开 `references/render-loop.md`。
- 需要深入单个主题时,打开 Topics 表中对应 reference 文件。
- 处理非浏览器目标(`DOMAdapter`、`WebWorkerAdapter`、自定义 adapter、严格 CSP)时,参考 `pixijs-environments` 技能。
- 设置 Application 时从 `pixijs-application` 开始;本技能解释 renderer 底层行为。
- 在 Web Worker 中运行时,在 `app.init` 前设置 `DOMAdapter.set(WebWorkerAdapter)`;完整设置见 `pixijs-environments` 技能。
- 需要手动控制渲染时机时,设置 `autoStart: false`,并在自己的循环中调用 `app.renderer.render(app.stage)`。
- 集成物理库时,把物理更新加到 `UPDATE_PRIORITY.HIGH`,让它在 `UPDATE_PRIORITY.LOW` 的渲染前运行。
- 编写自定义可渲染对象时,实现 `RenderPipe`;参考 `pixijs-custom-rendering` 技能。
- 渲染到纹理或自定义 render target 时,给 `renderer.render()` 传 `target`,或构建带显式 color 和 depth attachments 的 `RenderTarget`;详见 `references/renderers.md`。
- 在严格 CSP 下运行时,导入 `'pixi.js/unsafe-eval'`;详见 `pixijs-environments` 技能。
- 把 renderer 理解为 `Systems`(生命周期服务:textures、buffers、state、filters、masks)加 `RenderPipes`(每种可渲染对象的指令构建器:sprite、graphics、mesh、particle、text、tiling)。
- 编写自定义可渲染对象时,实现 `RenderPipe` 并通过 extensions 注册。
- 后端特定的 systems 和 pipes 可以通过 renderer loader extension(`WebGLLoader`、`WebGPULoader`、`CanvasLoader`、`RendererLoader`)动态导入;详见 `references/renderers.md`。
- 需要做 code splitting 或懒加载 renderer systems 时,使用 renderer loader extension 动态导入对应后端代码。
- 用 `app.ticker.add(fn)` 注册每帧回调;`TickerPlugin` 在 `UPDATE_PRIORITY.LOW` 注册 `app.render()`,所以 `NORMAL` 或 `HIGH` 的 ticker 回调会先于绘制运行。
- 要禁用自动渲染插件时,设置 `autoStart: false` 改为手动控制。
- `DOMAdapter` 抽象 PixiJS 发起的所有 DOM 调用(canvas 创建、图片加载、fetch、XML 解析)。
- 为 Worker 切换为 `DOMAdapter.set(WebWorkerAdapter)`,或为 Node/SSR 实现自定义 `Adapter`。
- 必须在 `Application.init` 前完成 adapter 切换。
- 不要在没有 `await` 的情况下访问 `app.renderer`;先 `await app.init({ width: 800, height: 600 })`,再访问 `app.renderer.name`,因为 `Application.init()` 是异步的,`app.renderer`、`app.canvas`、`app.screen` 在 promise resolve 后才存在。
- 不要在 `Application.init` 后设置 `DOMAdapter`;先 `DOMAdapter.set(WebWorkerAdapter)`,再 `await app.init({ width: 800, height: 600 })`,否则 init 已经分配资源,错误 adapter 会被写入 renderer。
- 不要把 `preference` 当保证;即使 `await app.init({ preference: 'webgpu' })` 后,也用 `if (app.renderer.name === 'webgpu')` 分支,只有匹配时才使用 WebGPU 专属功能,因为不支持时会降级到 WebGL 或 Canvas。
- 需要处理 `RenderTexture`/`RenderTarget` 细节(`flipY`、`mipLevel`、`layer`、`bind/push/pop`、`copyDepthTexture`、depth-only)时,查阅 `references/renderers.md` 等对应深挖资料。
- 需要处理 WebGL context loss 或 WebGPU device loss 恢复时,按本技能说明查阅对应深挖资料,并用 `app.renderer.name` 区分后端。
- 需要具体 API 时查阅 `autoDetectRenderer`、`AbstractRenderer`、`WebGLRenderer`、`WebGPURenderer`、`CanvasRenderer`、`Application`、`DOMAdapter` 的文档。
适用边界 · 注意事项
- 不适用于非 PixiJS v8 项目,或使用其他渲染库/框架的场景。
- 不适用于只处理场景图基础(Containers、transforms、destroy);应优先看 `pixijs-scene-core-concepts`。
- 不适用于 Application 构造和生命周期、ticker 细节、完整 Web Worker/SSR/严格 CSP 配置;分别优先看 `pixijs-application`、`pixijs-ticker`、`pixijs-environments`。