Agent Skills
› google/filament
› filament-lifetime
filament-lifetime
GitHub指导 Filament 渲染引擎中对象的生命周期管理,涵盖 ECS 实体组件及 GPU 原生资源的正确创建与销毁规范,防止内存泄漏。
Trigger Scenarios
初始化 Filament 渲染管线
分配或释放 GPU 缓冲区
处理 Filament 实体生命周期
Install
npx skills add google/filament --skill filament-lifetime -g -y
SKILL.md
Frontmatter
{
"name": "filament-lifetime",
"description": "Enforce correct Filament object creation and destruction lifecycles. Use this skill when initializing rendering pipelines or allocating\/deallocating GPU buffers and entities."
}
Filament object creation and destruction lifecycles
Filament manages its own native allocations. To prevent segmentation faults and memory leaks, follow these rules:
1. ECS Entities & Components
Getting the Entity Manager
- Preferred Method: Retrieve the
EntityManagerdirectly from theEngineinstance:utils::EntityManager& em = engine->getEntityManager(); - Alternative (Avoid if engine is available): Only use the global singleton if the
Enginepointer is inaccessible:utils::EntityManager& em = utils::EntityManager::get();
Entities
- Create: Create Entity IDs using the entity manager:
utils::Entity entity = engine->getEntityManager().create(); - Destroy: Free the Entity ID from the entity manager:
engine->getEntityManager().destroy(entity);
Components
- Create: Attach components to an existing entity using manager builders:
- Renderables/Lights: Use
RenderableManager::BuilderorLightManager::Builderon the entity:RenderableManager::Builder(1) .geometry(0, RenderableManager::PrimitiveType::TRIANGLES, vb, ib) .material(0, matInstance) .build(*engine, entity); - Cameras: Attach a Camera component to the entity:
Camera* camera = engine->createCamera(entity);
- Renderables/Lights: Use
- Destroy (CRITICAL):
- To clean up the entire entity:
First, destroy all Filament-managed components on the entity:
engine->destroy(entity);Second, free the Entity ID:engine->getEntityManager().destroy(entity);// Correct Entity Cleanup engine->destroy(myEntity); engine->getEntityManager().destroy(myEntity); - To remove a single component from the entity:
You can destroy specific components individually without deleting the entity:
- Cameras:
engine->destroyCameraComponent(entity); - Transforms:
engine->getTransformManager().destroy(entity); - Renderables:
engine->getRenderableManager().destroy(entity);
- Cameras:
- To clean up the entire entity:
First, destroy all Filament-managed components on the entity:
2. Engine-Managed Native Objects
Native GPU objects are created using the Engine factory or nested Builder patterns.
- NO
delete: Never call standard C++deleteon pointers returned byEngine. - Direct Factories: Instantiated directly from the
Engineinstance.- Objects:
View,Scene,Renderer,SwapChain. - Pattern:
View* view = engine->createView(); // ... engine->destroy(view);
- Objects:
- Builder Pattern: Instantiated using a nested
Builderclass, passing the engine instance tobuild(*engine).- Objects:
VertexBuffer,IndexBuffer,Texture,Material,IndirectLight,Skybox,RenderTarget. - Pattern:
VertexBuffer* vb = VertexBuffer::Builder() .vertexCount(count) .bufferCount(1) .attribute(VertexAttribute::POSITION, 0, VertexBuffer::AttributeType::FLOAT3) .build(*engine); // ... engine->destroy(vb);
- Objects:
Version History
- d8b4a37 Current 2026-08-20 07:30


