OROCHI
 
Loading...
Searching...
No Matches
GxSysResource.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13GX_CORE_NAMESPACE_BEGIN()
14
15#define GX_SYS_RESOURCE_LOCK getGxSysResource()->lockFromOutside
16#define GX_SYS_RESOURCE_UNLOCK getGxSysResource()->unlockFromOutside
17
18//===========================================================================
21// リソースパスには ファイル指定(拡張子あり), フォルダ指定(拡張子なし) どちらも指定可能です。
22// 同一アーカイブIDが指定されているものが1つのバイナリデータになります。
23//===========================================================================
25{
26 //-------------------------------------------------------------
28 //-------------------------------------------------------------
30public:
32 GX_FORCE_INLINE b32 isDirectory(void) const { return GxFilePath::isDirectoryPath(_pResourcePath); }
34 GX_FORCE_INLINE b32 isEnd(void) const { return (_pResourcePath == nullptr); }
38 static GxResourceFileTable* allocArray(const GxResourceFileTable* pResourceFileTable, s16 archiveId);
39
41 //-------------------------------------------------------------
43 //-------------------------------------------------------------
45
49
51};
52
53//===========================================================================
56// ファイル名 (or フォルダ名) との単純比較なので、階層的なチェックは行いませんので注意して下さい。
57//===========================================================================
59{
60 //-------------------------------------------------------------
62 //-------------------------------------------------------------
64public:
66 GX_FORCE_INLINE b32 isEnd(void) const { return (_pFileName == nullptr); }
67
69 //-------------------------------------------------------------
71 //-------------------------------------------------------------
73
74 GX_CSTR _pFileName;
75
77};
78
79//===========================================================================
86//===========================================================================
87typedef u32 (*GX_SYSRESOURCE_ERROR_FUNCTION)(GX_CSTR message, GX_CSTR filePath, u32 rttiId, u32 value);
88
89
90//===========================================================================
92//===========================================================================
94{
95 DEFAULT = 0,
96 UP,
97 DOWN,
98 UP64,
99 DOWN64,
100};
101#if GX_DEVELOP
102GX_ENUM_BEGIN(GX_ARCHIVE_PACKAGEMODE)
103 GX_ENUM_VALUE("ソートせずに名前順", GX_ARCHIVE_PACKAGEMODE::DEFAULT),
104 GX_ENUM_VALUE("リソースIDの下位32bitを元にした昇順", GX_ARCHIVE_PACKAGEMODE::UP),
105 GX_ENUM_VALUE("リソースIDの下位32bitを元にした降順", GX_ARCHIVE_PACKAGEMODE::DOWN),
106 GX_ENUM_VALUE("リソースIDを元にした昇順", GX_ARCHIVE_PACKAGEMODE::UP64),
107 GX_ENUM_VALUE("リソースIDを元にした降順", GX_ARCHIVE_PACKAGEMODE::DOWN64),
108GX_ENUM_END()
109#endif //GX_DEVELOP
110
111//===========================================================================
113//===========================================================================
115{
116 //-----------------------------------------------------------
118 //-----------------------------------------------------------
120public:
121 // RTTI定義
123 // GxClassBase継承クラス用禁止宣言
125
126
127 //-------------------------------------------------------------
129 //-------------------------------------------------------------
131public:
134
136 //-------------------------------------------------------------
138 //-------------------------------------------------------------
140public:
143 : _pResourceFileTableArray(nullptr)
148 , _optimizeVertexCache(false)
152 , _asyncLoadThreadStackSize(GX_ASYNC_LOAD_THREAD_STACKSIZE)
154 , _asyncLoadCpuIndex(GX_ASYNC_LOAD_THREAD_CPU_INDEX)
159 , _pUserErrorFunction(nullptr)
160#if defined(_WINDOWS)
161 , _resourecRootPath("../../resource/")
162#endif
163#if defined(_NX64)
164 , _fsMountType(0)
165#endif // _NX64
166 , _separeteShaderConfig(false)
167 , _archiveFileMax(16)
170#if GX_DEVELOP
171 , _disableSaveArchiveErr(false)
172 , _outputMultiPlatformArchiveTable(false)
173 , _disablePropertyChangedWarning(false)
174 , _archivePackMode(GX_ARCHIVE_PACKAGEMODE::DEFAULT)
175 , _disableIsExistMasterResErrMessage(false)
176 , _vertexHashMaxNum(32768) //< 256 * 1024 / 8 byte
177 , _outputArchiveInfo(false)
178#endif // GX_DEVELOP
179 {}
180
182 //-------------------------------------------------------------
184 //-------------------------------------------------------------
186
188 void loadJson(const GxJson::GxJsonNode& jsonNode);
189
190#if GX_DEVELOP
192 static GxGuiBase* createGui(GxProperty& property, GxTypedObject* pOwner, const GxRtti& rtti, u32 index);
193#endif // GX_DEVELOP
194
196 //-------------------------------------------------------------
198 //-------------------------------------------------------------
200
218#if defined(_WINDOWS)
219 GxString _resourecRootPath;
220#endif
221#if defined(_NX64)
222 u32 _fsMountType;
223#endif // _NX64
228#if GX_DEVELOP
229 b32 _disableSaveArchiveErr;
230 b32 _outputMultiPlatformArchiveTable;
231 b32 _disablePropertyChangedWarning;
232 GX_ARCHIVE_PACKAGEMODE _archivePackMode;
233 b32 _disableIsExistMasterResErrMessage;
234 u32 _vertexHashMaxNum;
235 b32 _outputArchiveInfo;
236#endif // GX_DEVELOP
237
239};
240
241
242//===========================================================================
244//===========================================================================
246{
247 //-----------------------------------------------------------
249 //-----------------------------------------------------------
251public:
252 // RTTI宣言
253 GX_RTTI_CLASS(GxSysResourceRegister, GxClassBase)
254 // GxClassBase継承クラス用禁止宣言
256
257private:
259 static constexpr u32 HASH_LINE_NUM = (1 << 8);
261 static constexpr u32 HASH_ELEMENT_NUM = GxMath::VALUE_32;
262
263private:
265 struct GxResourceInformation
266 {
267 //-----------------------------------------------------------
269 //-----------------------------------------------------------
271 public:
273 constexpr void set(GxResBase* pResource) { _pResource = pResource; }
275 constexpr void empty(void) { _pResource = nullptr; }
277 GX_FORCE_INLINE b32 isEmpty(void) const { return (_pResource == nullptr); }
278
280 //-----------------------------------------------------------
282 //-----------------------------------------------------------
284 public:
285 GxResBase* _pResource;
286
288 };
289
291 //-----------------------------------------------------------
293 //-----------------------------------------------------------
295
296public:
300 ~GxSysResourceRegister(void) override {}
301
303 //-----------------------------------------------------------
305 //-----------------------------------------------------------
307public:
309 b32 registerResource(GxResBase* pResource);
311 b32 unregisterResource(GxResBase* pResource);
313 GxResBase* findResource(u64 resourceId);
315 GxResBase* getRegisterResource(u32 index);
316
318 //-----------------------------------------------------------
320 //-----------------------------------------------------------
322public:
324 u32 getResourceNum(void) const;
325
326private:
328 void getResourceTableForProperty(void* pValue, u32 index);
330 u32 getHashTableValue(u64 resourceId) const;
331
333 //-----------------------------------------------------------
335 //-----------------------------------------------------------
337
338private:
339 GxResourceInformation _registerTable[HASH_LINE_NUM][HASH_ELEMENT_NUM];
340 u8 _registerCount[HASH_LINE_NUM];
341#if GX_DEVELOP
342 GxArray _registerArray;
343#endif //GX_DEVELOP
344
346};
347
348
349//===========================================================================
351//===========================================================================
353{
354 //-----------------------------------------------------------
356 //-----------------------------------------------------------
358public:
359 // RTTI宣言
360 GX_RTTI_CLASS(GxSysResourceCallback, GxClassBase)
361 // GxClassBase継承クラス用禁止宣言
363
364private:
366 static constexpr u32 REQUEST_QUEUE_MAX = GxMath::VALUE_32;
367
369 //-----------------------------------------------------------
371 //-----------------------------------------------------------
373public:
377 ~GxSysResourceCallback(void) override;
378
380 b32 initialize(void);
382 void terminate(void);
383
385 //-----------------------------------------------------------
387 //-----------------------------------------------------------
389public:
391 void update(void);
393 void clear(void);
395 b32 request(GxResBase* pResource);
396
398 //-----------------------------------------------------------
400 //-----------------------------------------------------------
402private:
404
406};
407
408
409//===========================================================================
411//===========================================================================
413{
414 //-----------------------------------------------------------
416 //-----------------------------------------------------------
418public:
419 // RTTI宣言
421 // GxClassBase継承クラス用禁止宣言
423
424
425 //-----------------------------------------------------------
427 //-----------------------------------------------------------
429public:
434
436 virtual b32 initialize(u32 /*queueMax*/, u32 /*asyncLoadThreadStackSize*/ = GX_ASYNC_LOAD_THREAD_STACKSIZE, u32 /*multiCount*/ = 1, s32 /*cpuIndex*/ = GX_ASYNC_LOAD_THREAD_CPU_INDEX
437#if GX_DEVELOP
438 , GxString /*threadName*/ = ""
439#endif // GX_DEVELOP
440 ){ return true; }
442 virtual void terminate(void){}
443
445 //-----------------------------------------------------------
447 //-----------------------------------------------------------
449public:
451 GX_FORCE_INLINE virtual void update(void) {}
453 GX_FORCE_INLINE virtual void clear(void){}
455 GX_FORCE_INLINE virtual b32 isEmpty(void){ return true; }
457 GX_FORCE_INLINE virtual b32 request(GxResBase* /*pResource*/) { return true; }
459 void loadAsync(void* pObject);
462 void setOnTerminateCallback( void (*pFunction)(u32) );
464 GX_FORCE_INLINE virtual void lockAsyncLoad(void){}
466 GX_FORCE_INLINE virtual void unlockAsyncLoad(void){}
468 GX_FORCE_INLINE virtual u32 getMultiCount(void) const { return 1; }
469
471 //-----------------------------------------------------------
473 //-----------------------------------------------------------
475
476public:
477#if GX_DEVELOP
481 GX_FORCE_INLINE virtual GX_CSTR getAsyncLoadString(u32 /*multiIndex*/ = 0) const { return nullptr; }
483 GX_FORCE_INLINE virtual GX_CSTR getAsyncLoadClassString(u32 /*multiIndex*/ = 0) const { return nullptr; }
485 GX_FORCE_INLINE virtual void setAsyncLoadInfomation(GxResBase* /*pResource*/, u32 /*multiIndex*/ = 0) {}
486#endif // GX_DEVELOP
487
489 //-----------------------------------------------------------
491 //-----------------------------------------------------------
493protected:
494 void (*_onTerminateProc)(u32);
495
497};
498
499//===========================================================================
501//===========================================================================
503{
504 //-----------------------------------------------------------
506 //-----------------------------------------------------------
508public:
509 // RTTI宣言
511 // GxClassBase継承クラス用禁止宣言
513
514public:
517 {
518 //-------------------------------------------------------------
520 //-------------------------------------------------------------
522 public:
523 GX_RTTI_CLASS(GxAsyncLoadThread, GxThread)
524 // GxClassBase継承クラス用禁止宣言
527 static constexpr s32 WAIT_INFINITY = -1;
528
530 //-------------------------------------------------------------
532 //-------------------------------------------------------------
534 public:
538 void threadMain(void* pArgument) override;
539
541 //-------------------------------------------------------------
543 //-------------------------------------------------------------
545
547 GX_FORCE_INLINE b32 waitStartEvent(s32 milliSecond = WAIT_INFINITY) { return _startEvent.waitEvent(milliSecond); }
549 GX_FORCE_INLINE b32 setStartEvent(void) { return _startEvent.setEvent(); }
550
552 //-------------------------------------------------------------
554 //-------------------------------------------------------------
556
558
559 protected:
561
563 };
564
566 //-----------------------------------------------------------
568 //-----------------------------------------------------------
570public:
574 ~GxSysResourceAsyncLoad(void) override;
575
578 u32 queueMax,
579 u32 asyncLoadThreadStackSize = GX_ASYNC_LOAD_THREAD_STACKSIZE,
580 u32 multiCount = 1,
581 s32 cpuIndex = GX_ASYNC_LOAD_THREAD_CPU_INDEX
582#if GX_DEVELOP
583 , GxString threadName = ""
584#endif // GX_DEVELOP
585 ) override;
587 void terminate(void) override;
588
590 //-----------------------------------------------------------
592 //-----------------------------------------------------------
594public:
596 void update(void) override;
598 void clear(void) override;
600 b32 isEmpty(void) override;
602 b32 request(GxResBase* pResource) override;
604 void lockAsyncLoad(void) override;
606 void unlockAsyncLoad(void) override;
607
609 //-----------------------------------------------------------
611 //-----------------------------------------------------------
613public:
614#if GX_DEVELOP
618 GX_FORCE_INLINE GX_CSTR getAsyncLoadString(u32 multiIndex = 0) const override { GX_UNUSED(multiIndex); return _asyncPath; }
620 GX_FORCE_INLINE GX_CSTR getAsyncLoadClassString(u32 multiIndex = 0) const override { GX_UNUSED(multiIndex); return _asyncClassName; }
622 void setAsyncLoadInfomation(GxResBase* pResource, u32 multiIndex = 0) override;
623#endif // GX_DEVELOP
624
626 //-----------------------------------------------------------
628 //-----------------------------------------------------------
630protected:
634#if GX_DEVELOP
635 GX_CSTR _asyncPath;
636 GX_CSTR _asyncClassName;
637#endif // GX_DEVELOP
638
640};
641
642//===========================================================================
644//===========================================================================
646{
647 //-----------------------------------------------------------
649 //-----------------------------------------------------------
651public:
652 // RTTI定義
654 // GxClassBase継承クラス用禁止宣言
656
657
659 {
660 //-----------------------------------------------------------
662 //-----------------------------------------------------------
664 public:
665 GX_RTTI_CLASS(GxAsyncLoadThreadMulti, GxThread)
666 // GxClassBase継承クラス用禁止宣言
669 static constexpr s32 WAIT_INFINITY = -1;
670
672 //-----------------------------------------------------------
674 //-----------------------------------------------------------
676 public:
679 : _multiIndex(0)
680 {}
682 void threadMain(void* pArgument) override;
683
685 //-----------------------------------------------------------
687 //-----------------------------------------------------------
689
691 GX_FORCE_INLINE b32 waitStartEvent(s32 milliSecond = WAIT_INFINITY) { return _startEvent.waitEvent(milliSecond); }
693 GX_FORCE_INLINE b32 setStartEvent(void) { return _startEvent.setEvent(); }
695 constexpr void setMultiIndex(u32 index) { _multiIndex = index; }
696
698 //-----------------------------------------------------------
700 //-----------------------------------------------------------
702
704 protected:
707
709 };
710
713
715 //-----------------------------------------------------------
717 //-----------------------------------------------------------
719public:
723 ~GxSysResourceAsyncLoadMulti(void) override;
724
727 u32 queueMax,
728 u32 asyncLoadThreadStackSize = GX_ASYNC_LOAD_THREAD_STACKSIZE,
729 u32 multiCount = 4,
730 s32 cpuIndex = GX_ASYNC_LOAD_THREAD_CPU_INDEX
731#if GX_DEVELOP
732 , GxString threadName = ""
733#endif // GX_DEVELOP
734 ) override;
736 void terminate(void) override;
737
739 //-----------------------------------------------------------
741 //-----------------------------------------------------------
743public:
745 void clear(void) override;
747 b32 isEmpty(void) override;
749 b32 request(GxResBase* pResource) override;
751 void lockAsyncLoad(void) override;
753 void unlockAsyncLoad(void) override;
755 GX_FORCE_INLINE u32 getMultiCount(void) const override { return _multiCount; }
756
758 //-----------------------------------------------------------
760 //-----------------------------------------------------------
762public:
763#if GX_DEVELOP
766 GX_FORCE_INLINE GX_CSTR getAsyncLoadString(u32 multiIndex = 0) const override { return (_multiCount > multiIndex) ? _asyncPath[multiIndex] : nullptr; }
769 GX_FORCE_INLINE GX_CSTR getAsyncLoadClassString(u32 multiIndex = 0) const override { return (_multiCount > multiIndex) ? _asyncClassName[multiIndex] : nullptr; }
771 void setAsyncLoadInfomation(GxResBase* pResource, u32 multiIndex = 0) override;
772#endif // GX_DEVELOP
773
775 //-----------------------------------------------------------
777 //-----------------------------------------------------------
779protected:
786#if GX_DEVELOP
787 GX_CSTR _asyncPath[ MAX_MULTI_PROCESS_COUNT ];
788 GX_CSTR _asyncClassName[MAX_MULTI_PROCESS_COUNT];
789#endif // GX_DEVELOP
790
792};
793//===========================================================================
795//===========================================================================
797{
798 //-----------------------------------------------------------
800 //-----------------------------------------------------------
802public:
803 // RTTI定義
805 // GxClassBase継承クラス用禁止宣言
807
808
810 {
811 //-----------------------------------------------------------
813 //-----------------------------------------------------------
815 public:
817 // GxClassBase継承クラス用禁止宣言
819
820
821 //-----------------------------------------------------------
823 //-----------------------------------------------------------
825 public:
827 GxAsyncLoadThreadMultiOpt(void) :Super(), _pNextRequestResource(nullptr) { }
829 void threadMain(void* pArgument) override;
830
832 //-----------------------------------------------------------
834 //-----------------------------------------------------------
837 GX_FORCE_INLINE b32 isWaitResource(void) const { return _pNextRequestResource == nullptr; }
838
840 constexpr void setRequestResource(GxResBase* pResource) { _pNextRequestResource = pResource; }
841
843 //-----------------------------------------------------------
845 //-----------------------------------------------------------
847 private:
848 GxResBase* _pNextRequestResource;
849
851 };
852
854 //-----------------------------------------------------------
856 //-----------------------------------------------------------
858public:
863
866 u32 queueMax,
867 u32 asyncLoadThreadStackSize = GX_ASYNC_LOAD_THREAD_STACKSIZE,
868 u32 multiCount = 4,
869 s32 cpuIndex = GX_ASYNC_LOAD_THREAD_CPU_INDEX
870#if GX_DEVELOP
871 , GxString threadName = ""
872#endif // GX_DEVELOP
873 ) override;
875 void terminate(void) override;
876
878 //-----------------------------------------------------------
880 //-----------------------------------------------------------
882public:
884 void clear(void) override;
886 b32 isEmpty(void) override;
888 b32 request(GxResBase* pResource) override;
891
893 //-----------------------------------------------------------
895 //-----------------------------------------------------------
897
898protected:
900
902};
903
904//===========================================================================
906//===========================================================================
908{
909 //-----------------------------------------------------------
911 //-----------------------------------------------------------
913public:
914 // RTTI宣言
915 GX_RTTI_CLASS(GxSysResourceArchive, GxClassBase)
916 // GxClassBase継承クラス用禁止宣言
918
919public:
921 static constexpr u32 ARCHIVE_FILE_FOURCC = GX_FOURCC('G','D','A','T');
923 static constexpr u32 FILE_ARCHIVE_SIZE_MAX = U32_MAX - 1;
924
927 {
930 };
931
934 {
936 u32 _size;
937 };
938
945
946private:
948 enum class ARCHIVE_ACCESSOR_COLUMN
949 {
950 RESOURCE_ID = 0,
951 DATA_INDEX,
952 MAX
953 };
954
956 static GX_CSTR ARCHIVE_FILE_BASE_NAME;
958 static GX_CSTR ARCHIVE_FILE_EXTENSION;
960 static GX_CSTR ARCHIVE_INDEX_RESOURCE_PATH;
961
963 struct GxArchiveFile
964 {
965 GxFile* _pFile;
966 GxThread* _pFileThread;
967 u32 _referenceCount;
968 s32 _archiveId;
969 };
970
972 //-----------------------------------------------------------
974 //-----------------------------------------------------------
976
977public:
981 ~GxSysResourceArchive(void) override;
982
984 b32 initialize(u32 archiveFileMax, u32 archiveLocalThreadFileMax,
985 const GxResourceFileTable* pResourceFileTable = nullptr,
986 const s16* pArchiveSearchOrderTable = nullptr );
988 void terminate(void);
989
991 //-----------------------------------------------------------
993 //-----------------------------------------------------------
995public:
997 constexpr void update(void){}
998
1000 void openAllArchiveFiles(GX_CSTR basePath, const GxResourceFileTable* pResourceFileTable);
1002 b32 openArchiveFile(GX_CSTR basePath, const GxResourceFileTable* pResourceFileTable, s16 archiveId);
1004 void closeArchiveFile(s16 archiveId);
1006 void initializeArchiveSearchOrder(const s16* pArchiveSearchOrderTable = nullptr);
1007
1008#if GX_DEVELOP
1010 static b32 createArchiveFile(s16 archiveId, const GxArray& archiveFileList);
1012 static u32 getArchiveSize(s16 archiveId, const GxArray& archiveFileList);
1013#endif // GX_DEVELOP
1014
1015protected:
1017 static b32 readArchiveHeader(GxStream& srcStream, GxArchiveHeader& dstHeader);
1019 static b32 readArchiveOffsetTable(GxStream& srcStream, GxArchiveOffsetInformation* pDstOffsetTable, u32 archiveCount);
1020#if GX_DEVELOP
1022 static b32 writeArchiveHeader(GxStream& dstStream, const GxArray& archiveFileList);
1024 static b32 writeArchiveOffsetTable(GxStream& dstStream, const GxArray& archiveFileList);
1026 static b32 writeArchiveFile(GxStream& dstStream, const GxArray& archiveFileList);
1027#endif // GX_DEVELOP
1028
1030 //-------------------------------------------------------------
1032 //-------------------------------------------------------------
1034public:
1036 u32 getIndex(s16 archiveId, u64 resourceId) const;
1038 const GxArchiveOffsetInformation* getOffsetInformation(s16 archiveId, u32 archiveIndex) const;
1040 GxFile* getFile(s16 archiveId);
1043 GxFileStream* getLocalThreadFileStream(s16 archiveId, u32 archiveIndex, GxFile** retFile);
1046 GxFile* getLocalThreadFile(s16 archiveId);
1048 void freeLocalThreadFile(s16 archiveId, GxFile* lsFile);
1050 // GxResourceInitialInformation::_archiveFileMax で指定可能
1051 // システム上限はプラットフォームによる
1052 constexpr u32 getArchiveFileMax(void) const { return _archiveFileMax; }
1054 constexpr u32 getArchiveLocalThreadFileMax(void) const { return _archiveLocalThreadFileMax; }
1056 b32 isArchiveOpened(s16 archiveId) const;
1058 const GxResourceFileTable* getResourceFileTable(const GX_CSTR srcResourcePath) const;
1059
1061 static void getArchiveFilePath(GxString& dst, s16 archiveId, GX_CSTR basePath);
1063 static void getArchiveIndexResourcePath(GxString& dst, s16 archiveId);
1064#if GX_DEVELOP
1066 static void getArchiveDevInfoResourcePath(GxString& dst, s16 archiveId);
1067#endif // GX_DEVELOP
1068
1070 //-----------------------------------------------------------
1072 //-----------------------------------------------------------
1074private:
1075 GxArchiveFile* _pArchiveFileArray;
1076 GxArchiveHeader* _pArchiveHeaderArray;
1077 GxArchiveOffsetInformation** _ppArchiveOffsetTableArray;
1078 GxResCellSheet** _ppArchiveIndexResourceArray;
1079 GxResourceFileTable** _ppResourceFileTableArray;
1080 GxCriticalSection _archiveFileArrayCriticalSection;
1081 u32 _archiveFileMax;
1082 u32 _archiveLocalThreadFileMax;
1083 s16* _pArchiveSearchOrder;
1084
1086};
1087
1088//===========================================================================
1090//===========================================================================
1091class GxSysResource : public GxSysBase, public SingletonBase<GxSysResource>
1092{
1093 //-----------------------------------------------------------
1095 //-----------------------------------------------------------
1097public:
1098 // RTTI定義
1099 GX_RTTI_ABSTRACT_CLASS(GxSysResource, GxSysBase)
1100 // GxClassBase継承クラス用禁止宣言
1102
1103 // フレンド宣言
1104 friend class GxSysResourceRegister;
1105 friend class GxSysResourceCallback;
1106 friend class GxSysResourceAsyncLoadBase;
1107 friend class GxSysResourceAsyncLoad;
1108 friend class GxSysResourceAsyncLoadMulti;
1110 friend class GxSysResourceArchive;
1111 friend class GxResBase;
1112
1113public:
1115 enum class LOAD_MODE
1116 {
1117 SYNC = 0,
1118 ASYNC
1119 };
1120
1122 enum class LOAD_RESULT
1123 {
1124 CANCELED = -2,
1125 ERROR_ = -1,
1126 OK = 0
1127 };
1128
1130 enum class PATH_TYPE
1131 {
1132 NONE = -1,
1133 ORIGINAL = 0,
1136 MAX
1137 };
1138
1143
1144protected:
1146 typedef b32 (*RESOURCE_FILE_TABLE_SEARCH_CALLBACK)(const GxRttiResource& resRtti, GX_CSTR resourcePath, void* pArgument);
1147
1148#if GX_DEVELOP
1150 struct GxFinalizeResourceInformation
1151 {
1152 GX_OPERATOR_NEW_DELETE_USE_ARRAY(GxAllocatorList::ALLOCATOR_TYPE::DEVELOP);
1153
1154 const GxRttiResource* _pRtti;
1155 GxString _path;
1156 };
1157
1161 static GX_CSTR BOOT_ARGUMENT_SKIP_FINALIZE;
1164 static GX_CSTR BOOT_ARGUMENT_OUTPUT_ARCHIVE_INFO;
1165#endif // GX_DEVELOP
1166
1168 //-----------------------------------------------------------
1170 //-----------------------------------------------------------
1172public:
1174 GxSysResource(void);
1176 ~GxSysResource(void) override;
1177
1179 b32 initialize(const GxClassBase* pInitialInformation = nullptr) override;
1181 void terminate(void) override;
1182
1184 //-----------------------------------------------------------
1186 //-----------------------------------------------------------
1188public:
1190 void update(void) override;
1191
1193 GxResBase* createAndLoadResource(const GxRttiResource& resRtti, GX_CSTR path, LOAD_MODE loadMode = LOAD_MODE::SYNC, void* pCreateCallbackWork = nullptr);
1195 GxResBase* createAndLoadBackground(const GxRttiResource& resRtti, GX_CSTR path, void* pCreateCallbackWork = nullptr);
1197 GxResBase* createAndSetResource(const GxRttiResource& resRtti, GX_CSTR path, GxMemoryStream& stream, LOAD_MODE loadMode = LOAD_MODE::SYNC, void* pCreateCallbackWork = nullptr);
1199 GxResBase* createResource(const GxRttiResource& resRtti, GX_CSTR path, void* pCreateCallbackWork = nullptr);
1201 GxResBase* createResource(const GxRttiResource& resRtti, GX_CSTR path, b32& isNewCreate, void* pCreateCallbackWork = nullptr);
1202#if GX_DEVELOP
1204 GxResBase* createAndLoadResource(GX_CSTR fullPath, LOAD_MODE loadMode = LOAD_MODE::SYNC, b32 forceFinalized = false);
1206 b32 isReference(const GxRttiResource& resRtti, GX_CSTR path, GX_CSTR searchPath);
1207#endif // GX_DEVELOP
1209 GX_FORCE_INLINE GxSysResource::LOAD_RESULT loadResourceFromStreamLoopHole(GxResBase& resource, GxStream& stream, u32 size){ return loadResourceFromStream(resource, stream, size); }
1213 GxResBase* createAndLoadResource(const GxRttiResource& resRtti, GX_CSTR fullPath, u64 resId, LOAD_MODE loadMode = LOAD_MODE::SYNC);
1214
1216 void* loadFileImage(const GxRttiResource& resRtti, GX_CSTR path, u32& dataSize, GxAllocatorList::ALLOCATOR_TYPE allocator = GxAllocatorList::ALLOCATOR_TYPE::TEMPORARY);
1218 GxResBase* createAndSetResourceFromFileImage(const GxRttiResource& resRtti, GX_CSTR path, void* pLoadBuffer, u32 dataSize, LOAD_MODE loadMode = LOAD_MODE::SYNC, void* pCreateCallbackWork = nullptr);
1219
1220 //---- 非同期
1221
1227 void cancelResource(GxResBase* pResource);
1229 GX_FORCE_INLINE void lockAsyncLoad(void) { getResourceAsyncLoadManager()->lockAsyncLoad(); }
1232
1233
1235 b32 reloadResource(GxResBase* pResource, LOAD_MODE loadMode = LOAD_MODE::SYNC);
1236
1238 void registerResource(GxResBase* pResource);
1240 void unregisterResource(GxResBase* pResource);
1241
1243 void stopAsyncLoadSystem(void);
1244
1252 b32 openArchiveFile(GX_CSTR base, const GxResourceFileTable* pResourceFileTable, s16 archiveId);
1254 constexpr u32 getArchiveFileMax(void) const { return _resourceArchiveManager.getArchiveFileMax(); }
1256 GX_FORCE_INLINE b32 isArchiveOpened(s16 archiveId) const { return _resourceArchiveManager.isArchiveOpened(archiveId); }
1263 void initializeArchiveSearchOrder(const s16* pArchiveSearchOrderTable = nullptr);
1264
1265public:
1266#if GX_DEVELOP
1268 b32 createFinalizeResourceFileAsync(const GxResourceFileTable* pResourceFileTable, const GxResourceFileFilter* pFileFilterTable, const GxRttiResource* pRttiTarget = nullptr, b32 isFinalizeForce = false);
1270 b32 createMasterResourceFile(const GxResourceFileTable* pResourceFileTable, const GxResourceFileFilter* pFileFilterTable, b32 isCheckOriginalRootPath = true, b32 isCheckArchiveFileSize = true);
1271
1273 b32 createConfigResource(GxResBase& resource);
1274
1276 b32 isUpdateFinalizeResource(const GxRttiResource& resRtti, GX_CSTR resourcePath) const;
1277
1279 b32 save(GxResBase& resource, const GxRttiResource* pRttiResource = nullptr);
1281 b32 convert(GxResBase& resource, const GxRttiResource* pTargetRttiResource);
1283 b32 isModifiedFile(const GxResBase& resource);
1285 b32 getResourceTableProperty(GxClassBase*& pOwner, GxProperty*& pProperty);
1286
1287
1289 GX_FORCE_INLINE u64 getLastWriteTime(const GxResBase& resource) const;
1291 GX_FORCE_INLINE u64 getLastWriteTime(const GxRttiResource& resRtti, GX_CSTR resourcePath) const;
1293 GX_FORCE_INLINE b32 isOutputMultiPlatformArchiveTable(void) const { return _outputMultiPlatformArchiveTable; }
1295 GX_FORCE_INLINE b32 isDisablePropertyChangedWarning(void) const { return _disablePropertyChangedWarning; }
1297 constexpr u32 getVertexHashMaxNum(void) const { return _vertexHashMaxNum; }
1300 GX_FORCE_INLINE virtual GxResBase* useTextureAsDummyWhenFileNotFound(const GxRttiResource& /*resRtti*/, GX_CSTR /*path*/) { return nullptr; };
1301#endif // GX_DEVELOP
1302
1306 void setOnTerminateCallback(void (*func)(u32));
1307
1308protected:
1309 //---- static関数
1310
1312 static void analyseResourcePath(GX_CSTR path, PATH_TYPE* pType, s32* pRootPosition, u32* pRootLength);
1313
1314 //---- システム初期化
1315
1317 b32 initializeResourceRootPath(const GxResourceInitialInformation* pInitialInformation = nullptr);
1318#if GX_DEVELOP
1320 b32 isValidRttiResourceTree(void) const;
1322 void normalizeConfigRttiResourceTree(void);
1323#endif // GX_DEVELOP
1324
1326 GxResBase* createResourceRoutine(const GxRttiResource& resRtti, GX_CSTR original, GX_CSTR replace, b32* pIsNewCreate, void* pCreateCallbackWork);
1328 LOAD_RESULT loadResourceSync(GxResBase& resource, void* pCreateCallbackWork = nullptr);
1330 LOAD_RESULT loadResourceAsync(GxResBase& resource, void* pCreateCallbackWork = nullptr);
1332 LOAD_RESULT loadResourceFromStream(GxResBase& resource, GxStream& stream, u32 size = 0);
1333
1335 LOAD_RESULT loadResourceFileAsync(GxResBase& resource, GxFile& file, u32 offset, u32 size);
1337 static void callbackLoadStart(void* pUser, GX_HANDLE requestHandle);
1338
1340 // 読み込み開始前なら ASYNC_STATE_LOADING を設定して true を返す
1341 // 開始後なら読み込み終わるまで待ち false を返す。
1342 b32 waitForLoadComplete(GxResBase* pResource);
1343
1345 void getLoadPath(GxString& dst, const GxRttiResource& resRtti, GX_CSTR resourcePath);
1347 void getFinalizeResourcePath(GxString& dst, const GxResBase& resource);
1348
1349#if GX_DEVELOP
1350public:
1352 const GxRttiResource* getFinalizeResource(const GxRttiResource& resRtti) const;
1353protected:
1355 b32 isSkipFinalizeBootArgument(const GxRttiResource& resRtti, GX_CSTR resourcePath) const;
1357 b32 isUpdateFinalizeResourceCheckTimestamp(const GxRttiResource& resRtti, GX_CSTR resourcePath) const;
1359 b32 isUpdateFinalizeResourceCheckInFile(const GxRttiResource& resRtti, GX_CSTR resourcePath) const;
1361 b32 updateFinalizeResource(const GxRttiResource& resRtti, GX_CSTR resourcePath, void* pCreateCallbackWork = nullptr);
1362
1364 b32 createResourceDirectory(const GxRttiResource& resRtti, GX_CSTR resourcePath);
1366 b32 createMasterDirectory(const GxRttiResource& resRtti, GX_CSTR resourcePath);
1367
1369 b32 saveRawResourceFile(const GxResBase& resource, const GxRttiResource& resRtti);
1371 b32 saveNormalResourceFile(GxResBase& resource, const GxRttiResource& resRtti);
1373 u64 getSaveNormalResourceUpdateTime(const GxResBase& resource, const GxRttiResource& resRtti);
1374
1376 static s32 _archiveErrorFileIndex;
1378 // もしくはisExistFileFromMasterResourceでチェックした場合で、
1379 // ファイルが見つからなかった場合のエラー詳細をCSVで出力する
1380 static void saveArchiveAccessError(const GxRttiResource& resRtti, GX_CSTR resourcePath, s16 archiveId, u32 methodtype);
1381
1383 void sortArchiveTable(GxArray& archiveFileList, GX_ARCHIVE_PACKAGEMODE mode);
1384
1386 void outputRttiInfo(const GxRttiResource& resRtti, GxFile& dstFile);
1388 void outputResourceTable(const GxResourceFileTable* pTable, const GxResourceFileFilter* pFilter, GxFile& dstFile);
1389#endif // GX_DEVELOP
1390public:
1392 b32 searchResourceFileTableTargetLoop(GX_CSTR rootPath, const GxResourceFileTable& fileTableElement, const GxResourceFileFilter* pFileFilterTable, const GxRttiResource* pRttiTarget, RESOURCE_FILE_TABLE_SEARCH_CALLBACK function, void* pArgument);
1393protected:
1395 b32 isSkipSearchFileTableTargetName(GX_CSTR fileName, const GxResourceFileFilter* pFileFilterTable = nullptr);
1396
1397#if GX_DEVELOP
1399 static b32 callbackResourceFileTableCopyMasterData(const GxRttiResource& resRtti, GX_CSTR resourcePath, void* pArgument);
1401 static b32 callbackResourceFileTableFinalize(const GxRttiResource& resRtti, GX_CSTR resourcePath, void* pArgument);
1403 static b32 callbackResourceFileTableAddArchiveList(const GxRttiResource& resRtti, GX_CSTR resourcePath, void* pArgument);
1404#endif // GX_DEVELOP
1405
1407 //-----------------------------------------------------------
1409 //-----------------------------------------------------------
1411public:
1413 constexpr GX_CSTR getResourceRootPath(void) const { return _resourceRootPath.getString(); }
1415 void setResourceRootPath(GX_CSTR path = nullptr);
1416
1418 constexpr GX_CSTR getOriginalRootPath(void) const { return _originalRootPath.getString(); }
1420 constexpr GX_CSTR getFinalizedCommonRootPath(void) const { return _finalizedCommonRootPath.getString(); }
1422 constexpr GX_CSTR getFinalizedNativeRootPath(void) const { return _finalizedNativeRootPath.getString(); }
1424 constexpr GX_CSTR getMasterRootPath(void) const { return _masterRootPath.getString(); }
1425
1427 static b32 isOriginalPath(GX_CSTR path);
1429 static b32 isFinalizedCommonPath(GX_CSTR path);
1431 static b32 isFinalizedNativePath(GX_CSTR path);
1432#if GX_DEVELOP
1434 static void getNewFileName(GX_CSTR srcPath, GX_CSTR baseFileName, GX_CSTR fileExtension, GxString& newFileName);
1436 static void getNewFolderName(GX_CSTR srcPath, GX_CSTR oldFolderName, GxString& newFolderName);
1438 static b32 isDevelopPath(GX_CSTR path);
1439#endif //GX_DEVELOP
1440
1442 static void getOriginalPath(GxString& dst, GX_CSTR path);
1444 static void getFinalizedCommonPath(GxString& dst, GX_CSTR path);
1446 static void getFinalizedNativePath(GxString& dst, GX_CSTR path);
1448 static void getResourcePath(GxString& dst, GX_CSTR path, b32 isDeleteExtension = true);
1450 static u64 getResourceId(const GxRttiResource& resRtti, GX_CSTR resourcePath);
1451#if GX_DEVELOP
1453 static void getResourcePathWithRootName(GxString& dst, GX_CSTR path, b32 isDeleteExtension = true);
1455 void getTemporaryPath(GxString& dst);
1456#endif // GX_DEVELOP
1458 virtual void getReplaceOriginalPath(GxString& dstPath, const GxRttiResource& /*resRtti*/, GX_CSTR srcPath);
1460 virtual void getReplacePath(GxString& dstPath, const GxRttiResource& /*resRtti*/, GX_CSTR srcPath) const;
1462 GX_FORCE_INLINE virtual b32 isRegisteredNonReplacedPath(GX_CSTR& /*original*/, GX_CSTR& /*replaced*/) const { return false; }
1463
1465 GX_CSTR getRootPath(const GxResBase& resource) const;
1467 GX_CSTR getRootPath(const GxRttiResource& resRtti) const;
1469 void getFullPath(GxString& dst, const GxResBase& resource) const;
1471 void getFullPath(GxString& dst, const GxRttiResource& resRtti, GX_CSTR resourcePath) const;
1473 void getConvertPath(GxString& dst, const GxResBase& resource) const;
1475 void getConvertPath(GxString& dst, const GxRttiResource& resRtti, GX_CSTR resourcePath) const;
1477 void getMasterPath(GxString& dst, const GxResBase& resource) const;
1479 void getMasterPath(GxString& dst, const GxRttiResource& resRtti, GX_CSTR resourcePath) const;
1480
1482 const GxResourceFileTable* getResourceFileTable(void) const;
1484 const GxResourceFileTable* getResourceFileTable(const GxResBase& resource) const;
1486 const GxResourceFileTable* getResourceFileTable(const GX_CSTR srcResourcePath) const;
1492 const b32 getDisableFinalizeIgnoreOriginalFlag(void) const;
1494 const b32 getOptimizeVertexCache(void) const;
1496 const b32 getSeparateShaderConfig(void) const;
1498 const f32 getOptimizeTBNRemakeRange(void) const;
1500 const b32 getOptimizeAsyncloadThreadAssignment(void) const;
1501
1503 GX_FORCE_INLINE b32 isEmptyAsyncLoader(void) { return getResourceAsyncLoadManager()->isEmpty(); }
1506
1508 constexpr u32 getMotionSequenceLineMax(void) const { return _motionSequenceLineMax; }
1509
1510#if GX_DEVELOP
1512 GX_CSTR getAsyncLoadString(u32 multiIndex = 0) const;
1514 GX_CSTR getAsyncLoadClassString(u32 multiIndex = 0) const;
1516 GX_CSTR getBackgroundLoadString(u32 multiIndex = 0) const;
1518 GX_CSTR getBackgroundLoadClassString(u32 multiIndex = 0) const;
1520 u32 getAsyncLoadMultiCount(void) const;
1522 u32 getBackgroundLoadMultiCount(void) const;
1524 GX_FORCE_INLINE b32 isBootRom(void) const { return _isBootRom; }
1526 GX_FORCE_INLINE b32 isRunningFinalizeAll(void) const { return (_allFinalizeTargetList.getCount() > 0); }
1528 constexpr u32 getFinalizeAllCount(void) const { return _allFinalizeTargetList.getCount(); }
1530 constexpr u32 getFinalizeAllIndex(void) const { return _allFinalizeTargetIndex; }
1532 constexpr GX_CSTR getFinalizeAllString(void) const { return _allFinalizeString; }
1533#if defined(_WINDOWS) && GX_DEVELOP
1535 GX_FORCE_INLINE b32 isFinalizeEndian(GX_ENDIAN endian) const { return getEndian(_finalizePlatform) == endian; }
1537 GX_FORCE_INLINE void setFinalizePlatform(GX_PLATFORM platform) { _finalizePlatform = platform; setResourceRootPath(); }
1538#endif //_WINDOWS && GX_DEVELOP
1539
1541 GX_FORCE_INLINE void setTextureAsDummyWhenFileNotFound(b32 enable) { _useDummyTextureWhenFileNotFound = enable; }
1543 GX_FORCE_INLINE b32 isTextureAsDummyWhenFileNotFound(void) const { return _useDummyTextureWhenFileNotFound; }
1544#endif // GX_DEVELOP
1545
1547 GX_FORCE_INLINE u32 getResourceNum(void);
1549 GX_FORCE_INLINE GxResBase* getResource(u32 index);
1551 GX_FORCE_INLINE b32 isExistFile(const GxResBase& resource) const;
1553 GX_FORCE_INLINE b32 isExistFile(const GxRttiResource& resRtti, GX_CSTR resourcePath) const;
1555 GX_FORCE_INLINE b32 isExistResource(const GxRttiResource& resRtti, GX_CSTR resourcePath);
1557 GX_FORCE_INLINE void lockFromOutside(void);
1559 GX_FORCE_INLINE void unlockFromOutside(void);
1561 b32 isExistFileFromMasterResource(const GxRttiResource& resRtti, GX_CSTR resourcePath, b32 isCheckArchiveOnly = false, s16 archiveID = -1)const;
1562
1565
1567 //-----------------------------------------------------------
1569 //-----------------------------------------------------------
1571protected:
1578
1588
1594
1598
1600#if GX_DEVELOP
1601 b32 _isBootRom;
1602 GxArray _allFinalizeTargetList;
1603 u32 _allFinalizeTargetIndex;
1604 GX_CSTR _allFinalizeString;
1605 b32 _isAllFinalizeForce;
1606 b32 _isSkipFinalize;
1607 GxString _skipFinalizeTime;
1608#if defined(_WINDOWS) && GX_DEVELOP
1609 GX_PLATFORM _finalizePlatform;
1610#endif //_WINDOWS && GX_DEVELOP
1611 b32 _disableSaveArchiveErr;
1612 b32 _outputMultiPlatformArchiveTable;
1613 b32 _disablePropertyChangedWarning;
1614 GX_ARCHIVE_PACKAGEMODE _archivePackMode;
1615 b32 _useDummyTextureWhenFileNotFound;
1616 b32 _disableIsExistMasterResErrMessage;
1617 u32 _vertexHashMaxNum;
1618 volatile s32 _temporaryFileIndex;
1619#endif //GX_DEVELOP
1620
1622};
1623
1624// アクセスインターフェース
1625GX_FORCE_INLINE GxSysResource* getGxSysResource(void){ return GxSysResource::getSingletonPointer(); }
1626
1627//---------------------------------------------------------------------------
1628// 外部からのSysResourceのロック
1629//---------------------------------------------------------------------------
1630GX_FORCE_INLINE void GxSysResource::lockFromOutside(void)
1631{
1632 this->lock();
1633}
1634
1635//---------------------------------------------------------------------------
1636// 外部からのSysResourceのアンロック
1637//---------------------------------------------------------------------------
1638GX_FORCE_INLINE void GxSysResource::unlockFromOutside(void)
1639{
1640 this->unlock();
1641}
1642
1643//---------------------------------------------------------------------------
1644// リソースファイルテーブルポインタ取得
1646//---------------------------------------------------------------------------
1648{
1649 return _pResourceFileTable;
1650}
1651
1652//---------------------------------------------------------------------------
1653// リソースフィルタテーブルポインタ取得
1655//---------------------------------------------------------------------------
1657{
1658 return _pResourceFileFilter;
1659}
1660
1661//---------------------------------------------------------------------------
1662// オリジナル参照とタイムスタンプ比較を無視して、強制的にファイナライズを無効化するかどうか
1664//---------------------------------------------------------------------------
1666{
1668}
1669
1670//---------------------------------------------------------------------------
1671// 頂点キャッシュ最適化のためのインデックスソートを行うかどうかを取得
1673//---------------------------------------------------------------------------
1674GX_FORCE_INLINE const b32 GxSysResource::getOptimizeVertexCache(void) const
1675{
1676 return _optimizeVertexCache;
1677}
1678
1679//---------------------------------------------------------------------------
1680// シェーダコンフィグファイルを各プラットフォームごとに変えるかどうか
1682//---------------------------------------------------------------------------
1683GX_FORCE_INLINE const b32 GxSysResource::getSeparateShaderConfig(void) const
1684{
1685 return _separeteShaderConfig;
1686}
1687
1688//---------------------------------------------------------------------------
1689// モデルをファイナライズするときのTBNの再計算で利用する閾値を取得
1691//---------------------------------------------------------------------------
1692GX_FORCE_INLINE const f32 GxSysResource::getOptimizeTBNRemakeRange(void) const
1693{
1695}
1696
1697//---------------------------------------------------------------------------
1698// 非同期ロード時にリソースのスレッド分配を単一キューから振り分けるようにするかどうか
1700//---------------------------------------------------------------------------
1702{
1704}
1705
1706#if GX_DEVELOP
1707//---------------------------------------------------------------------------
1708// 非同期ロード中文字列取得
1711//---------------------------------------------------------------------------
1712GX_FORCE_INLINE GX_CSTR GxSysResource::getAsyncLoadString(u32 multiIndex) const
1713{
1714 return getResourceAsyncLoadManager()->getAsyncLoadString(multiIndex);
1715}
1716
1717//---------------------------------------------------------------------------
1718// 裏読みロード中文字列取得
1721//---------------------------------------------------------------------------
1722GX_FORCE_INLINE GX_CSTR GxSysResource::getBackgroundLoadString(u32 multiIndex) const
1723{
1724 return getResourceBackgroundLoadManager()->getAsyncLoadString(multiIndex);
1725}
1726
1727//---------------------------------------------------------------------------
1728// 非同期ロード中文字列取得
1731//---------------------------------------------------------------------------
1732GX_FORCE_INLINE GX_CSTR GxSysResource::getAsyncLoadClassString(u32 multiIndex) const
1733{
1734 return getResourceAsyncLoadManager()->getAsyncLoadClassString(multiIndex);
1735}
1736//---------------------------------------------------------------------------
1737// 裏読みロード中文字列取得
1740//---------------------------------------------------------------------------
1741GX_FORCE_INLINE GX_CSTR GxSysResource::getBackgroundLoadClassString(u32 multiIndex) const
1742{
1743 return getResourceBackgroundLoadManager()->getAsyncLoadClassString(multiIndex);
1744}
1745//---------------------------------------------------------------------------
1746// 非同期ロード並列数を取得
1748//---------------------------------------------------------------------------
1749GX_FORCE_INLINE u32 GxSysResource::getAsyncLoadMultiCount(void) const
1750{
1752}
1753
1754//---------------------------------------------------------------------------
1755// 裏読みロード並列数を取得
1757//---------------------------------------------------------------------------
1758GX_FORCE_INLINE u32 GxSysResource::getBackgroundLoadMultiCount(void) const
1759{
1761}
1762
1763#endif // GX_DEVELOP
1764
1765//---------------------------------------------------------------------------
1766// 登録リソース数取得
1769//---------------------------------------------------------------------------
1770GX_FORCE_INLINE u32 GxSysResource::getResourceNum(void)
1771{
1772 lock();
1774 unlock();
1775 return num;
1776}
1777
1778//---------------------------------------------------------------------------
1779// 登録済みリソース取得 (インデックス指定)
1783//---------------------------------------------------------------------------
1784GX_FORCE_INLINE GxResBase* GxSysResource::getResource(u32 index)
1785{
1786 lock();
1788 unlock();
1789 return ret;
1790}
1791
1792//---------------------------------------------------------------------------
1793// リソースファイル存在チェック (リソース指定)
1796//---------------------------------------------------------------------------
1797GX_FORCE_INLINE b32 GxSysResource::isExistFile(const GxResBase& resource) const
1798{
1799 return isExistFile(resource.getRtti(), resource.getPath());
1800}
1801
1802//---------------------------------------------------------------------------
1803// リソースファイル存在チェック (リソースRtti + リソースパス指定)
1807//---------------------------------------------------------------------------
1808GX_FORCE_INLINE b32 GxSysResource::isExistFile(const GxRttiResource& resRtti, GX_CSTR resourcePath) const
1809{
1810 GxString fullPath;
1811 GxString replacePath;
1812 getReplacePath(replacePath, resRtti, resourcePath);
1813 getFullPath(fullPath, resRtti, replacePath.getString());
1814 return GxFile::isExist(fullPath.getString());
1815}
1816
1817//---------------------------------------------------------------------------
1818// メモリ上のリソースファイル存在チェック (リソースRtti + リソースパス指定)
1822//---------------------------------------------------------------------------
1823GX_FORCE_INLINE b32 GxSysResource::isExistResource(const GxRttiResource& resRtti, GX_CSTR resourcePath)
1824{
1825 lock();
1826 GxString realResourcePath;
1827 getResourcePath(realResourcePath, resourcePath);
1828 u64 resourceId = getResourceId(resRtti, realResourcePath.getString());
1829 GxResBase* pResource = _resourceRegisterManager.findResource(resourceId);
1830 unlock();
1831 return (b32)(pResource != nullptr);
1832}
1833
1834#if GX_DEVELOP
1835//---------------------------------------------------------------------------
1836// 最終更新日時の取得 (リソース指定)
1839//---------------------------------------------------------------------------
1840GX_FORCE_INLINE u64 GxSysResource::getLastWriteTime(const GxResBase& resource) const
1841{
1842 return getLastWriteTime(resource.getRtti(), resource.getPath());
1843}
1844
1845//---------------------------------------------------------------------------
1846// 最終更新日時の取得 (Rtti + リソースパス指定)
1850//---------------------------------------------------------------------------
1851GX_FORCE_INLINE u64 GxSysResource::getLastWriteTime(const GxRttiResource& resRtti, GX_CSTR resourcePath) const
1852{
1853 GxString fullPath;
1854 getFullPath(fullPath, resRtti, resourcePath);
1855 return GxFile::getLastWriteTime(fullPath.getString());
1856}
1857#endif // GX_DEVELOP
1858
1859GX_CORE_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
GX_ENDIAN
エンディアン定義
Definition GxDefine.h:220
@ MAX
定義数
void GxTypedObject
その他
Definition GxDefine.h:213
u32 GX_HANDLE
ハンドル
Definition GxDefine.h:214
pThis threadMain(pThis->_pIn)
u32(* GX_SYSRESOURCE_ERROR_FUNCTION)(GX_CSTR message, GX_CSTR filePath, u32 rttiId, u32 value)
Definition GxSysResource.h:87
GX_ARCHIVE_PACKAGEMODE
アーカイブ用のパッケージング方式用列挙型
Definition GxSysResource.h:94
@ UP64
リソースIDを元にした昇順
@ DEFAULT
ソートせずに名前順(デフォルト)
@ DOWN64
リソースIDを元にした降順
@ DOWN
リソースIDの下位32bitを元にした降順
@ UP
リソースIDの下位32bitを元にした昇順
ALLOCATOR_TYPE
アロケータ定義
Definition GxAllocator.h:355
配列クラス
Definition GxArray.h:18
オブジェクト基底クラス
Definition GxBase.h:88
virtual GxRtti & getRtti(void) const =0
Rttiの取得
クリティカルセクションクラス
Definition GxThread.h:20
リソースGUIDリストアクセスクラス
Definition GxDataResourceGuid.h:18
イベントクラス
Definition GxThread.h:132
b32 setEvent(void)
イベントを設定
Definition GxThread.cpp:268
b32 waitEvent(s32 milliSecond=-1)
イベント待機
Definition GxThread.cpp:291
ファイル管理クラス
Definition GxFile.h:157
static u64 getLastWriteTime(GX_CSTR path)
最終更新日時の取得
Definition GxFile.cpp:2058
static b32 isExist(GX_CSTR path)
ファイル存在チェック
Definition GxFile.cpp:1922
static b32 isDirectoryPath(GX_CSTR path, GX_CCHAR separator=DEFAULT_SEPARATOR)
ディレクトリパス判定
Definition GxFile.cpp:2226
ファイルストリームクラス
Definition GxStream.h:124
JSON解析用ノード
Definition GxJson.h:108
キュー (ロック不要)
Definition GxLockFreeQueue.h:19
static constexpr u32 VALUE_32
32
Definition GxMath.h:124
static constexpr u32 VALUE_256
256
Definition GxMath.h:127
static constexpr u32 VALUE_8
8
Definition GxMath.h:122
メモリストリームクラス
Definition GxStream.h:248
プロパティクラス
Definition GxProperty.h:48
リソース基底クラス
Definition GxResBase.h:23
constexpr GX_CSTR getPath(void) const
パス取得
Definition GxResBase.h:171
セルシートリソースクラス
Definition GxResCellSheet.h:19
初期化クラス
Definition GxSysResource.h:115
u32 _archiveFileMax
アーカイブファイルの最大数(デフォルトは16 注意:オープンしたままなのでシステム上限に配慮したサイズ設定すること)
Definition GxSysResource.h:225
b32 _optimizeVertexCache
頂点キャッシュ最適化のためのインデックスソートを行う
Definition GxSysResource.h:206
GxResourceFileFilter * _pResourceFileFilterArray
リソースファイルフィルタ配列
Definition GxSysResource.h:202
b32 _enableExistOriginalData
リソースの読み込み時にオリジナルデータの有無をチェックするか否か(trueでチェックを行う)
Definition GxSysResource.h:204
u32 _fileDecodeChunkSizeMax
圧縮リソースファイルの分割読み最大バッファサイズ。0 指定は分割しない。64k 以上
Definition GxSysResource.h:207
b32 _separeteShaderConfig
各プラットフォームでシェーダコンフィグファイルを分ける
Definition GxSysResource.h:224
GxResourceInitialInformation(void)
コンストラクタ
Definition GxSysResource.h:142
u32 _streamReadCacheBufferSize
GxStream ファイル読み込みキャッシュサイズ。64k 以下はデフォルトとして 64k を採用。
Definition GxSysResource.h:208
s16 * _pArchiveSearchOrderArray
リソースファイルテーブルアーカイブID検索順配列
Definition GxSysResource.h:203
s32 _asyncLoadCpuIndex
非同期ロードスレッドを実行する CPU コア番号 (デフォルトは -1 で自動)
Definition GxSysResource.h:212
GX_SYSRESOURCE_ERROR_FUNCTION _pUserErrorFunction
ユーザー定義のエラーコールバック
Definition GxSysResource.h:217
u32 _streamWriteCacheBufferSize
GxStream ファイル書き込みキャッシュサイズ。64k 以下はデフォルトとして 64k を採用。
Definition GxSysResource.h:209
static constexpr u32 ASYNC_REQUEST_QUEUE_DEFAULT
リクエストキュー最大個数ディフォルト値
Definition GxSysResource.h:133
u32 _archiveLocalThreadFileMax
別スレッドからのアーカイブ同時アクセス作業用ファイル数(デフォルトは16)
Definition GxSysResource.h:226
u32 _asyncRequestQueueMax
非同期リクエストキューMAX
Definition GxSysResource.h:216
u32 _asyncLoadMultiCount
非同期ロードスレッドの並列化の数(最大8)
Definition GxSysResource.h:211
u32 _motionSequenceLineMax
モーションシーケンスのラインの最大数
Definition GxSysResource.h:215
b32 _disableFinalizeIgnoreOriginal
オリジナル参照とタイムスタンプ比較を無視して、強制的にファイナライズを無効化。(すでにファイナライズがある前提)
Definition GxSysResource.h:205
u32 _asyncLoadThreadStackSize
非同期ロードスレッドのスタックサイズ
Definition GxSysResource.h:210
u32 _backgroundLoadMultiCount
裏読みロードスレッドの並列化の数(最大8)
Definition GxSysResource.h:213
GxResourceFileTable * _pResourceFileTableArray
リソースファイルテーブル配列
Definition GxSysResource.h:201
void loadJson(const GxJson::GxJsonNode &jsonNode)
JSONから読み込み
Definition GxSysResource.cpp:125
f32 _optimizeTBNRemakeRange
モデルをファイナライズするときのTBNの再計算で利用する閾値(デフォルトは0.1f)
Definition GxSysResource.h:214
b32 _optimizeAsyncloadThreadAssignment
非同期ロード時にリソースのスレッド分配をより効率化する
Definition GxSysResource.h:227
実行時型情報クラス
Definition GxRtti.h:154
リソース実行時型情報クラス
Definition GxRttiResource.h:188
ストリーム基礎クラス
Definition GxStream.h:20
システム基底クラス
Definition GxSysBase.h:18
void unlock(LOCK_TYPE type=LOCK_TYPE::THREAD_SAFE)
クリティカルセクションを出る
Definition GxSysBase.cpp:123
void lock(LOCK_TYPE type=LOCK_TYPE::THREAD_SAFE)
クリティカルセクションに入る
Definition GxSysBase.cpp:94
リソースファイルアーカイブ管理クラス
Definition GxSysResource.h:908
void freeLocalThreadFile(s16 archiveId, GxFile *lsFile)
getLocalThreadFile()で取得したファイルをシステムに返す
Definition GxSysResource.cpp:2185
constexpr u32 getArchiveFileMax(void) const
アーカイブファイルが使用できる最大数。
Definition GxSysResource.h:1052
GxSysResourceArchive(void)
コンストラクタ
Definition GxSysResource.cpp:1422
b32 isArchiveOpened(s16 archiveId) const
アーカイブファイルがオープンしているか調べる
Definition GxSysResource.cpp:2229
void closeArchiveFile(s16 archiveId)
アーカイブファイルクローズ
Definition GxSysResource.cpp:1712
GxFile * getFile(s16 archiveId)
アーカイブファイル取得
Definition GxSysResource.cpp:2044
b32 initialize(u32 archiveFileMax, u32 archiveLocalThreadFileMax, const GxResourceFileTable *pResourceFileTable=nullptr, const s16 *pArchiveSearchOrderTable=nullptr)
初期化
Definition GxSysResource.cpp:1450
~GxSysResourceArchive(void) override
デストラクタ
Definition GxSysResource.cpp:1437
constexpr void update(void)
実行
Definition GxSysResource.h:997
void terminate(void)
終了
Definition GxSysResource.cpp:1523
const GxArchiveOffsetInformation * getOffsetInformation(s16 archiveId, u32 archiveIndex) const
アーカイブファイルオフセット情報取得
Definition GxSysResource.cpp:2025
void initializeArchiveSearchOrder(const s16 *pArchiveSearchOrderTable=nullptr)
アーカイブ検索順テーブルの作成。
Definition GxSysResource.cpp:1737
GxFile * getLocalThreadFile(s16 archiveId)
Definition GxSysResource.cpp:2095
GxFileStream * getLocalThreadFileStream(s16 archiveId, u32 archiveIndex, GxFile **retFile)
Definition GxSysResource.cpp:2065
static b32 readArchiveOffsetTable(GxStream &srcStream, GxArchiveOffsetInformation *pDstOffsetTable, u32 archiveCount)
アーカイブオフセットテーブル読み込み
Definition GxSysResource.cpp:2394
static constexpr u32 ARCHIVE_FILE_FOURCC
アーカイブファイルFOURCC
Definition GxSysResource.h:921
static void getArchiveIndexResourcePath(GxString &dst, s16 archiveId)
アーカイブファイル内インデックスリソースパス取得
Definition GxSysResource.cpp:2319
static b32 readArchiveHeader(GxStream &srcStream, GxArchiveHeader &dstHeader)
アーカイブヘッダー読み込み
Definition GxSysResource.cpp:2359
b32 openArchiveFile(GX_CSTR basePath, const GxResourceFileTable *pResourceFileTable, s16 archiveId)
アーカイブファイルオープン
Definition GxSysResource.cpp:1603
const GxResourceFileTable * getResourceFileTable(const GX_CSTR srcResourcePath) const
リソースパスからファイルテーブルを取得する
Definition GxSysResource.cpp:2244
void openAllArchiveFiles(GX_CSTR basePath, const GxResourceFileTable *pResourceFileTable)
アーカイブファイル群オープン(初期化時のみ内部使用)
Definition GxSysResource.cpp:1588
static void getArchiveFilePath(GxString &dst, s16 archiveId, GX_CSTR basePath)
アーカイブファイルパス取得
Definition GxSysResource.cpp:2289
constexpr u32 getArchiveLocalThreadFileMax(void) const
別スレッド同時アクセス作業用ファイル最大数
Definition GxSysResource.h:1054
static constexpr u32 FILE_ARCHIVE_SIZE_MAX
アーカイブファイル最大サイズ (4GB-1)
Definition GxSysResource.h:923
u32 getIndex(s16 archiveId, u64 resourceId) const
アーカイブファイル内インデックス取得
Definition GxSysResource.cpp:1995
非同期ロードスレッドクラス
Definition GxSysResource.h:517
GX_FORCE_INLINE b32 setStartEvent(void)
開始イベント開始
Definition GxSysResource.h:549
GxCriticalSection _pause
一時停止用
Definition GxSysResource.h:557
GX_FORCE_INLINE b32 waitStartEvent(s32 milliSecond=WAIT_INFINITY)
開始イベント待ち
Definition GxSysResource.h:547
static constexpr s32 WAIT_INFINITY
イベント待ち無限設定値
Definition GxSysResource.h:527
void threadMain(void *pArgument) override
スレッドメイン
Definition GxSysResource.cpp:809
GxEvent _startEvent
開始イベント
Definition GxSysResource.h:560
リソース非同期読み込み要求管理基本クラス
Definition GxSysResource.h:413
virtual b32 initialize(u32, u32=GX_ASYNC_LOAD_THREAD_STACKSIZE, u32=1, s32=GX_ASYNC_LOAD_THREAD_CPU_INDEX)
初期化
Definition GxSysResource.h:436
void setOnTerminateCallback(void(*pFunction)(u32))
Definition GxSysResource.cpp:637
GxSysResourceAsyncLoadBase(void)
コンストラクタ
Definition GxSysResource.cpp:597
virtual GX_FORCE_INLINE u32 getMultiCount(void) const
非同期読み込み並列化の数
Definition GxSysResource.h:468
virtual GX_FORCE_INLINE void unlockAsyncLoad(void)
非同期読み込みロック解除(必ず lockAsyncLoad() と対に使用すること)
Definition GxSysResource.h:466
~GxSysResourceAsyncLoadBase(void) override
デストラクタ
Definition GxSysResource.h:433
virtual GX_FORCE_INLINE void lockAsyncLoad(void)
非同期読み込みロック(読み込み中のファイルは終わるまでブロック)
Definition GxSysResource.h:464
virtual GX_FORCE_INLINE void clear(void)
クリア
Definition GxSysResource.h:453
virtual void terminate(void)
終了
Definition GxSysResource.h:442
virtual GX_FORCE_INLINE b32 request(GxResBase *)
リクエスト
Definition GxSysResource.h:457
virtual GX_FORCE_INLINE void update(void)
更新
Definition GxSysResource.h:451
void loadAsync(void *pObject)
非同期読み込みジョブ
Definition GxSysResource.cpp:606
virtual GX_FORCE_INLINE b32 isEmpty(void)
リクエストキューが空かどうか
Definition GxSysResource.h:455
リソース非同期読み込み要求管理クラス
Definition GxSysResource.h:503
b32 request(GxResBase *pResource) override
リクエスト
Definition GxSysResource.cpp:789
b32 initialize(u32 queueMax, u32 asyncLoadThreadStackSize=GX_ASYNC_LOAD_THREAD_STACKSIZE, u32 multiCount=1, s32 cpuIndex=GX_ASYNC_LOAD_THREAD_CPU_INDEX) override
初期化
Definition GxSysResource.cpp:680
GxSysResourceAsyncLoad(void)
コンストラクタ
Definition GxSysResource.cpp:654
~GxSysResourceAsyncLoad(void) override
デストラクタ
Definition GxSysResource.cpp:666
void update(void) override
更新
Definition GxSysResource.cpp:728
GxLockFreeQueue< GxResBase *, GxAllocatorList::ALLOCATOR_TYPE::SYSTEM > _requestQueue
リクエストキュー
Definition GxSysResource.h:631
b32 _isStopThread
非同期ロードスレッド停止要求フラグ
Definition GxSysResource.h:633
void terminate(void) override
終了
Definition GxSysResource.cpp:706
void lockAsyncLoad(void) override
非同期読み込みロック(読み込み中のファイルは終わるまでブロック)
Definition GxSysResource.cpp:864
void unlockAsyncLoad(void) override
非同期読み込みロック解除(必ず lockAsyncLoad() と対に使用すること)
Definition GxSysResource.cpp:872
void clear(void) override
クリア
Definition GxSysResource.cpp:744
b32 isEmpty(void) override
リクエストキューが空かどうか
Definition GxSysResource.cpp:758
GxAsyncLoadThread _thread
非同期ロードスレッド
Definition GxSysResource.h:632
非同期ロードスレッドクラス
Definition GxSysResource.h:659
GxEvent _startEvent
開始イベント
Definition GxSysResource.h:705
constexpr void setMultiIndex(u32 index)
マルチインデックスを設定
Definition GxSysResource.h:695
GX_FORCE_INLINE b32 setStartEvent(void)
開始イベント開始
Definition GxSysResource.h:693
u32 _multiIndex
マルチインデックス
Definition GxSysResource.h:706
GX_FORCE_INLINE b32 waitStartEvent(s32 milliSecond=WAIT_INFINITY)
開始イベント待ち
Definition GxSysResource.h:691
GxCriticalSection _pause
一時停止用
Definition GxSysResource.h:703
リソース非同期読み込み要求管理クラス(マルチリクエスト可能版)
Definition GxSysResource.h:646
u32 _multiCount
スレッド数
Definition GxSysResource.h:785
GX_FORCE_INLINE u32 getMultiCount(void) const override
非同期読み込み並列化の数(この実装ではスレッド数)
Definition GxSysResource.h:755
static constexpr u32 MAX_MULTI_PROCESS_COUNT
最大マルチ化数
Definition GxSysResource.h:712
void lockAsyncLoad(void) override
非同期読み込みロック(読み込み中のファイルは終わるまでブロック)
Definition GxSysResource.cpp:1134
GxSysResourceAsyncLoadMulti(void)
デフォルトコンストラクタ
Definition GxSysResource.cpp:895
GxLockFreeQueue< GxResBase *, GxAllocatorList::ALLOCATOR_TYPE::SYSTEM > _requestQueueMulti[MAX_MULTI_PROCESS_COUNT]
リクエストキュー(通常処理)
Definition GxSysResource.h:781
b32 initialize(u32 queueMax, u32 asyncLoadThreadStackSize=GX_ASYNC_LOAD_THREAD_STACKSIZE, u32 multiCount=4, s32 cpuIndex=GX_ASYNC_LOAD_THREAD_CPU_INDEX) override
初期化
Definition GxSysResource.cpp:927
GxCriticalSection _requestQueueCriticalSection
クリティカルセクション
Definition GxSysResource.h:780
void terminate(void) override
終了
Definition GxSysResource.cpp:965
b32 isEmpty(void) override
リクエストキューが空かどうか(全ての読み込みスレッドのキューが空かどうか)
Definition GxSysResource.cpp:1014
void unlockAsyncLoad(void) override
非同期読み込みロック解除(必ず lockAsyncLoad() と対に使用すること)
Definition GxSysResource.cpp:1145
void clear(void) override
クリア
Definition GxSysResource.cpp:997
~GxSysResourceAsyncLoadMulti(void) override
デストラクタ
Definition GxSysResource.cpp:910
b32 _isStopThread
非同期ロードスレッド停止要求フラグ
Definition GxSysResource.h:783
u32 _currentIndexOfMulti
カレントマルチインデックス
Definition GxSysResource.h:784
b32 request(GxResBase *pResource) override
リクエスト
Definition GxSysResource.cpp:1053
GxAsyncLoadThreadMulti * _threadMulti[MAX_MULTI_PROCESS_COUNT]
非同期ロードスレッド
Definition GxSysResource.h:782
非同期ロードスレッドクラス
Definition GxSysResource.h:810
constexpr void setRequestResource(GxResBase *pResource)
次の読み込みリソースを設定
Definition GxSysResource.h:840
GX_FORCE_INLINE b32 isWaitResource(void) const
Definition GxSysResource.h:837
GxAsyncLoadThreadMultiOpt(void)
コンストラクタ
Definition GxSysResource.h:827
リソース非同期読み込み要求管理クラス(シングルキューを振り分ける)
Definition GxSysResource.h:797
GxSysResourceAsyncLoadMultiWithSharedQueue(void)
コンストラクタ
Definition GxSysResource.cpp:1172
b32 request(GxResBase *pResource) override
リクエスト
Definition GxSysResource.cpp:1284
~GxSysResourceAsyncLoadMultiWithSharedQueue(void) override
デストラクタ
Definition GxSysResource.cpp:1179
b32 isEmpty(void) override
リクエストキューが空かどうか(全ての読み込みスレッドのキューが空かどうか)
Definition GxSysResource.cpp:1274
b32 initialize(u32 queueMax, u32 asyncLoadThreadStackSize=GX_ASYNC_LOAD_THREAD_STACKSIZE, u32 multiCount=4, s32 cpuIndex=GX_ASYNC_LOAD_THREAD_CPU_INDEX) override
初期化
Definition GxSysResource.cpp:1193
void clear(void) override
クリア
Definition GxSysResource.cpp:1260
GxLockFreeQueue< GxResBase *, GxAllocatorList::ALLOCATOR_TYPE::SYSTEM > _requestQueueSingle
リクエストキュー(_optThreadAlignment使用時)
Definition GxSysResource.h:899
void terminate(void) override
終了
Definition GxSysResource.cpp:1230
b32 getNextRequestResource(GxResBase **pResource)
登録情報取り出し
Definition GxSysResource.cpp:1323
リソースコールバック管理クラス
Definition GxSysResource.h:353
void clear(void)
クリア
Definition GxSysResource.cpp:556
~GxSysResourceCallback(void) override
デストラクタ
Definition GxSysResource.cpp:502
b32 initialize(void)
初期化
Definition GxSysResource.cpp:511
GxSysResourceCallback(void)
コンストラクタ
Definition GxSysResource.cpp:495
b32 request(GxResBase *pResource)
リクエスト
Definition GxSysResource.cpp:572
void terminate(void)
終了
Definition GxSysResource.cpp:520
void update(void)
実行
Definition GxSysResource.cpp:534
リソース管理システムクラス
Definition GxSysResource.h:1092
b32 initializeResourceRootPath(const GxResourceInitialInformation *pInitialInformation=nullptr)
リソースルートパス初期化
Definition GxSysResource.cpp:5528
PATH_TYPE
リソースパスタイプ
Definition GxSysResource.h:1131
@ MAX
リソースパスタイプ数
@ FINALIZED_NATIVE
ハードウェア固有ファイナライズリソースパス
@ ORIGINAL
オリジナルリソースパス
@ NONE
リソース指定パスではない
@ FINALIZED_COMMON
ハードウェア共通ファイナライズリソースパス
const b32 getDisableFinalizeIgnoreOriginalFlag(void) const
オリジナル参照とタイムスタンプ比較を無視して、強制的にファイナライズを無効化しているかのフラグを取得
Definition GxSysResource.h:1665
void getConvertPath(GxString &dst, const GxResBase &resource) const
対象リソース変換先出力パス取得 (リソース指定)
Definition GxSysResource.cpp:4221
GxString _originalRootPath
オリジナルリソースルートパス
Definition GxSysResource.h:1590
GxResBase * createResource(const GxRttiResource &resRtti, GX_CSTR path, void *pCreateCallbackWork=nullptr)
リソース作成
Definition GxSysResource.cpp:3275
static void getFinalizedCommonPath(GxString &dst, GX_CSTR path)
ハードウェア共通ファイナライズパス取得
Definition GxSysResource.cpp:3955
void getFinalizeResourcePath(GxString &dst, const GxResBase &resource)
ファイナライズリソースパス取得
Definition GxSysResource.cpp:5806
void setOnTerminateCallback(void(*func)(u32))
Definition GxSysResource.cpp:7330
b32 isExistFileFromMasterResource(const GxRttiResource &resRtti, GX_CSTR resourcePath, b32 isCheckArchiveOnly=false, s16 archiveID=-1) const
マスターリソース内でのリソースファイル存在チェック (リソースRtti + リソースパス指定)
Definition GxSysResource.cpp:4316
GxResBase * createAndLoadResource(const GxRttiResource &resRtti, GX_CSTR path, LOAD_MODE loadMode=LOAD_MODE::SYNC, void *pCreateCallbackWork=nullptr)
リソース作成 + 読み込み (Rtti + リソースパス指定)
Definition GxSysResource.cpp:2978
GX_FORCE_INLINE b32 isExistResource(const GxRttiResource &resRtti, GX_CSTR resourcePath)
メモリ上のリソース存在チェック (リソースRtti + リソースパス指定)
Definition GxSysResource.h:1823
u32 _fileDecodeChunkSizeMax
圧縮リソースファイル展開用の最大チャンクサイズ
Definition GxSysResource.h:1587
constexpr GX_CSTR getMasterRootPath(void) const
マスタールートパス取得
Definition GxSysResource.h:1424
GX_FORCE_INLINE void unlockAsyncLoad(void)
非同期ロードを再開(lockAsyncLoad() と対で使用すること)
Definition GxSysResource.h:1231
GX_FORCE_INLINE b32 isExistFile(const GxResBase &resource) const
リソースファイル存在チェック (リソース指定)
Definition GxSysResource.h:1797
b32 waitForLoadComplete(GxResBase *pResource)
読み込み完了までブロックする。
Definition GxSysResource.cpp:6426
LOAD_RESULT loadResourceSync(GxResBase &resource, void *pCreateCallbackWork=nullptr)
リソース読み込み (同期)
Definition GxSysResource.cpp:5825
constexpr GX_CSTR getFinalizedCommonRootPath(void) const
ハードウェア共通ファイナライズリソースルートパス取得
Definition GxSysResource.h:1420
constexpr GX_CSTR getResourceRootPath(void) const
リソースルートパス取得 (※カレントディレクトリからの相対パス)
Definition GxSysResource.h:1413
GX_FORCE_INLINE u32 getResourceNum(void)
登録済みリソース数取得
Definition GxSysResource.h:1770
LOAD_RESULT loadResourceFromStream(GxResBase &resource, GxStream &stream, u32 size=0)
リソース読み込み (from ストリーム)
Definition GxSysResource.cpp:6178
GX_SYSRESOURCE_ERROR_FUNCTION _pUserErrorFunction
ユーザー定義のエラーコールバック
Definition GxSysResource.h:1586
void setResourceRootPath(GX_CSTR path=nullptr)
リソースルートパス設定 (※カレントディレクトリからの相対パス)
Definition GxSysResource.cpp:3732
static void getResourcePath(GxString &dst, GX_CSTR path, b32 isDeleteExtension=true)
リソースパス取得 (フルパス指定)
Definition GxSysResource.cpp:4036
GX_FORCE_INLINE b32 isEmptyBackgroundLoader(void)
裏読みロードのリクエストキューが空かどうか
Definition GxSysResource.h:1505
virtual GX_FORCE_INLINE b32 isRegisteredNonReplacedPath(GX_CSTR &, GX_CSTR &) const
置き換え元のパスを登録
Definition GxSysResource.h:1462
const b32 getOptimizeAsyncloadThreadAssignment(void) const
非同期ロード時にリソースのスレッド分配をより効率化する
Definition GxSysResource.h:1701
GxResBase * createAndSetResource(const GxRttiResource &resRtti, GX_CSTR path, GxMemoryStream &stream, LOAD_MODE loadMode=LOAD_MODE::SYNC, void *pCreateCallbackWork=nullptr)
リソース作成 + データ割り当て
Definition GxSysResource.cpp:3170
GxString _masterRootPath
マスターリソースルートパス
Definition GxSysResource.h:1593
GX_FORCE_INLINE GxDataResourceGuid & getDataResourceGuid(void)
リソースのGUID管理データを取得
Definition GxSysResource.h:1564
b32 _optimizeAsyncloadThreadAssignment
非同期ロード時にリソースのスレッド分配をより効率化する
Definition GxSysResource.h:1597
GxDataResourceGuid _dataResourceGuid
リソースのGUID管理データ
Definition GxSysResource.h:1599
static void analyseResourcePath(GX_CSTR path, PATH_TYPE *pType, s32 *pRootPosition, u32 *pRootLength)
リソースパス解析
Definition GxSysResource.cpp:5451
constexpr u32 getMotionSequenceLineMax(void) const
モーションシーケンスのラインの最大数を取得
Definition GxSysResource.h:1508
constexpr GX_CSTR getOriginalRootPath(void) const
オリジナルリソースルートパス取得
Definition GxSysResource.h:1418
GX_FORCE_INLINE b32 isArchiveOpened(s16 archiveId) const
アーカイブファイルがオープンしているか調べる
Definition GxSysResource.h:1256
GxString _finalizedNativeRootPath
ハードウェア固有ファイナライズリソースルートパス
Definition GxSysResource.h:1592
GX_FORCE_INLINE void lockFromOutside(void)
外部からのlock処理
Definition GxSysResource.h:1630
GX_FORCE_INLINE void lockAsyncLoad(void)
非同期ロードを一時停止(現在処理中のファイル読み込みが終わるまでブロックされる)
Definition GxSysResource.h:1229
constexpr u32 getArchiveFileMax(void) const
アーカイブファイルの管理数の上限を取得
Definition GxSysResource.h:1254
GxResBase * createResourceRoutine(const GxRttiResource &resRtti, GX_CSTR original, GX_CSTR replace, b32 *pIsNewCreate, void *pCreateCallbackWork)
リソース作成内部ルーチン
Definition GxSysResource.cpp:5686
b32 reloadResource(GxResBase *pResource, LOAD_MODE loadMode=LOAD_MODE::SYNC)
リソース再読み込み
Definition GxSysResource.cpp:3611
u32 _motionSequenceLineMax
モーションシーケンスのラインの最大数
Definition GxSysResource.h:1596
GxCriticalSection _loadStateCriticalSection
ロード開始状態用クリティカルセクション
Definition GxSysResource.h:1577
constexpr GxSysResourceAsyncLoadBase * getResourceAsyncLoadManager(void) const
非同期リソース読み込み管理を取得
Definition GxSysResource.h:1223
LOAD_RESULT
リソース読み込み結果
Definition GxSysResource.h:1123
@ CANCELED
キャンセル
static b32 isOriginalPath(GX_CSTR path)
オリジナルリソースパス判定
Definition GxSysResource.cpp:3771
GxSysResourceRegister _resourceRegisterManager
リソース登録管理
Definition GxSysResource.h:1572
void terminate(void) override
終了
Definition GxSysResource.cpp:2857
static GX_CSTR RESOURCE_ORIGINAL_ROOT_NAME
オリジナルリソースパスルート名
Definition GxSysResource.h:1140
static void getFinalizedNativePath(GxString &dst, GX_CSTR path)
ハードウェア固有ファイナライズパス取得
Definition GxSysResource.cpp:3994
b32 searchResourceFileTableTargetLoop(GX_CSTR rootPath, const GxResourceFileTable &fileTableElement, const GxResourceFileFilter *pFileFilterTable, const GxRttiResource *pRttiTarget, RESOURCE_FILE_TABLE_SEARCH_CALLBACK function, void *pArgument)
リソースファイルテーブル探索処理ループ
Definition GxSysResource.cpp:7116
void cancelResource(GxResBase *pResource)
リソース非同期ロードキャンセル
Definition GxSysResource.cpp:3592
const f32 getOptimizeTBNRemakeRange(void) const
モデルをファイナライズするときのTBNの再計算で利用する閾値を取得
Definition GxSysResource.h:1692
static u64 getResourceId(const GxRttiResource &resRtti, GX_CSTR resourcePath)
リソースID生成
Definition GxSysResource.cpp:5517
GX_FORCE_INLINE void setDisableFinalizeIgnoreOriginalFlag(b32 flag)
オリジナル参照とタイムスタンプ比較を無視して、強制的にファイナライズを無効化しているかのフラグを設定
Definition GxSysResource.h:1490
void getMasterPath(GxString &dst, const GxResBase &resource) const
対象リソースマスターパス取得 (リソース指定)
Definition GxSysResource.cpp:4260
GxSysResourceCallback _resourceCallbackManager
コールバック管理
Definition GxSysResource.h:1573
LOAD_MODE
リソース読み込みモード
Definition GxSysResource.h:1116
@ SYNC
同期読み込み
@ ASYNC
非同期読み込み
GxString _resourceRootPath
リソース全体ルートパス
Definition GxSysResource.h:1589
f32 _optimizeTBNRemakeRange
モデルをファイナライズするときのTBNの再計算で利用する閾値(デフォルトは0.1f)
Definition GxSysResource.h:1595
LOAD_RESULT loadResourceFileAsync(GxResBase &resource, GxFile &file, u32 offset, u32 size)
リソースファイル非同期読み込み処理 (リソース非同期読み込み処理内サブルーチン)
Definition GxSysResource.cpp:6328
constexpr GX_CSTR getFinalizedNativeRootPath(void) const
ハードウェア固有ファイナライズリソースルートパス取得
Definition GxSysResource.h:1422
b32 _disableFinalizeIgnoreOriginalFlag
オリジナル参照とタイムスタンプ比較を無視して、強制的にファイナライズを無効化。(すでにファイナライズがある前提)
Definition GxSysResource.h:1584
static b32 isFinalizedCommonPath(GX_CSTR path)
ハードウェア共通ファイナライズパス判定
Definition GxSysResource.cpp:3786
void * loadFileImage(const GxRttiResource &resRtti, GX_CSTR path, u32 &dataSize, GxAllocatorList::ALLOCATOR_TYPE allocator=GxAllocatorList::ALLOCATOR_TYPE::TEMPORARY)
ファイルをメモリに直接読み込む
Definition GxSysResource.cpp:3469
const GxResourceFileFilter * getResourceFilterTable(void) const
リソースフィルタテーブルポインタ取得
Definition GxSysResource.h:1656
GxSysResourceAsyncLoadBase * _resourceAsyncLoadManager
非同期ロード管理
Definition GxSysResource.h:1574
GxSysResourceArchive _resourceArchiveManager
アーカイブ管理
Definition GxSysResource.h:1576
void unregisterResource(GxResBase *pResource)
リソース破棄
Definition GxSysResource.cpp:3677
static b32 isFinalizedNativePath(GX_CSTR path)
ハードウェア固有ファイナライズパス判定
Definition GxSysResource.cpp:3801
virtual void getReplacePath(GxString &dstPath, const GxRttiResource &, GX_CSTR srcPath) const
置き換えパスを取得
Definition GxSysResource.cpp:4141
void registerResource(GxResBase *pResource)
リソース登録
Definition GxSysResource.cpp:3661
b32 isSkipSearchFileTableTargetName(GX_CSTR fileName, const GxResourceFileFilter *pFileFilterTable=nullptr)
リソースファイルテーブル探索スキップ判定
Definition GxSysResource.cpp:7213
const b32 getSeparateShaderConfig(void) const
シェーダコンフィグファイルを各プラットフォームごとに分けるかどうかを取得
Definition GxSysResource.h:1683
b32 _enableExistOriginalDataFlag
リソースの読み込み時にオリジナルデータの有無をチェックするか否か(trueでチェックを行う)
Definition GxSysResource.h:1583
b32 openArchiveFile(GX_CSTR base, const GxResourceFileTable *pResourceFileTable, s16 archiveId)
Definition GxSysResource.cpp:3705
GxResourceFileTable * _pResourceFileTable
リソースファイルテーブル
Definition GxSysResource.h:1579
b32 _optimizeVertexCache
頂点キャッシュ最適化のためのインデックスソートを行う
Definition GxSysResource.h:1582
s16 * _pArchiveSearchOrder
アーカイブ検索順テーブル
Definition GxSysResource.h:1581
constexpr GxSysResourceAsyncLoadBase * getResourceBackgroundLoadManager(void) const
非同期リソース裏読み込み管理を取得
Definition GxSysResource.h:1225
GxResBase * createAndLoadBackground(const GxRttiResource &resRtti, GX_CSTR path, void *pCreateCallbackWork=nullptr)
リソース作成 + バックグラウンド読み込み (Rtti + リソースパス指定)
Definition GxSysResource.cpp:3126
void update(void) override
実行
Definition GxSysResource.cpp:2887
b32 _separeteShaderConfig
各プラットフォームでシェーダコンフィグファイルを分ける
Definition GxSysResource.h:1585
GxResBase * createAndSetResourceFromFileImage(const GxRttiResource &resRtti, GX_CSTR path, void *pLoadBuffer, u32 dataSize, LOAD_MODE loadMode=LOAD_MODE::SYNC, void *pCreateCallbackWork=nullptr)
メモリ上のデータからリソースを作成
Definition GxSysResource.cpp:3575
const b32 getOptimizeVertexCache(void) const
頂点キャッシュ最適化のためのインデックスソートを行うかどうかを取得
Definition GxSysResource.h:1674
GxSysResource(void)
コンストラクタ
Definition GxSysResource.cpp:2573
GX_FORCE_INLINE b32 isEmptyAsyncLoader(void)
非同期ロードのリクエストキューが空かどうか
Definition GxSysResource.h:1503
GX_FORCE_INLINE GxResBase * getResource(u32 index)
登録済みリソース取得 (インデックス指定)
Definition GxSysResource.h:1784
GX_FORCE_INLINE void unlockFromOutside(void)
外部からのunlock処理
Definition GxSysResource.h:1638
void getFullPath(GxString &dst, const GxResBase &resource) const
対象リソースフルパス取得 (リソース指定)
Definition GxSysResource.cpp:4195
b32(*) RESOURCE_FILE_TABLE_SEARCH_CALLBACK(const GxRttiResource &resRtti, GX_CSTR resourcePath, void *pArgument)
対象リソースファイル情報探索コールバック
Definition GxSysResource.h:1146
static void getOriginalPath(GxString &dst, GX_CSTR path)
オリジナルリソースパス取得
Definition GxSysResource.cpp:3916
LOAD_RESULT loadResourceAsync(GxResBase &resource, void *pCreateCallbackWork=nullptr)
リソース読み込み (非同期)
Definition GxSysResource.cpp:6011
GxResourceFileFilter * _pResourceFileFilter
リソースファイルフィルタ
Definition GxSysResource.h:1580
b32 initialize(const GxClassBase *pInitialInformation=nullptr) override
初期化
Definition GxSysResource.cpp:2624
GxString _finalizedCommonRootPath
ハードウェア共通ファイナライズリソースルートパス
Definition GxSysResource.h:1591
void initializeArchiveSearchOrder(const s16 *pArchiveSearchOrderTable=nullptr)
Definition GxSysResource.cpp:3723
~GxSysResource(void) override
デストラクタ
Definition GxSysResource.cpp:2613
static void callbackLoadStart(void *pUser, GX_HANDLE requestHandle)
リソースファイル非同期読み込み開始コールバック関数
Definition GxSysResource.cpp:6402
static GX_CSTR RESOURCE_FINALIZED_COMMON_ROOT_NAME
ハードウェア共通ファイナライズリソースパスルート名
Definition GxSysResource.h:1142
void getLoadPath(GxString &dst, const GxRttiResource &resRtti, GX_CSTR resourcePath)
ロードファイルパス取得
Definition GxSysResource.cpp:6453
GX_CSTR getRootPath(const GxResBase &resource) const
対象リソースルートパス取得 (リソース指定)
Definition GxSysResource.cpp:4157
void stopAsyncLoadSystem(void)
リソース非同期ロードシステム停止
Definition GxSysResource.cpp:3692
const GxResourceFileTable * getResourceFileTable(void) const
リソースファイルテーブルポインタ取得
Definition GxSysResource.h:1647
GxSysResourceAsyncLoadBase * _resourceBackgroundLoadManager
裏読みロード管理
Definition GxSysResource.h:1575
リソース登録管理クラス
Definition GxSysResource.h:246
GxResBase * findResource(u64 resourceId)
リソース探索
Definition GxSysResource.cpp:350
b32 registerResource(GxResBase *pResource)
リソース登録
Definition GxSysResource.cpp:268
u32 getResourceNum(void) const
リソース個数取得
Definition GxSysResource.cpp:448
GxSysResourceRegister(void)
コンストラクタ
Definition GxSysResource.cpp:257
GxResBase * getRegisterResource(u32 index)
指定インデックス登録リソース取得
Definition GxSysResource.cpp:385
b32 unregisterResource(GxResBase *pResource)
リソース解除
Definition GxSysResource.cpp:306
~GxSysResourceRegister(void) override
デストラクタ
Definition GxSysResource.h:300
スレッドクラス
Definition GxThread.h:177
シングルトン基礎クラス
Definition GxSingleton.h:19
static constexpr GxSysResource * getSingletonPointer(void)
Definition GxSingleton.h:59
Definition GxSysResource.h:59
GX_FORCE_INLINE b32 isEnd(void) const
終端判定
Definition GxSysResource.h:66
GX_CSTR _pFileName
フィルタ対象ファイル名(or ディレクトリ名) (※終端要素にはnullptrを設定する必要がある)
Definition GxSysResource.h:74
Definition GxSysResource.h:25
GX_CSTR _pResourcePath
リソースパス (※終端要素にはnullptrを設定する必要がある)
Definition GxSysResource.h:46
u16 _isHddInstall
HDDインストールフラグ (※予約)
Definition GxSysResource.h:48
GX_FORCE_INLINE b32 isEnd(void) const
終端判定
Definition GxSysResource.h:34
static GxResourceFileTable * allocArray(const GxResourceFileTable *pResourceFileTable, s16 archiveId)
Definition GxSysResource.cpp:198
s16 _archiveId
アーカイブID (※同一IDを1つのアーカイブとする。負数の場合は非アーカイブファイル)
Definition GxSysResource.h:47
GX_FORCE_INLINE b32 isDirectory(void) const
ディレクトリ指定判定
Definition GxSysResource.h:32
文字列型クラス
Definition GxString.h:18
GX_FORCE_INLINE GX_STR getString(void)
文字列取得
Definition GxString.h:165
アーカイブファイル情報
Definition GxSysResource.h:941
u64 _resourceId
リソースID
Definition GxSysResource.h:943
GxString _path
ファイルパス
Definition GxSysResource.h:942
アーカイブヘッダー
Definition GxSysResource.h:927
u32 _fileCount
アーカイブファイル数
Definition GxSysResource.h:929
u32 _fourCC
アーカイブヘッダーFourCC
Definition GxSysResource.h:928
オフセットテーブル情報
Definition GxSysResource.h:934
u32 _size
ファイルサイズ
Definition GxSysResource.h:936
u32 _offset
ファイル先頭オフセット位置
Definition GxSysResource.h:935
32bitブーリアン
Definition GxDefine.h:173