@spatialwalk/avatarkit
Version:
SPAvatar SDK - 3D Gaussian Splatting Avatar Rendering SDK
141 lines • 3.98 kB
TypeScript
/**
* Avatar Core WASM 内存管理工具
*
* 提供高效的内存分配、数据传递和零拷贝访问功能
* 专门为 avatar_core_wasm 优化
*/
interface WASMModule {
_malloc: (size: number) => number;
_free: (ptr: number) => void;
writeArrayToMemory: (array: Uint8Array, ptr: number) => void;
HEAPU8: Uint8Array;
HEAP32: Int32Array;
HEAPF32: Float32Array;
getValue: (ptr: number, type: string) => number;
setValue: (ptr: number, value: number, type: string) => void;
}
interface MemoryAllocation {
ptr: number;
size: number;
}
export interface TemplateResources {
flameModel: ArrayBuffer;
flameTemplate: ArrayBuffer;
teethPb: ArrayBuffer;
teethNpz: ArrayBuffer;
}
export interface CharacterData {
shape: ArrayBuffer;
pointCloud: ArrayBuffer;
}
export interface ExpressionParams {
expression?: number[];
jaw?: number[];
eyeR?: number[];
eyeL?: number[];
pose?: number[];
neck?: number[];
translation?: number[];
}
export interface ArrayMetadata {
ptr: number;
size: number;
dtype: string;
}
export declare class AvatarCoreMemoryManager {
private module;
private allocatedPointers;
private structPointers;
constructor(wasmModule: WASMModule);
/**
* 分配 WASM 内存并复制数据 - 纯 API 方式
*/
allocateAndCopy(arrayBuffer: ArrayBuffer): MemoryAllocation;
/**
* 创建 AvatarTemplateConfig 结构体
*/
createTemplateConfig(resources: TemplateResources): number;
/**
* 创建 AvatarCharacterData 结构体 - 新版 Emscripten 方式
*/
createCharacterData(shapeBuffer: ArrayBuffer, plyBuffer: ArrayBuffer): number;
/**
* 读取 AvatarFlameParams 结构体数据
* Used to extract current animation frame parameters from WASM memory
*/
readFlameParams(paramsPtr: number): {
shape_params: number[];
expr_params: number[];
rotation: number[];
translation: number[];
neck_pose: number[];
jaw_pose: number[];
eyes_pose: number[];
eyelid: number[];
has_eyelid: boolean;
};
/**
* 创建 AvatarFlameParams 结构体 - 新版 Emscripten 方式
*/
createFlameParams(params: {
shape_params?: number[];
expr_params?: number[];
rotation?: number[];
translation?: number[];
neck_pose?: number[];
jaw_pose?: number[];
eyes_pose?: number[];
eyelid?: number[];
has_eyelid?: boolean;
}): number;
/**
* 读取 AvatarSplatPointFlatArray 结构体数据(预计算协方差)
*
* 结构体布局:
* - AvatarSplatPointFlat* points (0-3, 32位指针)
* - uint32_t point_count (4-7)
* - float compute_time_ms (8-11)
*
* 每个点布局 (52 bytes):
* - position[3] (12 bytes)
* - color[4] (16 bytes, RGBA)
* - covariance[6] (24 bytes, 预计算好的协方差矩阵上三角)
*
* ⚠️ 使用 getValue 逐个读取,避免动态内存的 HEAPF32 detachment 问题
*/
readSplatPointFlatArray(arrayPtr: number): Float32Array | null;
/**
* 读取AvatarMeshData结构体数据
*/
readMeshData(outputPtr: number): {
vertices: Float32Array;
vertexCount: number;
faces: Uint32Array;
faceCount: number;
landmarks: Float32Array | null;
landmarkCount: number;
computeTime: number;
};
/**
* 释放指定指针的内存
*/
free(ptr: number): void;
/**
* 释放结构体内存
*/
freeStruct(name: string): void;
/**
* 清理所有分配的内存
*/
cleanup(): void;
/**
* 获取内存使用统计
*/
getMemoryStats(): {
allocatedPointers: number;
structPointers: number;
totalAllocatedMB: number;
};
}
export {};
//# sourceMappingURL=avatarCoreMemory.d.ts.map