diff options
Diffstat (limited to 'APEX_1.4/module/particles/include/ModuleParticlesImpl.h')
| -rw-r--r-- | APEX_1.4/module/particles/include/ModuleParticlesImpl.h | 308 |
1 files changed, 308 insertions, 0 deletions
diff --git a/APEX_1.4/module/particles/include/ModuleParticlesImpl.h b/APEX_1.4/module/particles/include/ModuleParticlesImpl.h new file mode 100644 index 00000000..5375a340 --- /dev/null +++ b/APEX_1.4/module/particles/include/ModuleParticlesImpl.h @@ -0,0 +1,308 @@ +/* + * 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. + */ + + +#ifndef __MODULE_PARTICLES_IMPL_H__ +#define __MODULE_PARTICLES_IMPL_H__ + +#include "Apex.h" +#include "ModuleParticles.h" +#include "ApexSDKIntl.h" +#include "ModuleIntl.h" +#include "ModuleBase.h" + +#include "ApexRWLockable.h" +#include "ApexSDKHelpers.h" +#include "ParticlesDebugRenderParams.h" +#include "ParticlesModuleParameters.h" +#include "EffectPackageGraphicsMaterialsParams.h" + +#include "EffectPackageAssetParams.h" +#include "EffectPackageActorParams.h" + +#include "GraphicsMaterialData.h" +#include "VolumeRenderMaterialData.h" +#include "EmitterEffect.h" +#include "RigidBodyEffect.h" + +#include "HeatSourceEffect.h" +#include "SubstanceSourceEffect.h" +#include "VelocitySourceEffect.h" +#include "ForceFieldEffect.h" +#include "JetFieldSamplerEffect.h" +#include "WindFieldSamplerEffect.h" +#include "NoiseFieldSamplerEffect.h" +#include "VortexFieldSamplerEffect.h" +#include "AttractorFieldSamplerEffect.h" +#include "TurbulenceFieldSamplerEffect.h" +#include "FlameEmitterEffect.h" + +#include "EffectPackageData.h" +#include "AttractorFieldSamplerData.h" +#include "JetFieldSamplerData.h" +#include "WindFieldSamplerData.h" +#include "NoiseFieldSamplerData.h" +#include "VortexFieldSamplerData.h" +#include "TurbulenceFieldSamplerData.h" +#include "HeatSourceData.h" +#include "SubstanceSourceData.h" +#include "VelocitySourceData.h" +#include "ForceFieldData.h" +#include "EmitterData.h" +#include "GraphicsEffectData.h" +#include "ParticleSimulationData.h" +#include "FlameEmitterData.h" + +#include "EffectPackageIOSDatabaseParams.h" +#include "EffectPackageIOFXDatabaseParams.h" +#include "EffectPackageEmitterDatabaseParams.h" +#include "EffectPackageDatabaseParams.h" +#include "EffectPackageFieldSamplerDatabaseParams.h" + +#include "ReadCheck.h" +#include "WriteCheck.h" + +namespace nvidia +{ +namespace apex +{ +class SceneIntl; +class ModuleTurbulenceFS; +class EmitterActor; +class EmitterAsset; +} +namespace particles +{ +class ParticlesAsset; +class ParticlesAssetAuthoring; +class ParticlesScene; + +typedef Array< ModuleSceneIntl* > ModuleSceneVector; + +class ModuleParticlesDesc : public ApexDesc +{ +public: + + /** + \brief Constructor sets to default. + */ + PX_INLINE ModuleParticlesDesc() + { + setToDefault(); + } + /** + \brief (re)sets the structure to the default. + */ + PX_INLINE void setToDefault() + { + ApexDesc::setToDefault(); + moduleValue = 0; + } + + /** + Returns true if an object can be created using this descriptor. + */ + PX_INLINE bool isValid() const + { + return ApexDesc::isValid(); + } + + /** + ModuleBase configurable parameter. + */ + uint32_t moduleValue; +}; + + +class ModuleParticlesImpl : public ModuleParticles, public ModuleIntl, public ModuleBase, public ApexRWLockable +{ +public: + APEX_RW_LOCKABLE_BOILERPLATE + + ModuleParticlesImpl(ApexSDKIntl* sdk); + ~ModuleParticlesImpl(); + + void init(const ModuleParticlesDesc& desc); + + // base class methods + void init(NvParameterized::Interface&) {} + NvParameterized::Interface* getDefaultModuleDesc(); + void release() + { + ModuleBase::release(); + } + void destroy(); + const char* getName() const + { + READ_ZONE(); + return ModuleBase::getName(); + } + + virtual bool setEffectPackageGraphicsMaterialsDatabase(const NvParameterized::Interface* dataBase); + + virtual const NvParameterized::Interface* getEffectPackageGraphicsMaterialsDatabase() const; + + virtual bool setEffectPackageIOSDatabase(const NvParameterized::Interface* dataBase); + virtual bool setEffectPackageIOFXDatabase(const NvParameterized::Interface* dataBase); + virtual bool setEffectPackageEmitterDatabase(const NvParameterized::Interface* dataBase); + virtual bool setEffectPackageDatabase(const NvParameterized::Interface* dataBase); + virtual bool setEffectPackageFieldSamplerDatabase(const NvParameterized::Interface* dataBase); + + virtual const NvParameterized::Interface* getEffectPackageIOSDatabase(void) const + { + READ_ZONE(); + return mEffectPackageIOSDatabaseParams; + }; + virtual const NvParameterized::Interface* getEffectPackageIOFXDatabase(void) const + { + READ_ZONE(); + return mEffectPackageIOFXDatabaseParams; + }; + virtual const NvParameterized::Interface* getEffectPackageEmitterDatabase(void) const + { + READ_ZONE(); + return mEffectPackageEmitterDatabaseParams; + }; + virtual const NvParameterized::Interface* getEffectPackageDatabase(void) const + { + READ_ZONE(); + return mEffectPackageDatabaseParams; + }; + virtual const NvParameterized::Interface* getEffectPackageFieldSamplerDatabase(void) const + { + READ_ZONE(); + return mEffectPackageFieldSamplerDatabaseParams; + }; + + bool initParticleSimulationData(ParticleSimulationData* ed); + + virtual NvParameterized::Interface* locateResource(const char* resourceName, // the name of the resource + const char* nameSpace); + + virtual const char** getResourceNames(const char* nameSpace, uint32_t& nameCount, const char** &variants); + + virtual const NvParameterized::Interface* locateGraphicsMaterialData(const char* name) const; + virtual const NvParameterized::Interface* locateVolumeRenderMaterialData(const char* name) const; + + + ModuleSceneIntl* createInternalModuleScene(SceneIntl&, RenderDebugInterface*); + void releaseModuleSceneIntl(ModuleSceneIntl&); + uint32_t forceLoadAssets(); + AuthObjTypeID getModuleID() const; + RenderableIterator* createRenderableIterator(const Scene&); + + AuthObjTypeID getParticlesAssetTypeID() const; + + uint32_t getModuleValue() const + { + return mModuleValue; + } + + ModuleTurbulenceFS* getModuleTurbulenceFS(void) + { + return mTurbulenceModule; + } + + ParticlesScene* getParticlesScene(const Scene& apexScene); + + virtual void setEnableScreenCulling(bool state, bool znegative) + { + WRITE_ZONE(); + mEnableScreenCulling = state; + mZnegative = znegative; + } + + bool getEnableScreenCulling(void) const + { + return mEnableScreenCulling; + } + + bool getZnegative(void) const + { + return mZnegative; + } + + virtual void resetEmitterPool(void); + + virtual void setUseEmitterPool(bool state) + { + WRITE_ZONE(); + mUseEmitterPool = state; + } + + virtual bool getUseEmitterPool(void) const + { + READ_ZONE(); + return mUseEmitterPool; + } + + PxMaterial *getDefaultMaterial(void) const + { + return mDefaultMaterial; + } + + virtual void notifyReleaseSDK(void); + + virtual void notifyChildGone(ModuleIntl* imodule); + +protected: + bool mUseEmitterPool; + bool mEnableScreenCulling; + bool mZnegative; + + ResourceList mAuthorableObjects; + ResourceList mEffectPackageAuthorableObjects; + + ResourceList mParticlesScenes; + + uint32_t mModuleValue; + + friend class ParticlesAsset; + + /** + \brief Used by the ParticleEffectTool to initialize the default database values for the editor + */ + virtual void initializeDefaultDatabases(void); + + virtual nvidia::apex::Module* getModule(const char* moduleName); + +private: + + bool fixFieldSamplerCollisionFilterNames(NvParameterized::Interface *fs); + + bool fixupNamedReferences(void); + + NvParameterized::Interface* mEffectPackageIOSDatabaseParams; + NvParameterized::Interface* mEffectPackageIOFXDatabaseParams; + NvParameterized::Interface* mEffectPackageEmitterDatabaseParams; + NvParameterized::Interface* mEffectPackageDatabaseParams; + NvParameterized::Interface* mEffectPackageFieldSamplerDatabaseParams; + + ParticlesModuleParameters* mModuleParams; + NvParameterized::Interface* mGraphicsMaterialsDatabase; + ModuleTurbulenceFS* mTurbulenceModule; + ModuleSceneVector mScenes; + Array< const char*> mTempNames; + Array< const char*> mTempVariantNames; + + nvidia::apex::Module* mModuleBasicIos; // Instantiate the BasicIOS module statically + nvidia::apex::Module* mModuleEmitter; // Instantiate the Emitter module statically + nvidia::apex::Module* mModuleIofx; // Instantiate the IOFX module statically + nvidia::apex::Module* mModuleFieldSampler; // Instantiate the field sampler module statically + nvidia::apex::Module* mModuleBasicFS; // Instantiate the BasicFS module statically + nvidia::apex::Module* mModuleParticleIos; // PhysX 3.x only : Instantiate the ParticleIOS module + nvidia::apex::Module* mModuleForceField; // PhysX 3.x only : Instantiate the ForceField module + PxMaterial *mDefaultMaterial; +}; + +} +} // end namespace nvidia + +#endif // __MODULE_PARTICLES_H__ |