Why are you overriding Free? I believe the documentation says that you should never override Free. Override Destroy instead.

[pascal]destructor TBillBoard.Destroy;
begin
SafeDelete(_VB);
SafeDelete(_Texture);
inherited;
end;
[/pascal]

By the way, I always use the following to free my COM objects.

[pascal]destructor TBillBoard.Destroy;
begin
_VB := nil;
_Texture := nil;
inherited;
end;
[/pascal]

Setting a COM object pointer to nil releases the COM object.