CPU 解码走 worker 线程,GPU 上传由你按预算泵送:字节、操作数硬上限加时间软上限——帧率由你说了算。
xge3d_loader_desc_t ld = { 0 };
ld.max_requests = 64; // 0 取默认 64,上限 1024
xge3d_loader *pLoader;
xge3dLoaderCreate(&ld, &pLoader);
xge3d_request_t tReq;
xge3dLoaderRequest(pLoader, "assets/scene.glb", &tReq);状态机:QUEUED → LOADING → CPU_READY → UPLOADING → READY(或 FAILED / CANCELLED)。xge3dLoaderStatus 随时查询进度字节与结果。
xge3d_upload_budget_t tBudget = { 2<<20, 2000, 16 }; // 字节 / 微秒 / 操作数
xge3d_upload_stats_t tStats;
xge3dLoaderPump(pLoader, &tBudget, &tStats);
// 字节与操作数是硬顶(大缓冲/纹理分片上传),时间是软限(操作间隙检查)
// 被挡住时的最小需求通过 min_next_bytes 报告xge3d_request_info_t tInfo;
xge3dLoaderStatus(pLoader, tReq, &tInfo);
if (tInfo.state == XGE3D_REQUEST_READY) {
xge3d_model *pModel;
xge3dLoaderTake(pLoader, tReq, &pModel); // 成功即失效句柄
}XGE3D_LOADER_RESOURCE_PROVIDERS 标志接入 xgeResource 回调(工作线程执行,须线程安全);默认 IO 是普通文件与 file://。