feat(*): 画布助手 - 新增 Live2D 配置导入与模型渲染支持

This commit is contained in:
ddCat
2026-09-21 14:11:29 +08:00
parent b8eefdad70
commit c5b81f696c
40 changed files with 1668 additions and 59 deletions

View File

@@ -0,0 +1,28 @@
import { describe, expect, test } from "bun:test";
import { adaptLive2DRenderOrders } from "../src/lib/canvas/live2d-core-adapter";
describe("Live2D Core render orders", () => {
test("preserves the legacy Core interface", () => {
const orders = new Int32Array([0]);
const original = () => orders;
const model = { getModel: () => ({ drawables: { count: 1, renderOrders: orders } }), getDrawableRenderOrders: original };
adaptLive2DRenderOrders(model);
expect(model.getDrawableRenderOrders).toBe(original);
});
test("reads current orders from the new Core on every frame", () => {
let orders = new Int32Array([1, 0]);
const model = { getModel: () => ({ drawables: { count: 2 }, offscreens: { count: 0 }, getRenderOrders: () => orders }), getDrawableRenderOrders: () => new Int32Array() };
adaptLive2DRenderOrders(model);
expect(model.getDrawableRenderOrders()).toBe(orders);
orders = new Int32Array([0, 1]);
expect(model.getDrawableRenderOrders()).toBe(orders);
});
test("rejects unsupported offscreens", () => {
const model = { getModel: () => ({ drawables: { count: 1 }, offscreens: { count: 1 } }), getDrawableRenderOrders: () => new Int32Array() };
expect(() => adaptLive2DRenderOrders(model)).toThrow("离屏渲染");
});
test("rejects missing or inconsistent orders", () => {
expect(() => adaptLive2DRenderOrders({ getModel: () => ({ drawables: { count: 1 } }), getDrawableRenderOrders: () => new Int32Array() })).toThrow("缺少");
expect(() => adaptLive2DRenderOrders({ getModel: () => ({ drawables: { count: 1 }, getRenderOrders: () => new Int32Array() }), getDrawableRenderOrders: () => new Int32Array() })).toThrow("不匹配");
});
});