aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/module/iofx/src/IofxAssetImpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'APEX_1.4/module/iofx/src/IofxAssetImpl.cpp')
-rw-r--r--APEX_1.4/module/iofx/src/IofxAssetImpl.cpp1138
1 files changed, 0 insertions, 1138 deletions
diff --git a/APEX_1.4/module/iofx/src/IofxAssetImpl.cpp b/APEX_1.4/module/iofx/src/IofxAssetImpl.cpp
deleted file mode 100644
index b04211a9..00000000
--- a/APEX_1.4/module/iofx/src/IofxAssetImpl.cpp
+++ /dev/null
@@ -1,1138 +0,0 @@
-/*
- * Copyright (c) 2008-2015, NVIDIA CORPORATION. All rights reserved.
- *
- * NVIDIA CORPORATION and its licensors retain all intellectual property
- * and proprietary rights in and to this software, related documentation
- * and any modifications thereto. Any use, reproduction, disclosure or
- * distribution of this software and related documentation without an express
- * license agreement from NVIDIA CORPORATION is strictly prohibited.
- */
-
-
-#include "Apex.h"
-#include "ApexUsingNamespace.h"
-#include "IofxAssetImpl.h"
-#include "IofxActorImpl.h"
-#include "IofxScene.h"
-#include "ModuleIofxImpl.h"
-#include "Modifier.h"
-#include "ModifierImpl.h"
-#include "SceneIntl.h"
-#include "IofxManagerIntl.h"
-//#include "ApexSharedSerialization.h"
-#include "CurveImpl.h"
-
-namespace nvidia
-{
-namespace iofx
-{
-
-
-IofxAssetImpl::IofxAssetImpl(ModuleIofxImpl* module, ResourceList& list, const char* name) :
- mRenderMeshAssetTracker(module->mSdk, RENDER_MESH_AUTHORING_TYPE_NAME),
- mSpriteMaterialAssetTracker(module->mSdk),
- mModule(module),
- mName(name),
- mSpriteSemanticBitmap(0),
- mMeshSemanticBitmap(0)
-{
- using namespace IofxAssetParametersNS;
-
- NvParameterized::Traits* traits = GetInternalApexSDK()->getParameterizedTraits();
- mParams = (IofxAssetParameters*)traits->createNvParameterized(IofxAssetParameters::staticClassName());
-
- PX_ASSERT(mParams);
-
- // LRR: Hmmmm, these will never be setup for authors, it's a good thing we can't create actors from authors!
- mRenderMeshList = NULL;
- mSpriteParams = NULL;
-
- list.add(*this);
-}
-
-IofxAssetImpl::IofxAssetImpl(ModuleIofxImpl* module,
- ResourceList& list,
- NvParameterized::Interface* params,
- const char* name) :
- mRenderMeshAssetTracker(module->mSdk, RENDER_MESH_AUTHORING_TYPE_NAME),
- mSpriteMaterialAssetTracker(module->mSdk),
- mParams((IofxAssetParameters*)params),
- mSpriteParams(NULL),
- mModule(module),
- mName(name),
- mSpriteSemanticBitmap(0),
- mMeshSemanticBitmap(0)
-{
- using namespace MeshIofxParametersNS;
-
- if (mParams->iofxType &&
- !nvidia::strcmp(mParams->iofxType->className(), MeshIofxParameters::staticClassName()))
- {
- MeshIofxParameters* mIofxParams = static_cast<MeshIofxParameters*>(mParams->iofxType);
-
- ParamDynamicArrayStruct* tmpStructPtr = (ParamDynamicArrayStruct*) & (mIofxParams->renderMeshList);
- mRenderMeshList = PX_NEW(ParamArray<meshProperties_Type>)(mIofxParams, "renderMeshList", tmpStructPtr);
- }
- else
- {
- mRenderMeshList = NULL;
- }
-
- if (mParams->iofxType &&
- !nvidia::strcmp(mParams->iofxType->className(), SpriteIofxParameters::staticClassName()))
- {
- mSpriteParams = static_cast<SpriteIofxParameters*>(mParams->iofxType);
- }
-
-
- // call this now to "initialize" the asset
- postDeserialize();
-
- list.add(*this);
-}
-
-IofxAssetImpl::~IofxAssetImpl()
-{
- for (uint32_t i = mSpawnModifierStack.size(); i--;)
- {
- delete mSpawnModifierStack[i];
- }
-
- for (uint32_t i = mContinuousModifierStack.size(); i--;)
- {
- delete mContinuousModifierStack[i];
- }
-}
-
-void IofxAssetImpl::destroy()
-{
- /* Assets that were forceloaded or loaded by actors will be automatically
- * released by the ApexAssetTracker member destructors.
- */
- if (mParams)
- {
- mParams->destroy();
- mParams = NULL;
- }
-
- if (mRenderMeshList)
- {
- PX_DELETE(mRenderMeshList);
- }
-
-#if IOFX_SLOW_COMPOSITE_MODIFIERS
- // destroy any color vs life params that we may have laying around
- for (uint32_t i = 0; i < mCompositeParams.size(); i++)
- {
- mCompositeParams[i]->destroy();
- }
- mCompositeParams.clear();
-#endif
-
- // this will release all of this asset's IOFX actors, which is necessary, otherwise
- // the IOFX actors will have their APEX Render Meshes ripped out from underneath them
- ResourceList::clear();
-
- delete this;
-}
-
-void IofxAssetImpl::release()
-{
- mModule->mSdk->releaseAsset(*this);
-}
-
-void IofxAssetImpl::removeAllActors()
-{
- ApexContext::removeAllActors();
-}
-
-void IofxAssetImpl::addDependentActor(ApexActor* actor)
-{
- WRITE_ZONE();
- if (actor)
- {
- actor->addSelfToContext(*this);
- }
-}
-
-
-
-void IofxAssetImpl::preSerialize(void* userData_)
-{
- PX_UNUSED(userData_);
-}
-
-void IofxAssetImpl::postDeserialize(void* userData_)
-{
- PX_UNUSED(userData_);
-
- NvParameterized::Traits* traits = GetInternalApexSDK()->getParameterizedTraits();
-
- PX_ASSERT(mParams->iofxType);
- if (!mParams->iofxType)
- {
- return;
- }
-
- initializeAssetNameTable();
-
- // destroy the old modifier stacks
- for (uint32_t i = mSpawnModifierStack.size(); i--;)
- {
- delete mSpawnModifierStack[i];
- }
- mSpawnModifierStack.resize(0);
-
- for (uint32_t i = mContinuousModifierStack.size(); i--;)
- {
- delete mContinuousModifierStack[i];
- }
- mContinuousModifierStack.resize(0);
-
-#if IOFX_SLOW_COMPOSITE_MODIFIERS
- // destroy any color vs life params that we may have laying around
- for (uint32_t i = 0; i < mCompositeParams.size(); i++)
- {
- mCompositeParams[i]->destroy();
- }
- mCompositeParams.clear();
-#endif
-
- const char* handleNameList[] = { "spawnModifierList", "continuousModifierList" };
-
-// 'param' and 'newMod' are defined in the local scope where this macro is used
-#define _MODIFIER(Type) \
- else if( !nvidia::strcmp(param->className(), #Type "ModifierParams") ) \
- { \
- newMod = PX_NEW( Type##ModifierImpl )( (Type##ModifierParams *)param ); \
- }
-
- for (uint32_t i = 0; i < 2; i++)
- {
- NvParameterized::Handle h(*mParams->iofxType);
- mParams->iofxType->getParameterHandle(handleNameList[i], h);
- int listSize = 0;
- h.getArraySize(listSize);
-
- for (int j = 0; j < listSize; j++)
- {
- NvParameterized::Interface* param = 0;
- NvParameterized::Handle ih(*mParams->iofxType);
- Modifier* newMod = 0;
-
- h.getChildHandle(j, ih);
- ih.getParamRef(param);
- PX_ASSERT(param);
- if (!param)
- {
- continue;
- }
-
- if (newMod != 0) //this'll never happen :-)
- {}
-
-#include "ModifierList.h"
-
-#if IOFX_SLOW_COMPOSITE_MODIFIERS
- // LRR: there is a better way to do this, but I don't have time at the moment to
- // make this any cleaner
-
- // special case, we don't currently have an initial color modifier, just insert
- // a colorVsLife modifier for each color channel
- else if (!nvidia::strcmp(param->className(), "InitialColorModifierParams"))
- {
- InitialColorModifierParams* icParams = (InitialColorModifierParams*)param;
-
- for (uint32_t colorIdx = 0; colorIdx < 4; colorIdx++)
- {
- ColorVsLifeModifierParams* p = (ColorVsLifeModifierParams*)
- traits->createNvParameterized(ColorVsLifeModifierParams::staticClassName());
-
- // save these parameterized classes off for later, we'll need to destroy them
- mCompositeParams.pushBack(p);
-
- ColorVsLifeModifierImpl* cvlMod = PX_NEW(ColorVsLifeModifierImpl)(p);
- PX_ASSERT(cvlMod);
-
- // set the color channel
- cvlMod->setColorChannel((ColorChannel)colorIdx);
-
- // set the curve
- CurveImpl curve;
- curve.addControlPoint(Vec2R(0.0f, icParams->color[colorIdx]));
- curve.addControlPoint(Vec2R(1.0f, icParams->color[colorIdx]));
-
- cvlMod->setFunction(&curve);
-
- // save which sprite render semantics this modifier will update
- setSpriteSemanticsUsed(cvlMod->getModifierSpriteSemantics());
- setMeshSemanticsUsed(cvlMod->getModifierMeshSemantics());
- ModifierStack& activeStack = getModifierStack(i);
- activeStack.pushBack(cvlMod);
- }
- }
-
- else if (!nvidia::strcmp(param->className(), "ColorVsLifeCompositeModifierParams"))
- {
- // setup an array so we can get the control points easily
- ColorVsLifeCompositeModifierParams* cParams = (ColorVsLifeCompositeModifierParams*)param;
-
- if (cParams->controlPoints.arraySizes[0] == 0)
- {
- continue;
- }
-
- for (uint32_t colorIdx = 0; colorIdx < 4; colorIdx++)
- {
-
- ColorVsLifeModifierParams* p = (ColorVsLifeModifierParams*)
- traits->createNvParameterized(ColorVsLifeModifierParams::staticClassName());
-
- // save these parameterized classes off for later, we'll need to destroy them
- mCompositeParams.pushBack(p);
-
- ColorVsLifeModifierImpl* cvlMod = PX_NEW(ColorVsLifeModifierImpl)(p);
- PX_ASSERT(cvlMod);
-
- // set the color channel
- cvlMod->setColorChannel((ColorChannel)colorIdx);
-
- // set the curve
- CurveImpl curve;
- for (int32_t cpIdx = 0; cpIdx < cParams->controlPoints.arraySizes[0]; cpIdx++)
- {
-
- curve.addControlPoint(Vec2R(cParams->controlPoints.buf[cpIdx].lifeRemaining,
- cParams->controlPoints.buf[cpIdx].color[colorIdx]));
- }
- cvlMod->setFunction(&curve);
-
- // save which sprite render semantics this modifier will update
- setSpriteSemanticsUsed(cvlMod->getModifierSpriteSemantics());
- setMeshSemanticsUsed(cvlMod->getModifierMeshSemantics());
- ModifierStack& activeStack = getModifierStack(i);
- activeStack.pushBack(cvlMod);
- }
- }
-
- else if (!nvidia::strcmp(param->className(), "ColorVsDensityCompositeModifierParams"))
- {
- ColorVsDensityCompositeModifierParams* cParams = (ColorVsDensityCompositeModifierParams*)param;
-
- if (cParams->controlPoints.arraySizes[0] == 0)
- {
- continue;
- }
-
- for (uint32_t colorIdx = 0; colorIdx < 4; colorIdx++)
- {
-
- ColorVsDensityModifierParams* p = (ColorVsDensityModifierParams*)
- traits->createNvParameterized(ColorVsDensityModifierParams::staticClassName());
-
- // save these parameterized classes off for later, we'll need to destroy them
- mCompositeParams.pushBack(p);
-
- ColorVsDensityModifierImpl* cvlMod = PX_NEW(ColorVsDensityModifierImpl)(p);
- PX_ASSERT(cvlMod);
-
- // set the color channel
- cvlMod->setColorChannel((ColorChannel)colorIdx);
-
- // set the curve
- CurveImpl curve;
- for (int32_t cpIdx = 0; cpIdx < cParams->controlPoints.arraySizes[0]; cpIdx++)
- {
- curve.addControlPoint(Vec2R(cParams->controlPoints.buf[cpIdx].density,
- cParams->controlPoints.buf[cpIdx].color[colorIdx]));
- }
- cvlMod->setFunction(&curve);
-
- // save which sprite render semantics this modifier will update
- setSpriteSemanticsUsed(cvlMod->getModifierSpriteSemantics());
- setMeshSemanticsUsed(cvlMod->getModifierMeshSemantics());
- ModifierStack& activeStack = getModifierStack(i);
- activeStack.pushBack(cvlMod);
- }
- }
-
- else if (!nvidia::strcmp(param->className(), "ColorVsVelocityCompositeModifierParams"))
- {
- // setup an array so we can get the control points easily
- ColorVsVelocityCompositeModifierParams* cParams = (ColorVsVelocityCompositeModifierParams*)param;
-
- if (cParams->controlPoints.arraySizes[0] == 0)
- {
- continue;
- }
-
- for (uint32_t colorIdx = 0; colorIdx < 4; colorIdx++)
- {
-
- ColorVsVelocityModifierParams* p = (ColorVsVelocityModifierParams*)
- traits->createNvParameterized(ColorVsVelocityModifierParams::staticClassName());
-
- // save these parameterized classes off for later, we'll need to destroy them
- mCompositeParams.pushBack(p);
-
- ColorVsVelocityModifierImpl* cvlMod = PX_NEW(ColorVsVelocityModifierImpl)(p);
- PX_ASSERT(cvlMod);
-
- cvlMod->setVelocity0(cParams->velocity0);
- cvlMod->setVelocity1(cParams->velocity1);
-
- // set the color channel
- cvlMod->setColorChannel((ColorChannel)colorIdx);
-
- // set the curve
- CurveImpl curve;
- for (int32_t cpIdx = 0; cpIdx < cParams->controlPoints.arraySizes[0]; cpIdx++)
- {
-
- curve.addControlPoint(Vec2R(cParams->controlPoints.buf[cpIdx].velocity,
- cParams->controlPoints.buf[cpIdx].color[colorIdx]));
- }
- cvlMod->setFunction(&curve);
-
- // save which sprite render semantics this modifier will update
- setSpriteSemanticsUsed(cvlMod->getModifierSpriteSemantics());
- setMeshSemanticsUsed(cvlMod->getModifierMeshSemantics());
- ModifierStack& activeStack = getModifierStack(i);
- activeStack.pushBack(cvlMod);
- }
- }
-
- else if (!nvidia::strcmp(param->className(), "ScaleVsLife2DModifierParams"))
- {
- // setup an array so we can get the control points easily
- ScaleVsLife2DModifierParams* cParams = (ScaleVsLife2DModifierParams*)param;
-
- if (cParams->controlPoints.arraySizes[0] == 0)
- {
- continue;
- }
-
- for (int32_t axisIdx = 0; axisIdx < 2; axisIdx++)
- {
- ScaleVsLifeModifierParams* p = (ScaleVsLifeModifierParams*)
- traits->createNvParameterized(ScaleVsLifeModifierParams::staticClassName());
-
- // save these parameterized classes off for later, we'll need to destroy them
- mCompositeParams.pushBack(p);
-
- ScaleVsLifeModifierImpl* cvlMod = PX_NEW(ScaleVsLifeModifierImpl)(p);
- PX_ASSERT(cvlMod);
-
- // set the scale axis
- cvlMod->setScaleAxis((ScaleAxis)axisIdx);
-
- // set the curve
- CurveImpl curve;
- for (int32_t cpIdx = 0; cpIdx < cParams->controlPoints.arraySizes[0]; cpIdx++)
- {
- curve.addControlPoint(Vec2R(cParams->controlPoints.buf[cpIdx].lifeRemaining,
- cParams->controlPoints.buf[cpIdx].scale[axisIdx]));
- }
- cvlMod->setFunction(&curve);
-
- // save which sprite render semantics this modifier will update
- setSpriteSemanticsUsed(cvlMod->getModifierSpriteSemantics());
- setMeshSemanticsUsed(cvlMod->getModifierMeshSemantics());
- ModifierStack& activeStack = getModifierStack(i);
- activeStack.pushBack(cvlMod);
- }
- }
-
- else if (!nvidia::strcmp(param->className(), "ScaleVsLife3DModifierParams"))
- {
- // setup an array so we can get the control points easily
- ScaleVsLife3DModifierParams* cParams = (ScaleVsLife3DModifierParams*)param;
-
- if (cParams->controlPoints.arraySizes[0] == 0)
- {
- continue;
- }
-
- for (uint32_t axisIdx = 0; axisIdx < 3; axisIdx++)
- {
- ScaleVsLifeModifierParams* p = (ScaleVsLifeModifierParams*)
- traits->createNvParameterized(ScaleVsLifeModifierParams::staticClassName());
-
- // save these parameterized classes off for later, we'll need to destroy them
- mCompositeParams.pushBack(p);
-
- ScaleVsLifeModifierImpl* cvlMod = PX_NEW(ScaleVsLifeModifierImpl)(p);
- PX_ASSERT(cvlMod);
-
- // set the scale axis
- cvlMod->setScaleAxis((ScaleAxis)axisIdx);
-
- // set the curve
- CurveImpl curve;
- for (int32_t cpIdx = 0; cpIdx < cParams->controlPoints.arraySizes[0]; cpIdx++)
- {
- curve.addControlPoint(Vec2R(cParams->controlPoints.buf[cpIdx].lifeRemaining,
- cParams->controlPoints.buf[cpIdx].scale[axisIdx]));
- }
- cvlMod->setFunction(&curve);
-
- // save which sprite render semantics this modifier will update
- setSpriteSemanticsUsed(cvlMod->getModifierSpriteSemantics());
- setMeshSemanticsUsed(cvlMod->getModifierMeshSemantics());
- ModifierStack& activeStack = getModifierStack(i);
- activeStack.pushBack(cvlMod);
- }
- }
-
- else if (!nvidia::strcmp(param->className(), "ScaleVsDensity2DModifierParams"))
- {
- // setup an array so we can get the control points easily
- ScaleVsDensity2DModifierParams* cParams = (ScaleVsDensity2DModifierParams*)param;
-
- if (cParams->controlPoints.arraySizes[0] == 0)
- {
- continue;
- }
-
- for (int32_t axisIdx = 0; axisIdx < 2; axisIdx++)
- {
- ScaleVsDensityModifierParams* p = (ScaleVsDensityModifierParams*)
- traits->createNvParameterized(ScaleVsDensityModifierParams::staticClassName());
-
- // save these parameterized classes off for later, we'll need to destroy them
- mCompositeParams.pushBack(p);
-
- ScaleVsDensityModifierImpl* cvlMod = PX_NEW(ScaleVsDensityModifierImpl)(p);
- PX_ASSERT(cvlMod);
-
- // set the scale axis
- cvlMod->setScaleAxis((ScaleAxis)axisIdx);
-
- // set the curve
- CurveImpl curve;
- for (int32_t cpIdx = 0; cpIdx < cParams->controlPoints.arraySizes[0]; cpIdx++)
- {
- curve.addControlPoint(Vec2R(cParams->controlPoints.buf[cpIdx].density,
- cParams->controlPoints.buf[cpIdx].scale[axisIdx]));
- }
- cvlMod->setFunction(&curve);
-
- // save which sprite render semantics this modifier will update
- setSpriteSemanticsUsed(cvlMod->getModifierSpriteSemantics());
- setMeshSemanticsUsed(cvlMod->getModifierMeshSemantics());
- ModifierStack& activeStack = getModifierStack(i);
- activeStack.pushBack(cvlMod);
- }
- }
-
- else if (!nvidia::strcmp(param->className(), "ScaleVsDensity3DModifierParams"))
- {
- // setup an array so we can get the control points easily
- ScaleVsDensity3DModifierParams* cParams = (ScaleVsDensity3DModifierParams*)param;
-
- if (cParams->controlPoints.arraySizes[0] == 0)
- {
- continue;
- }
-
- for (uint32_t axisIdx = 0; axisIdx < 3; axisIdx++)
- {
- ScaleVsDensityModifierParams* p = (ScaleVsDensityModifierParams*)
- traits->createNvParameterized(ScaleVsDensityModifierParams::staticClassName());
-
- // save these parameterized classes off for later, we'll need to destroy them
- mCompositeParams.pushBack(p);
-
- ScaleVsDensityModifierImpl* cvlMod = PX_NEW(ScaleVsDensityModifierImpl)(p);
- PX_ASSERT(cvlMod);
-
- // set the scale axis
- cvlMod->setScaleAxis((ScaleAxis)axisIdx);
-
- // set the curve
- CurveImpl curve;
- for (int32_t cpIdx = 0; cpIdx < cParams->controlPoints.arraySizes[0]; cpIdx++)
- {
- curve.addControlPoint(Vec2R(cParams->controlPoints.buf[cpIdx].density,
- cParams->controlPoints.buf[cpIdx].scale[axisIdx]));
- }
- cvlMod->setFunction(&curve);
-
- // save which sprite render semantics this modifier will update
- setSpriteSemanticsUsed(cvlMod->getModifierSpriteSemantics());
- setMeshSemanticsUsed(cvlMod->getModifierMeshSemantics());
- ModifierStack& activeStack = getModifierStack(i);
- activeStack.pushBack(cvlMod);
- }
- }
-
- else if (!nvidia::strcmp(param->className(), "ScaleVsCameraDistance2DModifierParams"))
- {
- // setup an array so we can get the control points easily
- ScaleVsCameraDistance2DModifierParams* cParams = (ScaleVsCameraDistance2DModifierParams*)param;
-
- if (cParams->controlPoints.arraySizes[0] == 0)
- {
- continue;
- }
-
- for (int32_t axisIdx = 0; axisIdx < 2; axisIdx++)
- {
- ScaleVsCameraDistanceModifierParams* p = (ScaleVsCameraDistanceModifierParams*)
- traits->createNvParameterized(ScaleVsCameraDistanceModifierParams::staticClassName());
-
- // save these parameterized classes off for later, we'll need to destroy them
- mCompositeParams.pushBack(p);
-
- ScaleVsCameraDistanceModifierImpl* cvlMod = PX_NEW(ScaleVsCameraDistanceModifierImpl)(p);
- PX_ASSERT(cvlMod);
-
- // set the scale axis
- cvlMod->setScaleAxis((ScaleAxis)axisIdx);
-
- // set the curve
- CurveImpl curve;
- for (int32_t cpIdx = 0; cpIdx < cParams->controlPoints.arraySizes[0]; cpIdx++)
- {
- curve.addControlPoint(Vec2R(cParams->controlPoints.buf[cpIdx].cameraDistance,
- cParams->controlPoints.buf[cpIdx].scale[axisIdx]));
- }
- cvlMod->setFunction(&curve);
-
- // save which sprite render semantics this modifier will update
- setSpriteSemanticsUsed(cvlMod->getModifierSpriteSemantics());
- setMeshSemanticsUsed(cvlMod->getModifierMeshSemantics());
- ModifierStack& activeStack = getModifierStack(i);
- activeStack.pushBack(cvlMod);
- }
- }
-
- else if (!nvidia::strcmp(param->className(), "ScaleVsCameraDistance3DModifierParams"))
- {
- // setup an array so we can get the control points easily
- ScaleVsCameraDistance3DModifierParams* cParams = (ScaleVsCameraDistance3DModifierParams*)param;
-
- if (cParams->controlPoints.arraySizes[0] == 0)
- {
- continue;
- }
-
- for (uint32_t axisIdx = 0; axisIdx < 3; axisIdx++)
- {
- ScaleVsCameraDistanceModifierParams* p = (ScaleVsCameraDistanceModifierParams*)
- traits->createNvParameterized(ScaleVsCameraDistanceModifierParams::staticClassName());
-
- // save these parameterized classes off for later, we'll need to destroy them
- mCompositeParams.pushBack(p);
-
- ScaleVsCameraDistanceModifierImpl* cvlMod = PX_NEW(ScaleVsCameraDistanceModifierImpl)(p);
- PX_ASSERT(cvlMod);
-
- // set the scale axis
- cvlMod->setScaleAxis((ScaleAxis)axisIdx);
-
- // set the curve
- CurveImpl curve;
- for (int32_t cpIdx = 0; cpIdx < cParams->controlPoints.arraySizes[0]; cpIdx++)
- {
- curve.addControlPoint(Vec2R(cParams->controlPoints.buf[cpIdx].cameraDistance,
- cParams->controlPoints.buf[cpIdx].scale[axisIdx]));
- }
- cvlMod->setFunction(&curve);
-
- // save which sprite render semantics this modifier will update
- setSpriteSemanticsUsed(cvlMod->getModifierSpriteSemantics());
- setMeshSemanticsUsed(cvlMod->getModifierMeshSemantics());
- ModifierStack& activeStack = getModifierStack(i);
- activeStack.pushBack(cvlMod);
- }
- }
-#endif /* IOFX_SLOW_COMPOSITE_MODIFIERS */
-
- if (newMod)
- {
- // save which sprite render semantics this modifier will update
- setSpriteSemanticsUsed(newMod->getModifierSpriteSemantics());
- setMeshSemanticsUsed(newMod->getModifierMeshSemantics());
-
- ModifierStack& activeStack = getModifierStack(i);
- activeStack.pushBack(newMod);
- }
-
- }
- }
-
- bool useFloat4Color = mParams->renderOutput.useFloat4Color;
- if (!useFloat4Color)
- {
- //detect if some Color modifier has a color component value greater than 1
- for (uint32_t modStage = 0; modStage < 2; modStage++)
- {
- const ModifierStack& activeStack = getModifierStack(modStage);
-
- uint32_t modCount = activeStack.size();
- for (uint32_t modIndex = 0; modIndex < modCount; modIndex++)
- {
- const nvidia::apex::Curve* pColorCurve = 0;
-
- const Modifier* pModifier = activeStack[modIndex];
- switch (pModifier->getModifierType())
- {
- case ModifierType_ColorVsLife:
- pColorCurve = static_cast<const ColorVsLifeModifier*>(pModifier)->getFunction();
- break;
- case ModifierType_ColorVsDensity:
- pColorCurve = static_cast<const ColorVsDensityModifier*>(pModifier)->getFunction();
- break;
- default:
- break;
- }
-
- if (pColorCurve)
- {
- uint32_t pointsCount;
- const Vec2R* pPoints = pColorCurve->getControlPoints(pointsCount);
-
- for (uint32_t i = 0; i < pointsCount; i++)
- {
- if (pPoints[i].y > 1)
- {
- useFloat4Color = true;
- break;
- }
- }
- }
- if (useFloat4Color)
- {
- break;
- }
- }
- if (useFloat4Color)
- {
- break;
- }
- }
- }
-
- if (mParams->renderOutput.useUserSemantic)
- {
- mMeshSemanticBitmap |= (1 << IofxRenderSemantic::USER_DATA);
- mSpriteSemanticBitmap |= (1 << IofxRenderSemantic::USER_DATA);
- }
-}
-
-const char* IofxAssetImpl::getSpriteMaterialName() const
-{
- READ_ZONE();
- if (mSpriteParams &&
- mSpriteParams->spriteMaterialName &&
- mSpriteParams->spriteMaterialName->name() &&
- mSpriteParams->spriteMaterialName->name()[0])
- {
- return mSpriteParams->spriteMaterialName->name();
- }
- else
- {
- return NULL;
- }
-}
-
-const char* IofxAssetImpl::getMeshAssetName(uint32_t index) const
-{
- READ_ZONE();
- if (mRenderMeshList && index < (*mRenderMeshList).size() && (*mRenderMeshList)[index].meshAssetName)
- {
- return (*mRenderMeshList)[index].meshAssetName->name();
- }
- else
- {
- return NULL;
- }
-}
-
-uint32_t IofxAssetImpl::getMeshAssetWeight(uint32_t index) const
-{
- READ_ZONE();
- if (mRenderMeshList && index < (*mRenderMeshList).size())
- {
- return (*mRenderMeshList)[index].weight;
- }
- else
- {
- return 0;
- }
-}
-
-bool IofxAssetImpl::isOpaqueMesh(uint32_t index) const
-{
- if (mRenderMeshList && index < (*mRenderMeshList).size() && (*mRenderMeshList)[index].meshAssetName)
- {
- return nvidia::strcmp((*mRenderMeshList)[index].meshAssetName->className(), "ApexOpaqueMesh") == 0;
- }
- else
- {
- return false;
- }
-}
-
-uint32_t IofxAssetImpl::forceLoadAssets()
-{
- WRITE_ZONE();
- uint32_t assetLoadedCount = 0;
-
- assetLoadedCount += mRenderMeshAssetTracker.forceLoadAssets();
- assetLoadedCount += mSpriteMaterialAssetTracker.forceLoadAssets();
-
- return assetLoadedCount;
-}
-
-void IofxAssetImpl::initializeAssetNameTable()
-{
- // clean up asset tracker list
- mRenderMeshAssetTracker.removeAllAssetNames();
- mSpriteMaterialAssetTracker.removeAllAssetNames();
-
- if (mRenderMeshList)
- {
- /* initialize the rendermesh asset name to resID tables */
- for (uint32_t i = 0; i < (*mRenderMeshList).size(); i++)
- {
- const char* name = "";
- if ((*mRenderMeshList)[i].meshAssetName)
- {
- name = (*mRenderMeshList)[i].meshAssetName->name();
- }
- mRenderMeshAssetTracker.addAssetName(name, isOpaqueMesh(i));
- }
- }
- else
- {
- /* initialize the sprite material name to resID tables */
- if (getSpriteMaterialName())
- {
- mSpriteMaterialAssetTracker.addAssetName(getSpriteMaterialName(), false);
- }
- }
-}
-
-void IofxAssetImpl::setSpriteSemanticsUsed(uint32_t spriteSemanticsBitmap)
-{
- mSpriteSemanticBitmap |= spriteSemanticsBitmap;
-}
-void IofxAssetImpl::setMeshSemanticsUsed(uint32_t meshSemanticsBitmap)
-{
- mMeshSemanticBitmap |= meshSemanticsBitmap;
-}
-
-uint32_t IofxAssetImpl::getPubStateSize() const
-{
- return mSpriteParams ? sizeof(SpritePublicState) : sizeof(MeshPublicState);
-}
-
-uint32_t IofxAssetImpl::getPrivStateSize() const
-{
- return mSpriteParams ? sizeof(SpritePrivateState) : sizeof(MeshPrivateState);
-}
-
-bool IofxAssetImpl::isSortingEnabled() const
-{
- const ModifierStack& stack = getModifierStack(ModifierStage_Continuous);
- for (ModifierStack::ConstIterator it = stack.begin(); it != stack.end(); ++it)
- {
- if ((*it)->getModifierType() == ModifierType_ViewDirectionSorting)
- {
- return true;
- }
- }
-
- return false;
-}
-
-#ifndef WITHOUT_APEX_AUTHORING
-
-void IofxAssetAuthoringImpl::release()
-{
- delete this;
-}
-
-const char* IofxAssetAuthoringImpl::getObjTypeName() const
-{
- return IofxAssetImpl::getObjTypeName();
-}
-
-#if IOFX_AUTHORING_API_ENABLED
-
-void IofxAssetAuthoringImpl::setMeshAssetCount(const uint32_t meshCount)
-{
- (*mRenderMeshList).resize(meshCount);
-}
-
-void IofxAssetAuthoringImpl::setSpriteMaterialName(const char* inSpriteMaterialName)
-{
- if ((*mRenderMeshList).size())
- {
- APEX_INVALID_OPERATION("Unable to set Sprite Material Name (%s). Systems can be either Mesh or Sprite, but not both. This system is already a Mesh.", getSpriteMaterialName());
- return;
- }
-
- NvParameterized::Handle h(*mParams);
- NvParameterized::Interface* refParam;
-
- mParams->getParameterHandle("spriteMaterialName", h);
- mParams->initParamRef(h, NULL, true);
- mParams->getParamRef(h, refParam);
-
- PX_ASSERT(refParam);
- if (refParam)
- {
- refParam->setName(inSpriteMaterialName);
- }
-}
-
-void IofxAssetAuthoringImpl::setMeshAssetName(const char* meshAssetName, uint32_t meshIndex)
-{
- if (getSpriteMaterialName())
- {
- APEX_INVALID_OPERATION("Unable to set Mesh Material Name (%s). Systems can be either Mesh or Sprite, but not both. This system is already a Sprite.", meshAssetName);
- return;
- }
-
- PX_ASSERT(meshIndex < (*mRenderMeshList).size());
-
- NvParameterized::Handle arrayHandle(*mParams), indexHandle(*mParams), childHandle(*mParams);
- NvParameterized::Interface* refPtr;
-
- mParams->getParameterHandle("renderMeshList", arrayHandle);
- arrayHandle.getChildHandle(meshIndex, indexHandle);
-
- indexHandle.getChildHandle(mParams, "meshAssetName", childHandle);
- mParams->initParamRef(childHandle, NULL, true);
- mParams->getParamRef(childHandle, refPtr);
- PX_ASSERT(refPtr);
- if (refPtr)
- {
- refPtr->setName(meshAssetName);
- }
-}
-
-void IofxAssetAuthoringImpl::setMeshAssetWeight(const uint32_t weight, uint32_t meshIndex)
-{
- if (getSpriteMaterialName())
- {
- APEX_INVALID_OPERATION("Unable to set Mesh Material Weight (%d). Systems can be either Mesh or Sprite, but not both. This system is already a Sprite.", weight);
- return;
- }
-
- PX_ASSERT(meshIndex < (*mRenderMeshList).size());
- (*mRenderMeshList)[meshIndex].weight = weight;
-}
-
-
-Modifier* IofxAssetAuthoringImpl::createModifier(uint32_t modStage, uint32_t modType)
-{
- // create a modifier to go in this particular modifier stage
- // we'll need a handle to the correct mod stage list, pass that and the Param Obj to CreateModifier,
- // it will resize the array (+1), then pass the correct string to initParamRef()
- // Then it can pass the new ref param to the mod constructor
- NvParameterized::Handle h(*mParams), ih(*mParams);
- int modStackSize = 0;
-
- getModifierStack(modStage, h);
-
- // resize the array
- mParams->getArraySize(h, modStackSize);
- mParams->resizeArray(h, ++modStackSize);
-
- h.getChildHandle(modStackSize - 1, ih);
-
- Modifier* retVal = CreateModifier((ModifierTypeEnum)modType, mParams, ih);
-
- uint32_t assetTarget = getAssetTarget();
- // We don't yet know what type this is, which is invalid.
- if (assetTarget == 0)
- {
- // delete the new param ref and re-resize array
- NvParameterized::Interface* refParam = 0;
- mParams->getParamRef(ih, refParam);
- PX_ASSERT(refParam);
- if (refParam)
- {
- refParam->destroy();
- }
- mParams->resizeArray(h, modStackSize - 1);
-
- delete retVal;
- retVal = 0;
- APEX_INVALID_OPERATION("Specifying modifiers before specifying the mesh or sprite asset is invalid");
- return retVal;
- }
-
- // The modifier only supports certain semantics, so let's test those now.
- const uint32_t supportedUsage = retVal->getModifierUsage();
-
- if ((supportedUsage & assetTarget) != assetTarget)
- {
- // delete the new param ref and re-resize array
- NvParameterized::Interface* refParam = 0;
- mParams->getParamRef(ih, refParam);
- PX_ASSERT(refParam);
- if (refParam)
- {
- refParam->destroy();
- }
- mParams->resizeArray(h, modStackSize - 1);
-
- delete retVal;
- retVal = 0;
- APEX_INVALID_OPERATION("The specified modifier doesn't work on that system type (e.g. Sprite ModifierImpl on a Mesh System or vice-versa).");
- return retVal;
- }
-
- uint32_t stageBits = ModifierUsageFromStage(ModifierStage(modStage));
- if ((supportedUsage & stageBits) != stageBits)
- {
- // delete the new param ref and re-resize array
- NvParameterized::Interface* refParam = 0;
- mParams->getParamRef(ih, refParam);
- PX_ASSERT(refParam);
- if (refParam)
- {
- refParam->destroy();
- }
- mParams->resizeArray(h, modStackSize - 1);
-
- delete retVal;
- retVal = 0;
- APEX_INVALID_OPERATION("The specified modifier doesn't work in that stage.");
- return retVal;
- }
-
- ModifierStack& activeStack = getModifierStack(modStage);
-
- activeStack.pushBack(retVal);
- return retVal;
-}
-
-void IofxAssetAuthoringImpl::removeModifier(uint32_t modStage, uint32_t position)
-{
- if (modStage >= ModifierStage_Count)
- {
- APEX_INVALID_OPERATION("Invalid modifier stage");
- return;
- }
-
- ModifierStack& activeStack = getModifierStack(modStage);
-
- if (position >= activeStack.size())
- {
- APEX_INVALID_OPERATION("position %d is greater than modifier stack size: %d", position, activeStack.size());
- return;
- }
-
- // remove from ModifierStack (runtime)
- activeStack.replaceWithLast(position);
-
- // remove from NvParameterized data
- NvParameterized::Handle h(*mParams), ih(*mParams);
- NvParameterized::Interface* modParams = 0;
- int modStackSize = 0;
-
- // 1. get the correct stack
- getModifierStack(modStage, h);
-
- // 2. get the NvParameterized::Interface* for the position
- mParams->getArraySize(h, modStackSize);
- h.getChildHandle(position, ih);
- mParams->getParamRef(ih, modParams);
- PX_ASSERT(modParams);
-
- // 3. destroy it
- modParams->destroy();
-
- // 4. copy the last member of the stack to position
- if (position != (uint32_t)modStackSize - 1)
- {
- NvParameterized::Handle lastH(*mParams);
- h.getChildHandle(modStackSize - 1, lastH);
- mParams->getParamRef(lastH, modParams);
- mParams->setParamRef(ih, modParams);
- }
-
- // 5. resize the stack
- mParams->resizeArray(h, modStackSize - 1);
-}
-
-uint32_t IofxAssetAuthoringImpl::getModifierCount(uint32_t modStage) const
-{
- if (modStage >= ModifierStage_Count)
- {
- APEX_INVALID_OPERATION("Invalid modifier stage");
- return 0;
- }
-
- const ModifierStack& activeStack = getModifierStack(modStage);
- return activeStack.size();
-}
-
-uint32_t IofxAssetAuthoringImpl::findModifier(uint32_t modStage, Modifier* modifier)
-{
- if (modStage >= ModifierStage_Count)
- {
- APEX_INVALID_OPERATION("Invalid modifier stage");
- return 0;
- }
-
- const ModifierStack& activeStack = getModifierStack(modStage);
-
- for (uint32_t i = 0; i < activeStack.size(); i++)
- {
- if (activeStack[i] == modifier)
- {
- return i;
- }
- }
-
- return 0xffffffff;
-}
-
-Modifier* IofxAssetAuthoringImpl::getModifier(uint32_t modStage, uint32_t position) const
-{
- if (modStage >= ModifierStage_Count)
- {
- APEX_INVALID_OPERATION("Invalid modifier stage");
- return 0;
- }
-
- const ModifierStack& activeStack = getModifierStack(modStage);
-
- if (position >= activeStack.size())
- {
- APEX_INVALID_OPERATION("position %d is greater than modifier stack size: %d", position, activeStack.size());
- return 0;
- }
-
- // remove from ModifierStack (runtime)
- return activeStack[ position ];
-}
-
-uint32_t IofxAssetAuthoringImpl::getAssetTarget() const
-{
- uint32_t retVal = 0;
- if (getSpriteMaterialName())
- {
- retVal |= ModifierUsage_Sprite;
- }
- else if ((*mRenderMeshList).size())
- {
- retVal |= ModifierUsage_Mesh;
- }
-
- return retVal;
-}
-
-#endif /* IOFX_AUTHORING_API_ENABLED */
-
-#endif
-
-}
-} // namespace nvidia