[2236] | 1 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 2 | //
|
---|
| 3 | // ## ######
|
---|
| 4 | // ###### ###
|
---|
| 5 | // ## ############### Shark 3D Engine (www.shark3d.com)
|
---|
| 6 | // ########## # # #
|
---|
| 7 | // ######## Copyright (c) 1996-2006 Spinor GmbH.
|
---|
| 8 | // ######### # # # All rights reserved.
|
---|
| 9 | // ## ##########
|
---|
| 10 | // ##
|
---|
| 11 | //
|
---|
| 12 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 13 |
|
---|
| 14 | //@cpp
|
---|
| 15 |
|
---|
| 16 | #ifndef S3D_SHARK_MESH_LOADER_MODEL_H
|
---|
| 17 | #define S3D_SHARK_MESH_LOADER_MODEL_H
|
---|
| 18 |
|
---|
| 19 | #include "../../interf/eng_model.h"
|
---|
| 20 | #include "../../../comp/core/comp_setup.h"
|
---|
| 21 | #include "../../../comp/core/comp_module.h"
|
---|
| 22 | #include "../../../comp/util/comp_util_serutil.h"
|
---|
| 23 | #include "../../../comp/util/comp_util_uniquebase.h"
|
---|
| 24 |
|
---|
| 25 | #include <GeoLodLibraryDLL.h>
|
---|
| 26 |
|
---|
| 27 |
|
---|
| 28 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 29 |
|
---|
| 30 | typedef s3d_CSysInt32u s3d_CSharkMeshLoaderIdx;
|
---|
| 31 |
|
---|
| 32 | typedef s3d_CDrvInt32uX4 s3d_CSharkMeshLoaderSubscr;
|
---|
| 33 |
|
---|
| 34 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 35 |
|
---|
| 36 | class s3d_CSharkMeshLoaderLoader: public virtual s3d_CUtilEyeBase
|
---|
| 37 | {
|
---|
| 38 | public:
|
---|
| 39 | virtual void LoaderPerform() = 0;
|
---|
| 40 | };
|
---|
| 41 |
|
---|
| 42 | typedef s3d_CUtilEye<s3d_CSharkMeshLoaderLoader> s3d_CSharkMeshLoaderLoaderEye;
|
---|
| 43 |
|
---|
| 44 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 45 |
|
---|
| 46 | class s3d_CSharkMeshLoaderChanged: public virtual s3d_CUtilEyeBase
|
---|
| 47 | {
|
---|
| 48 | public:
|
---|
| 49 | virtual void ChangedPerform() = 0;
|
---|
| 50 | };
|
---|
| 51 |
|
---|
| 52 | typedef s3d_CUtilEye<s3d_CSharkMeshLoaderChanged> s3d_CSharkMeshLoaderChangedEye;
|
---|
| 53 |
|
---|
| 54 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 55 |
|
---|
| 56 | template<typename T>
|
---|
| 57 | struct s3d_CSharkMeshLoaderBank
|
---|
| 58 | : public s3d_CUtilPtrBase,
|
---|
| 59 | public s3d_CDrvBank
|
---|
| 60 | {
|
---|
| 61 | s3d_CSysIntps m_Cnt;
|
---|
| 62 | s3d_CUtilOwnArray<T> m_Data;
|
---|
| 63 | s3d_CSharkMeshLoaderLoaderEye m_Loader;
|
---|
| 64 |
|
---|
| 65 | void Fetch(
|
---|
| 66 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
|
---|
| 67 | s3d_CDrvBankContent &BankContent);
|
---|
| 68 | s3d_CUtilPtrBase *GetOwner(
|
---|
| 69 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info);
|
---|
| 70 | };
|
---|
| 71 |
|
---|
| 72 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 73 |
|
---|
| 74 | typedef s3d_CSharkMeshLoaderBank<s3d_CUtilVec2f> s3d_CSharkMeshLoaderBankVec2f;
|
---|
| 75 | typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderBankVec2f> s3d_CSharkMeshLoaderBankVec2fPtr;
|
---|
| 76 |
|
---|
| 77 | typedef s3d_CSharkMeshLoaderBank<s3d_CUtilVec3f> s3d_CSharkMeshLoaderBankVec3f;
|
---|
| 78 | typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderBankVec3f> s3d_CSharkMeshLoaderBankVec3fPtr;
|
---|
| 79 |
|
---|
| 80 | typedef s3d_CSharkMeshLoaderBank<s3d_CUtilVec4f> s3d_CSharkMeshLoaderBankVec4f;
|
---|
| 81 | typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderBankVec4f> s3d_CSharkMeshLoaderBankVec4fPtr;
|
---|
| 82 |
|
---|
| 83 | typedef s3d_CSharkMeshLoaderBank<s3d_CSharkMeshLoaderIdx> s3d_CSharkMeshLoaderBankMeshIdx;
|
---|
| 84 | typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderBankMeshIdx>
|
---|
| 85 | s3d_CSharkMeshLoaderBankMeshIdxPtr;
|
---|
| 86 |
|
---|
| 87 | typedef s3d_CSharkMeshLoaderBank<s3d_CUtilVec4f> s3d_CSharkMeshLoaderBankBoneWgh;
|
---|
| 88 | typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderBankBoneWgh>
|
---|
| 89 | s3d_CSharkMeshLoaderBankBoneWghPtr;
|
---|
| 90 |
|
---|
| 91 | typedef s3d_CSharkMeshLoaderBank<s3d_CSharkMeshLoaderSubscr>
|
---|
| 92 | s3d_CSharkMeshLoaderBankBoneSubscr;
|
---|
| 93 | typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderBankBoneSubscr>
|
---|
| 94 | s3d_CSharkMeshLoaderBankBoneSubscrPtr;
|
---|
| 95 |
|
---|
| 96 | typedef s3d_CSharkMeshLoaderBank<s3d_CDrvMeshPacket> s3d_CSharkMeshLoaderBankPacket;
|
---|
| 97 | typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderBankPacket>
|
---|
| 98 | s3d_CSharkMeshLoaderBankPacketPtr;
|
---|
| 99 |
|
---|
| 100 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 101 |
|
---|
| 102 | struct s3d_CSharkMeshLoaderAttr
|
---|
| 103 | {
|
---|
| 104 | // Cnt = m_FrmCnt * m_VertCnt:
|
---|
| 105 | s3d_CDrvSigPtr m_BankSig;
|
---|
| 106 | s3d_CSharkMeshLoaderBankVec2fPtr m_Bank;
|
---|
| 107 | };
|
---|
| 108 |
|
---|
| 109 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 110 |
|
---|
| 111 | struct s3d_CSharkMeshLoaderTopol
|
---|
| 112 | {
|
---|
| 113 | s3d_CDrvSigPtr m_TopolSig;
|
---|
| 114 |
|
---|
| 115 | s3d_CUtilInitInt m_VertCnt;
|
---|
| 116 | s3d_CUtilInitInt m_VertEssCnt;
|
---|
| 117 |
|
---|
| 118 | s3d_CUtilInitInt m_IdxCnt;
|
---|
| 119 | s3d_CUtilInitInt m_IdxEssCnt;
|
---|
| 120 |
|
---|
| 121 | s3d_CUtilInitInt m_BoneIdxCnt;
|
---|
| 122 | s3d_CUtilInitInt m_BoneIdxEssCnt;
|
---|
| 123 |
|
---|
| 124 | s3d_CUtilInitInt m_PacketCnt;
|
---|
| 125 | s3d_CUtilInitInt m_FamilyCnt;
|
---|
| 126 |
|
---|
| 127 | s3d_CUtilInitBool m_Closed;
|
---|
| 128 | s3d_CUtilInitBool m_Sealed;
|
---|
| 129 |
|
---|
| 130 | // Cnt = m_FamilyCnt
|
---|
| 131 | s3d_CUtilOwnArray<s3d_CEngMeshFamily> m_FamilyArray;
|
---|
| 132 |
|
---|
| 133 | // Cnt = m_PacketCnt
|
---|
| 134 | s3d_CSharkMeshLoaderBankPacketPtr m_PacketBank;
|
---|
| 135 |
|
---|
| 136 | // Cnt = m_BoneIdxCnt
|
---|
| 137 | s3d_CSharkMeshLoaderBankMeshIdxPtr m_BoneIdxBank;
|
---|
| 138 |
|
---|
| 139 | // Cnt = m_IdxCnt
|
---|
| 140 | s3d_CSharkMeshLoaderBankMeshIdxPtr m_IdxBank;
|
---|
| 141 | // Cnt = m_IdxCnt
|
---|
| 142 | s3d_CSharkMeshLoaderBankMeshIdxPtr m_OppBank;
|
---|
| 143 | // Cnt = m_IdxEssCnt
|
---|
| 144 | s3d_CSharkMeshLoaderBankMeshIdxPtr m_NeighBank;
|
---|
| 145 | };
|
---|
| 146 |
|
---|
| 147 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 148 | /*
|
---|
| 149 | class s3d_CSharkMeshLoaderVariant
|
---|
| 150 | : public s3d_CUtilPtrBase,
|
---|
| 151 | public s3d_CSharkMeshLoaderLoader
|
---|
| 152 | {
|
---|
| 153 | public:
|
---|
| 154 | s3d_CSharkMeshLoaderVariant(
|
---|
| 155 | s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info,
|
---|
| 156 | bool Bare,
|
---|
| 157 | s3d_CUtilAtomMgr *AtomMgr, s3d_CCompResMgr *ResMgr,
|
---|
| 158 | s3d_CUtilStr_cr ResName, s3d_CSharkMeshLoaderChanged *Changed);
|
---|
| 159 | ~s3d_CSharkMeshLoaderVariant();
|
---|
| 160 |
|
---|
| 161 | void GetMeshComposBase(
|
---|
| 162 | s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage,
|
---|
| 163 | s3d_CEngMeshCompos &MeshCompos);
|
---|
| 164 | void GetMeshComposFull(
|
---|
| 165 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
|
---|
| 166 | s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage,
|
---|
| 167 | s3d_CEngModelCtx *ModelCtx,
|
---|
| 168 | bool NeedMeshData,
|
---|
| 169 | s3d_CEngMeshCompos &MeshCompos);
|
---|
| 170 | s3d_CEngGeoData *GetGeoData(
|
---|
| 171 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
|
---|
| 172 | s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage);
|
---|
| 173 |
|
---|
| 174 | void Reduce();
|
---|
| 175 |
|
---|
| 176 | private:
|
---|
| 177 | s3d_CUtilMsgHandlerPtr m_MsgHandler;
|
---|
| 178 | s3d_CUtilStr m_Info;
|
---|
| 179 | bool m_Bare;
|
---|
| 180 | s3d_CUtilAtomMgrPtr m_AtomMgr;
|
---|
| 181 | s3d_CCompResMgrPtr m_ResMgr;
|
---|
| 182 | s3d_CUtilStr m_ResName;
|
---|
| 183 | s3d_CSharkMeshLoaderChangedEye m_Changed;
|
---|
| 184 |
|
---|
| 185 | s3d_CUtilNotifRecipObj<s3d_CSharkMeshLoaderVariant> m_NotifRecip;
|
---|
| 186 | bool m_Loaded;
|
---|
| 187 | bool m_Reduced;
|
---|
| 188 |
|
---|
| 189 | // Data:
|
---|
| 190 |
|
---|
| 191 | s3d_CDrvSigPtr m_VariantSig;
|
---|
| 192 |
|
---|
| 193 | s3d_CSharkMeshLoaderTopol m_Topol;
|
---|
| 194 |
|
---|
| 195 | s3d_CUtilInitInt m_TexLayerCnt;
|
---|
| 196 | // Cnt = m_TexLayerCnt * m_FamilyCnt
|
---|
| 197 | s3d_CUtilOwnArray<int> m_TexIdxArray;
|
---|
| 198 | // Cnt = m_TexLayerCnt * m_FamilyCnt
|
---|
| 199 | s3d_CUtilOwnArray<int> m_SampModeArray;
|
---|
| 200 |
|
---|
| 201 | s3d_CUtilInitInt m_FrmCnt;
|
---|
| 202 | // Cnt = m_FrmCnt
|
---|
| 203 | s3d_CUtilOwnArray<float> m_KeyArray;
|
---|
| 204 |
|
---|
| 205 | s3d_CDrvSigPtr m_BoneWghBankSig;
|
---|
| 206 | // Cnt = m_VertCnt
|
---|
| 207 | s3d_CSharkMeshLoaderBankBoneWghPtr m_BoneWghBank;
|
---|
| 208 |
|
---|
| 209 | s3d_CDrvSigPtr m_BoneSubscrBankSig;
|
---|
| 210 | // Cnt = m_VertCnt
|
---|
| 211 | s3d_CSharkMeshLoaderBankBoneSubscrPtr m_BoneSubscrBank;
|
---|
| 212 |
|
---|
| 213 | s3d_CDrvSigPtr m_PointBankSig;
|
---|
| 214 | // Cnt = m_FrmCnt * m_VertCnt
|
---|
| 215 | s3d_CSharkMeshLoaderBankVec3fPtr m_PointBank;
|
---|
| 216 |
|
---|
| 217 | s3d_CDrvSigPtr m_NormalBankSig;
|
---|
| 218 | // Cnt = m_FrmCnt * m_VertCnt
|
---|
| 219 | s3d_CSharkMeshLoaderBankVec3fPtr m_NormalBank;
|
---|
| 220 |
|
---|
| 221 | s3d_CDrvSigPtr m_TangentUBankSig;
|
---|
| 222 | // Cnt = m_FrmCnt * m_VertCnt
|
---|
| 223 | s3d_CSharkMeshLoaderBankVec3fPtr m_TangentUBank;
|
---|
| 224 |
|
---|
| 225 | s3d_CDrvSigPtr m_TangentVBankSig;
|
---|
| 226 | // Cnt = m_FrmCnt * m_VertCnt
|
---|
| 227 | s3d_CSharkMeshLoaderBankVec3fPtr m_TangentVBank;
|
---|
| 228 |
|
---|
| 229 | s3d_CDrvSigPtr m_ColorAlphaBankSig;
|
---|
| 230 | // Cnt = m_FrmCnt * m_VertCnt
|
---|
| 231 | s3d_CSharkMeshLoaderBankVec4fPtr m_ColorAlphaBank;
|
---|
| 232 |
|
---|
| 233 | s3d_CUtilInitInt m_TexAttrCnt;
|
---|
| 234 | // Cnt = m_TexAttrCnt
|
---|
| 235 | s3d_CUtilOwnArray<s3d_CSharkMeshLoaderAttr> m_TexAttrArray;
|
---|
| 236 |
|
---|
| 237 | // Cnt = FamilyCnt
|
---|
| 238 | s3d_CUtilOwnArray<s3d_CUtilAtomPtr> m_MtlPtrArray;
|
---|
| 239 | s3d_CUtilOwnArray<s3d_CUtilAtom*> m_MtlArray;
|
---|
| 240 | s3d_CUtilOwnArray<float> m_FrictArray;
|
---|
| 241 | s3d_CUtilOwnArray<float> m_SoftnessArray;
|
---|
| 242 | s3d_CUtilOwnArray<float> m_BounceArray;
|
---|
| 243 |
|
---|
| 244 | s3d_CUtilInitInt m_PrimSphereCnt;
|
---|
| 245 | s3d_CUtilOwnArray<s3d_CEngGeoSphere> m_PrimSphereArray;
|
---|
| 246 |
|
---|
| 247 | s3d_CUtilInitInt m_PrimCapsuleCnt;
|
---|
| 248 | s3d_CUtilOwnArray<s3d_CEngGeoCapsule> m_PrimCapsuleArray;
|
---|
| 249 |
|
---|
| 250 | s3d_CUtilInitBool m_CouldMorePrim;
|
---|
| 251 |
|
---|
| 252 | void CheckLoad();
|
---|
| 253 | void Load(bool Restore);
|
---|
| 254 | void ReadData(
|
---|
| 255 | s3d_CUtilSnkSeqRead *Snk, bool Restore);
|
---|
| 256 | void ThrowFormatError(s3d_CUtilStr_cr Kind);
|
---|
| 257 | void ThrowRestoreError(s3d_CUtilStr_cr Kind);
|
---|
| 258 |
|
---|
| 259 | void LoaderPerform();
|
---|
| 260 | void ResChanged();
|
---|
| 261 |
|
---|
| 262 | s3d_CEngMeshData *EvalMeshDataBase(
|
---|
| 263 | s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage);
|
---|
| 264 | s3d_CEngMeshData *EvalMeshDataFull(
|
---|
| 265 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
|
---|
| 266 | s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage,
|
---|
| 267 | s3d_CEngModelCtx *ModelCtx);
|
---|
| 268 |
|
---|
| 269 | static s3d_CSysIntps SearchKitIdx(
|
---|
| 270 | s3d_CSysIntps KeyCnt, float *KeyArray, float Phase);
|
---|
| 271 | };
|
---|
| 272 |
|
---|
| 273 | typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderVariant> s3d_CSharkMeshLoaderVariantPtr;
|
---|
| 274 |
|
---|
| 275 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 276 |
|
---|
| 277 | struct s3d_CSharkMeshLoaderVariantDesc
|
---|
| 278 | {
|
---|
| 279 | s3d_CUtilAtomPtr m_Usage;
|
---|
| 280 | s3d_CUtilInitFloat m_Prec;
|
---|
| 281 | s3d_CSysIntps m_VariantIdx;
|
---|
| 282 | };*/
|
---|
| 283 |
|
---|
| 284 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 285 |
|
---|
| 286 | class s3d_CSharkMeshLoaderInterp
|
---|
| 287 | {
|
---|
| 288 | public:
|
---|
| 289 | static void EvalFrm(
|
---|
| 290 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
|
---|
| 291 | s3d_CUtilMemPool *MemPool,
|
---|
| 292 | s3d_CSysIntps FrmCnt, s3d_CSysIntps iKit, float KitFrac,
|
---|
| 293 | s3d_CEngMeshData *MeshData);
|
---|
| 294 | };
|
---|
| 295 |
|
---|
| 296 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 297 |
|
---|
| 298 | //@ Standard model implementation.
|
---|
| 299 | class /*S3D_SHARK_MESH_LOADER_PUBLIC_DECL */s3d_CSharkMeshLoader
|
---|
| 300 | : public s3d_CEngModel,
|
---|
| 301 | public s3d_CCompUtilSerImmut,
|
---|
| 302 | public s3d_CCompUtilUniqueBase,
|
---|
| 303 | public s3d_CSharkMeshLoaderChanged,
|
---|
| 304 | public s3d_CSharkMeshLoaderLoader
|
---|
| 305 | {
|
---|
| 306 | public:
|
---|
| 307 | S3D_UTIL_RTTI_TABLE_DECLARE
|
---|
| 308 |
|
---|
| 309 | //@
|
---|
| 310 | s3d_CSharkMeshLoader(
|
---|
| 311 | s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info,
|
---|
| 312 | bool Bare,
|
---|
| 313 | s3d_CUtilAtomMgr *AtomMgr, s3d_CCompResMgr *ResMgr,
|
---|
| 314 | s3d_CUtilStr_cr ResName);
|
---|
| 315 |
|
---|
| 316 | //@
|
---|
| 317 | ~s3d_CSharkMeshLoader();
|
---|
| 318 |
|
---|
| 319 | //@
|
---|
| 320 | s3d_CUtilStr GetInfo();
|
---|
| 321 |
|
---|
| 322 | //@ Return a string description of the object.
|
---|
| 323 | s3d_CUtilStr GetDesc();
|
---|
| 324 |
|
---|
| 325 | //@
|
---|
| 326 | void RegisterNotif(s3d_CUtilNotifRecip *Recip);
|
---|
| 327 |
|
---|
| 328 | //@
|
---|
| 329 | int GetAnimActuCnt();
|
---|
| 330 |
|
---|
| 331 | //@
|
---|
| 332 | s3d_CUtilStr GetAnimActuName(int Idx);
|
---|
| 333 |
|
---|
| 334 | //@
|
---|
| 335 | void GetAnimActuRange(int Idx, float &Start, float &End);
|
---|
| 336 |
|
---|
| 337 | //@
|
---|
| 338 | int GetAnimPosCnt();
|
---|
| 339 |
|
---|
| 340 | //@
|
---|
| 341 | s3d_CUtilStr GetAnimPosName(int Idx);
|
---|
| 342 |
|
---|
| 343 | //@
|
---|
| 344 | int GetTexCnt();
|
---|
| 345 |
|
---|
| 346 | //@
|
---|
| 347 | s3d_CUtilStr GetTexName(int Idx);
|
---|
| 348 |
|
---|
| 349 | //@
|
---|
| 350 | void GetBound(s3d_CUtilVec3f &Cen, s3d_CUtilVec3f &Ext);
|
---|
| 351 |
|
---|
| 352 | //@
|
---|
| 353 | void GetMeshCompos(
|
---|
| 354 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
|
---|
| 355 | s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage,
|
---|
| 356 | s3d_CUtilMat4x4f_cr Map, s3d_CUtilVec3f_cr Ext,
|
---|
| 357 | s3d_CUtilVec3f_cr Prec, s3d_CEngModelCtx *ModelCtx,
|
---|
| 358 | bool NeedMeshData,
|
---|
| 359 | s3d_CEngMeshCompos &MeshCompos);
|
---|
| 360 |
|
---|
| 361 | //@
|
---|
| 362 | void GetAvailMeshComposArray(
|
---|
| 363 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
|
---|
| 364 | s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage,
|
---|
| 365 | s3d_CEngMeshComposArray &MeshComposArray);
|
---|
| 366 |
|
---|
| 367 | //@
|
---|
| 368 | s3d_CEngGeoData *GetGeoData(
|
---|
| 369 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
|
---|
| 370 | s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage);
|
---|
| 371 |
|
---|
| 372 | //@
|
---|
| 373 | bool VisibCheckInf(
|
---|
| 374 | s3d_CUtilMemPool *MemPool,
|
---|
| 375 | s3d_CUtilVec3f_cr RelRefPoint);
|
---|
| 376 |
|
---|
| 377 | //@
|
---|
| 378 | void VisibAddBoundTest(
|
---|
| 379 | s3d_CUtilMemPool *MemPool,
|
---|
| 380 | s3d_CEngBoundTestArray *BoundTestArray,
|
---|
| 381 | s3d_CUtilVec3f_cr RelRefPoint,
|
---|
| 382 | s3d_CUtilVec3f_cr BoundTransl, s3d_CUtilQuatf_cr BoundQuat);
|
---|
| 383 |
|
---|
| 384 | //@
|
---|
| 385 | void Reduce();
|
---|
| 386 |
|
---|
| 387 | //@
|
---|
| 388 | void ResChanged();
|
---|
| 389 |
|
---|
| 390 | //@
|
---|
| 391 | void ChangedPerform();
|
---|
| 392 |
|
---|
| 393 | // bool UseTriangleStrips(void) const { return use_triangle_strips; }
|
---|
| 394 |
|
---|
| 395 | inline const Geometry::LodStripsLibraryData *GetLodStripsData(void) const { return geo_mesh_loader.GetLodStripsData(); }
|
---|
| 396 | inline Geometry::Mesh *GetGeoMesh(void) const { return m_GeoMesh; }
|
---|
| 397 |
|
---|
| 398 | private:
|
---|
| 399 | bool m_Bare;
|
---|
| 400 | s3d_CUtilAtomMgrPtr m_AtomMgr;
|
---|
| 401 | s3d_CCompResMgrPtr m_ResMgr;
|
---|
| 402 | s3d_CUtilStr m_ResName;
|
---|
| 403 |
|
---|
| 404 | s3d_CUtilNotifRecipObj<s3d_CSharkMeshLoader> m_NotifRecip;
|
---|
| 405 | s3d_CUtilNotifMgr m_NotifMgr;
|
---|
| 406 |
|
---|
| 407 | s3d_CUtilMsgHandlerPtr m_MsgHandler;
|
---|
| 408 | s3d_CUtilStr m_Info;
|
---|
| 409 |
|
---|
| 410 | s3d_CUtilStr m_ModelName;
|
---|
| 411 |
|
---|
| 412 | bool m_Loaded;
|
---|
| 413 |
|
---|
| 414 | // Model data:
|
---|
| 415 |
|
---|
| 416 | float m_RangeStart;
|
---|
| 417 | float m_RangeEnd;
|
---|
| 418 |
|
---|
| 419 | s3d_CUtilVec3f m_BoundCen;
|
---|
| 420 | s3d_CUtilVec3f m_BoundExt;
|
---|
| 421 |
|
---|
| 422 | int m_BoneCnt;
|
---|
| 423 | s3d_CUtilOwnArray<s3d_CUtilStr> m_BoneNameArray;
|
---|
| 424 | s3d_CUtilOwnArray<s3d_CUtilTranslQuatf> m_BoneTransfArray;
|
---|
| 425 |
|
---|
| 426 | s3d_CUtilInitInt m_TexNameCnt;
|
---|
| 427 | s3d_CUtilOwnArray<s3d_CUtilStr> m_TexNameArray;
|
---|
| 428 |
|
---|
| 429 | /* s3d_CUtilInitInt m_VariantDescCnt;
|
---|
| 430 | s3d_CUtilOwnArray<s3d_CSharkMeshLoaderVariantDesc> m_VariantDescArray;
|
---|
| 431 | s3d_CUtilInitInt m_VariantCnt;
|
---|
| 432 | s3d_CUtilOwnArray<s3d_CSharkMeshLoaderVariantPtr> m_VariantArray;
|
---|
| 433 |
|
---|
| 434 | s3d_CSysIntps m_VariantIdxGeo;*/
|
---|
| 435 |
|
---|
| 436 | void Unload();
|
---|
| 437 | void CheckLoad();
|
---|
| 438 | void Load();
|
---|
| 439 | // GAMETOOLS
|
---|
| 440 | /* void ReadModel(
|
---|
| 441 | s3d_CUtilSnkSeqRead *Snk);*/
|
---|
| 442 | void ReadModelGT();
|
---|
| 443 |
|
---|
| 444 | /* void ReadVariantDesc(
|
---|
| 445 | s3d_CUtilSnkSeqRead *Snk,
|
---|
| 446 | s3d_CSharkMeshLoaderVariantDesc &VariantDesc);*/
|
---|
| 447 | void ThrowFormatError(s3d_CUtilStr_cr Kind);
|
---|
| 448 |
|
---|
| 449 | s3d_CSysIntps SearchVariantIdxPrec(
|
---|
| 450 | s3d_CUtilAtom *Usage, float Prec);
|
---|
| 451 | float CalcMeshPrec(s3d_CUtilMat4x4f_cr Map, s3d_CUtilVec3f_cr Prec);
|
---|
| 452 |
|
---|
| 453 | // GAMETOOLS
|
---|
| 454 | Geometry::Mesh *m_GeoMesh;
|
---|
| 455 | Geometry::GeoMeshLoader geo_mesh_loader;
|
---|
| 456 | void LoaderPerform();
|
---|
| 457 | void GetMeshComposBase(
|
---|
| 458 | s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage,
|
---|
| 459 | s3d_CEngMeshCompos &MeshCompos);
|
---|
| 460 |
|
---|
| 461 | s3d_CDrvSigPtr m_PointBankSig;
|
---|
| 462 | // Cnt = m_FrmCnt * m_VertCnt
|
---|
| 463 | s3d_CSharkMeshLoaderBankVec3fPtr m_PointBank;
|
---|
| 464 |
|
---|
| 465 | s3d_CDrvSigPtr m_NormalBankSig;
|
---|
| 466 | // Cnt = m_FrmCnt * m_VertCnt
|
---|
| 467 | s3d_CSharkMeshLoaderBankVec3fPtr m_NormalBank;
|
---|
| 468 |
|
---|
| 469 | s3d_CUtilInitInt m_TexAttrCnt;
|
---|
| 470 | // Cnt = m_TexAttrCnt
|
---|
| 471 | s3d_CEngMeshAttr *m_TexAttrArray;
|
---|
| 472 |
|
---|
| 473 | s3d_CSharkMeshLoaderBankMeshIdx *m_IdxBank; //<- indices
|
---|
| 474 | s3d_CSharkMeshLoaderBankMeshIdx *m_BoneIdxBank; //<- bone indices
|
---|
| 475 |
|
---|
| 476 | // families (submeshes)
|
---|
| 477 | s3d_CEngMeshFamily *m_FamilyArray;
|
---|
| 478 |
|
---|
| 479 | // packets
|
---|
| 480 | s3d_CSharkMeshLoaderBankPacket *m_PacketsBank;
|
---|
| 481 |
|
---|
| 482 | // signatures
|
---|
| 483 | s3d_CDrvSigPtr m_MeshSig, m_TopolSig;
|
---|
| 484 |
|
---|
| 485 | // bool use_triangle_strips;
|
---|
| 486 |
|
---|
| 487 | };
|
---|
| 488 |
|
---|
| 489 | typedef s3d_CUtilPtr<s3d_CSharkMeshLoader> s3d_CSharkMeshLoaderPtr;
|
---|
| 490 |
|
---|
| 491 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 492 |
|
---|
| 493 | //@ Standard suppl for standard model objects
|
---|
| 494 | // which can read standard model files.
|
---|
| 495 | class s3d_CSharkMeshLoaderSuppl
|
---|
| 496 | : public s3d_CCompSuppl,
|
---|
| 497 | public s3d_CCompSetup
|
---|
| 498 | {
|
---|
| 499 | public:
|
---|
| 500 | S3D_UTIL_RTTI_TABLE_DECLARE
|
---|
| 501 |
|
---|
| 502 | //@
|
---|
| 503 | s3d_CSharkMeshLoaderSuppl();
|
---|
| 504 |
|
---|
| 505 | //@
|
---|
| 506 | s3d_CSharkMeshLoaderSuppl(
|
---|
| 507 | s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info,
|
---|
| 508 | bool Bare, s3d_CUtilAtomMgr *AtomMgr, s3d_CCompResMgr *ResMgr);
|
---|
| 509 |
|
---|
| 510 | //@
|
---|
| 511 | void SetupInit(
|
---|
| 512 | s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info,
|
---|
| 513 | s3d_CCompSuppl *FetchSuppl, s3d_CUtilSnkChunk *Param);
|
---|
| 514 |
|
---|
| 515 | //@
|
---|
| 516 | void SetupDone();
|
---|
| 517 |
|
---|
| 518 | //@
|
---|
| 519 | s3d_CCompObjPtr SupplObj(
|
---|
| 520 | s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info,
|
---|
| 521 | s3d_CUtilStr_cr Ident, s3d_CUtilStr_cr Version);
|
---|
| 522 |
|
---|
| 523 | private:
|
---|
| 524 | bool m_Bare;
|
---|
| 525 | s3d_CUtilAtomMgrPtr m_AtomMgr;
|
---|
| 526 | s3d_CCompResMgrPtr m_ResMgr;
|
---|
| 527 | };
|
---|
| 528 |
|
---|
| 529 | //@
|
---|
| 530 | typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderSuppl> s3d_CSharkMeshLoaderSupplPtr;
|
---|
| 531 |
|
---|
| 532 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 533 | // Definitions:
|
---|
| 534 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 535 |
|
---|
| 536 | template<typename T>
|
---|
| 537 | void s3d_CSharkMeshLoaderBank<T>::Fetch(
|
---|
| 538 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
|
---|
| 539 | s3d_CDrvBankContent &BankContent)
|
---|
| 540 | {
|
---|
| 541 | if(m_Data)
|
---|
| 542 | {
|
---|
| 543 | BankContent.m_Cnt = m_Cnt;
|
---|
| 544 | BankContent.m_TypeDesc = s3d_DrvDataGetTypeDesc<T>();
|
---|
| 545 | BankContent.m_Stride = S3D_SYS_SIZEOFS(T);
|
---|
| 546 | BankContent.m_Data
|
---|
| 547 | = reinterpret_cast<const s3d_CSysIntm*>(m_Data.Get());
|
---|
| 548 | return;
|
---|
| 549 | }
|
---|
| 550 | if(m_Loader)
|
---|
| 551 | m_Loader->LoaderPerform();
|
---|
| 552 | if(m_Data)
|
---|
| 553 | {
|
---|
| 554 | BankContent.m_Cnt = m_Cnt;
|
---|
| 555 | BankContent.m_TypeDesc = s3d_DrvDataGetTypeDesc<T>();
|
---|
| 556 | BankContent.m_Stride = S3D_SYS_SIZEOFS(T);
|
---|
| 557 | BankContent.m_Data
|
---|
| 558 | = reinterpret_cast<const s3d_CSysIntm*>(m_Data.Get());
|
---|
| 559 | return;
|
---|
| 560 | }
|
---|
| 561 | s3d_CUtilMsg e;
|
---|
| 562 | e.m_Code = "eng/model/std/SHARK_MESH_LOADER.not_available";
|
---|
| 563 | e.m_StdTempl = "Data not available.";
|
---|
| 564 | e.AddInfo(Info);
|
---|
| 565 | s3d_UtilMsgReportFatal(MsgHandler, e);
|
---|
| 566 | }
|
---|
| 567 |
|
---|
| 568 | template<typename T>
|
---|
| 569 | s3d_CUtilPtrBase *s3d_CSharkMeshLoaderBank<T>::GetOwner(
|
---|
| 570 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info)
|
---|
| 571 | {
|
---|
| 572 | return this;
|
---|
| 573 | }
|
---|
| 574 |
|
---|
| 575 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 576 |
|
---|
| 577 | #endif
|
---|