Exemplo n.º 1
0
void RenderObject::Save(KeyedArchive * archive, SceneFileV2* sceneFile)
{
    AnimatedObject::Save(archive);

    if(NULL != archive)
    {
        archive->SetUInt32("ro.type", type);
        archive->SetUInt32("ro.flags", flags);
        archive->SetUInt32("ro.debugflags", debugFlags);
        archive->SetUInt32("ro.batchCount", GetRenderBatchCount());

        KeyedArchive *batchesArch = new KeyedArchive();
        for(uint32 i = 0; i < GetRenderBatchCount(); ++i)
        {
            RenderBatch *batch = GetRenderBatch(i);
            if(NULL != batch)
            {
                KeyedArchive *batchArch = new KeyedArchive();
                batch->Save(batchArch, sceneFile);
                if(batchArch->Count() > 0)
                {
                    batchArch->SetString("rb.classname", batch->GetClassName());
                }
                batchesArch->SetArchive(KeyedArchive::GenKeyFromIndex(i), batchArch);
                batchArch->Release();
            }
        }

        archive->SetArchive("ro.batches", batchesArch);
        batchesArch->Release();
    }
}
Exemplo n.º 2
0
RenderObject * RenderObject::Clone(RenderObject *newObject)
{
    if(!newObject)
    {
        DVASSERT_MSG(IsPointerToExactClass<RenderObject>(this), "Can clone only RenderObject");
        newObject = new RenderObject();
    }

    newObject->type = type;
    newObject->flags = flags;
    newObject->debugFlags = debugFlags;
    //ro->bbox = bbox;
    //ro->worldBBox = worldBBox;

    uint32 size = GetRenderBatchCount();
    for(uint32 i = 0; i < size; ++i)
    {
        RenderBatch *batch = GetRenderBatch(i)->Clone();
        newObject->AddRenderBatch(batch);
        batch->Release();
    }
    newObject->ownerDebugInfo = ownerDebugInfo;

    return newObject;
}
	RenderObject* SkyboxRenderObject::Clone(RenderObject *newObject)
	{
		if(!newObject)
		{
			DVASSERT_MSG(IsPointerToExactClass<SkyboxRenderObject>(this), "Can clone only SkyboxRenderObject");
			newObject = new SkyboxRenderObject();
		}
		
		SkyboxRenderObject* skyboxRenderObject = static_cast<SkyboxRenderObject*>(newObject);
		
		skyboxRenderObject->type = type;
		skyboxRenderObject->flags = flags;
		skyboxRenderObject->RemoveFlag(RenderObject::TREE_NODE_NEED_UPDATE);
		skyboxRenderObject->debugFlags = debugFlags;
		skyboxRenderObject->ownerDebugInfo = ownerDebugInfo;
		
		skyboxRenderObject->bbox = bbox;
		skyboxRenderObject->texturePath = texturePath;
		skyboxRenderObject->offsetZ = offsetZ;
		skyboxRenderObject->rotationZ = rotationZ;
		skyboxRenderObject->nonClippingDistance = nonClippingDistance;
		
		uint32 size = GetRenderBatchCount();
		for(uint32 i = 0; i < size; ++i)
		{
			RenderBatch *batch = GetRenderBatch(i)->Clone();
			skyboxRenderObject->AddRenderBatch(batch);
			batch->Release();
		}
		
		skyboxRenderObject->BuildSkybox();
		skyboxRenderObject->UpdateMaterial();
		
		return newObject;
	}