00001 // 00002 // Redistribution and use in source and binary forms, with or without 00003 // modification, are permitted provided that the following conditions 00004 // are met: 00005 // * Redistributions of source code must retain the above copyright 00006 // notice, this list of conditions and the following disclaimer. 00007 // * Redistributions in binary form must reproduce the above copyright 00008 // notice, this list of conditions and the following disclaimer in the 00009 // documentation and/or other materials provided with the distribution. 00010 // * Neither the name of NVIDIA CORPORATION nor the names of its 00011 // contributors may be used to endorse or promote products derived 00012 // from this software without specific prior written permission. 00013 // 00014 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 00015 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00016 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00017 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 00018 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00019 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00020 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00021 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 00022 // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00023 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00024 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00025 // 00026 // Copyright (c) 2018 NVIDIA Corporation. All rights reserved. 00027 00028 00029 00030 #ifndef EMITTER_LOD_PARAM_DESC_H 00031 #define EMITTER_LOD_PARAM_DESC_H 00032 00033 #include "Apex.h" 00034 00035 namespace nvidia 00036 { 00037 namespace apex 00038 { 00039 00040 00041 PX_PUSH_PACK_DEFAULT 00042 00044 class EmitterLodParamDesc : public ApexDesc 00045 { 00046 public: 00047 float maxDistance; 00048 float distanceWeight; 00049 float speedWeight; 00050 float lifeWeight; 00051 float separationWeight; 00052 float bias; 00053 00057 PX_INLINE EmitterLodParamDesc() : ApexDesc() 00058 { 00059 init(); 00060 } 00061 00065 PX_INLINE void setToDefault() 00066 { 00067 ApexDesc::setToDefault(); 00068 init(); 00069 } 00070 00074 PX_INLINE bool isValid() const 00075 { 00076 if (distanceWeight < 0.0f || speedWeight < 0.0f || lifeWeight < 0.0f) 00077 { 00078 return false; 00079 } 00080 if (separationWeight < 0.0f || maxDistance < 0.0f || bias < 0.0f) 00081 { 00082 return false; 00083 } 00084 return ApexDesc::isValid(); 00085 } 00086 00090 enum ManifestVersions 00091 { 00092 initial, 00093 00094 count, 00095 current = count - 1 00096 }; 00097 00098 private: 00099 00100 PX_INLINE void init() 00101 { 00102 // These defaults give you pure distance based LOD weighting 00103 maxDistance = 0.0f; 00104 distanceWeight = 1.0f; 00105 speedWeight = 0.0f; 00106 lifeWeight = 0.0f; 00107 separationWeight = 0.0f; 00108 bias = 1.0f; 00109 } 00110 }; 00111 00112 00113 PX_POP_PACK 00114 00115 } 00116 } // end namespace nvidia 00117 00118 #endif // EMITTER_LOD_PARAM_DESC_H