OROCHI
 
Loading...
Searching...
No Matches
GxDefineWindows.h
1//===========================================================================
9//===========================================================================
10#pragma once
11
12#define GX_PLATFORM_NAME "Win64"
13
14#define GX_OPENGL_VERSION GX_OPENGL_VERSION_INVALID
15#define GX_DIRECTX_VERSION GX_DIRECTX_VERSION_12_0
16#define GX_SHADER_MODEL GX_SHADER_MODEL_5
17
18#define GX_STRING_LITERALS_ENCODE GX_STRING_ENCODE_SJIS
19
20// データ格納方式
21#define GX_LITTLE_ENDIAN 1
22#define GX_BIG_ENDIAN 0
23#define GX_BITFIELD_LITTLEENDIAN 1
24#define GX_BITFIELD_BIGENDIAN 0
25
26//---------------------------------------------------------------------------
27// プリミティブ リセット インデックス
28// インデックスバッファのインデックス値に 16bit:0x0000ffff 32bit時:0xffffffff
29// を指定することによって描画をリセットすることができます。
30//---------------------------------------------------------------------------
31#define GX_USE_RESET_INDEX16 0 // × 16bit ResetIndex非対応
32#define GX_USE_RESET_INDEX32 0 // × 32bit ResetIndex非対応
33
34// SIMD演算・ベクトル演算ユニット使用
35#if !defined(GX_USE_SIMD)
36 #define GX_USE_SIMD 0
37#endif // !GX_USE_SIMD
38
39//===========================================================================
40// プラットフォーム別ライブラリ
41//===========================================================================
42#pragma warning(disable:4061) // warning C4061: switch 中の列挙子 'enum' は case ラベルによって明示的にハンドルされません。
43#pragma warning(disable:4191) // TypeInfoObject.h テンプレート内のwarning抑制
44#pragma warning(disable:4201) // warning C4201: 非標準の拡張機能が使用されています : 無名の構造体または共用体です。
45#pragma warning(disable:4324) // warning C4324: 'class' : __declspec(align()) のために構造体がパッドされました。
46#pragma warning(disable:4365) // warning C4365: '引数' : 'type1' から 'type2' に変換しました。signed/unsigned が一致しません。
47#pragma warning(disable:4505) // warning C4505: 参照されていないローカル関数は削除されました。
48#pragma warning(disable:4640) // warning C4640: 'symbol' : ローカル スタティック オブジェクトの構築がスレッド セーフではありません
49#pragma warning(disable:4710) // warning C4710: 関数 'func' はインライン関数ではありません
50#pragma warning(disable:4711) // warning C4711: 関数 'func' に自動インライン展開を選択しました。
51#pragma warning(disable:4820) // warning C4820: 'symbol' : 'n' バイトのパディングをメンバ 'symbol' の後に追加しました。
52#pragma warning(disable:4625) // warning C4625: 'class' : 基本クラスのコピー コンストラクタにアクセスできないため、コピー コンストラクタは生成できませんでした。
53#pragma warning(disable:4626) // warning C4626: 'class' : 基本クラスの代入演算子にアクセスできないため、代入演算子は生成できませんでした。
54#pragma warning(disable:4738) // warning C4738: メモリに 32 ビットの浮動結果を格納します。パフォーマンスが低下する可能性があります
55
56// システムインクルード時のみ、ワーニング抑制
57#pragma warning(disable:4619) // warning C4619: #pragma 警告 : 警告番号 'n' がありません。
58#pragma warning(disable:4668) // warning C4668: 'symbol' は、'#if/#elif' を '0' に置換するプリプロセッサ マクロとして定義されていません。
59#pragma warning(disable:4826) // warning C4826: 'const void *' から 'void * __ptr64' への変換は符号拡張されています。これは、予期しない実行時の動作を発生させる可能性があります。
60#pragma warning(disable:4548) // warning C4548: コンマ前の式は無効です。有効な式を指定してください。
61#pragma warning(disable:4917) // warning C4917: 'declarator' : GUID はクラス、インターフェイスまたは名前空間のみに関連付けることができます。
62#if _MSC_VER >= 1800 // VS 2013, 2015
63#pragma warning(disable:4005) // warning C4005: 'DXGI_STATUS_OCCLUDED' : マクロが再定義されました。
64#if _MSC_VER >= 1900
65#pragma warning(disable:4458)
66#endif //_MSC_VER >= 1900
67#endif //_MSC_VER >= 1800
68
69#define _CRT_SECURE_NO_DEPRECATE // 「'strcpy' が古い形式として宣言されました」を無効化
70
71#define WIN32_LEAN_AND_MEAN // Windows ヘッダーから使用されていない部分を除外します。
72#define STRICT // より厳密な型チェック
73
74#define NOMINMAX // min max マクロを無効化
75
76#define _HAS_EXCEPTIONS (0) // warning C4530: C++ 例外処理を使っていますが、アンワインド セマンティクスは有効にはなりません。/EHsc を指定してください。を無効化
77#include <malloc.h>
78
79#include <windows.h>
80// #include <Winbase.h>
81#include <mmsystem.h>
82#include <crtdbg.h>
83#include <stdio.h>
84#include <string.h>
85#include <memory>
86#include <functional>
87#include <algorithm>
88#include <winsock2.h>
89#include <Shlwapi.h>
90
91#if GX_DEVELOP
92#include <shellapi.h>
93#include "fbxsdk.h"
94#endif //GX_DEVELOP
95
96#pragma comment(lib, "winmm.lib")
97
98#if GX_DEVELOP
99#define D3D_DEBUG_INFO
100#endif //GX_DEVELOP
101#define DIRECTINPUT_VERSION 0x0800
102
103#pragma comment(lib, "dxguid.lib")
104
105#include <dinput.h>
106#include <wbemidl.h>
107#include <oleauto.h>
108#include <xinput.h>
109
110#pragma comment(lib, "dinput8.lib")
111#pragma comment(lib, "xinput.lib")
112
113#if GX_USE_DX12
114#include <d3d12.h>
115#include <d3dx12.h>
116#include <dxcapi.h>
117#include <dxgi1_4.h>
118#include <d3dcompiler.h>
119#include <d2d1.h>
120#include <wrl.h>
121
122#pragma comment(lib, "d3d12.lib")
123#pragma comment(lib, "dxcompiler.lib")
124#pragma comment(lib, "dxgi.lib")
125#pragma comment(lib, "d3dcompiler.lib") // needs YEBIS
126#pragma comment(lib, "d2d1.lib")
127
128#if GX_DEVELOP
129#define GX_USE_PIX 0
130#else //GX_DEVELOP
131#define GX_USE_PIX 0
132#endif // !GX_DEVELOP
133#if GX_USE_PIX
134#include <WinPixEventRuntime/pix3.h>
135#endif //GX_USE_PIX
136
137#define GX_PPV_ARGS IID_PPV_ARGS
138
139#endif //GX_USE_DX12
140
141#include "steam_api.h"
142
143// システムインクルード時のみのワーニング抑制を解除
144#pragma warning(default:4619)
145#pragma warning(default:4668)
146#pragma warning(default:4826)
147#pragma warning(default:4548)
148#pragma warning(default:4917)
149#if _MSC_VER >= 1800 // VS 2013, 2015
150#pragma warning(default:4005)
151#if _MSC_VER >= 1900
152#pragma warning(default:4458)
153#endif //_MSC_VER >= 1900
154#endif //_MSC_VER >= 1800
155
156// namespace
157using Microsoft::WRL::ComPtr;
158
159#define GX_CORE_NAMESPACE_BEGIN() namespace gx{namespace core{
160#define GX_CORE_NAMESPACE_END() }}
161
162GX_CORE_NAMESPACE_BEGIN()
163//===========================================================================
165//===========================================================================
166using s8 = signed char;
167using u8 = unsigned char;
168using s16 = signed short;
169using u16 = unsigned short;
170using s32 = signed int;
171using u32 = unsigned int;
172using s64 = signed long long;
173using u64 = unsigned long long;
174using f32 = float;
175using f64 = double;
176
177using GX_CHAR = char;
178using GX_CCHAR = const char;
179using GX_STR = char*;
180using GX_CSTR = const char*;
181
182using GX_WCHAR = wchar_t;
183using GX_CWCHAR = const wchar_t;
184using GX_WSTR = wchar_t*;
185using GX_CWSTR = const wchar_t*;
186
187// 符号なし128bit整数
188using u128 = union
189{
190 u64 i64[2];
191 u32 i32[4];
192 u16 i16[8];
193 u8 i8[16];
194};
195
196// 符号あり128bit整数
197using s128 = union
198{
199 u64 i64[2];
200 u32 i32[4];
201 u16 i16[8];
202 u8 i8[16];
203};
204
205using GxNativeDateTime = tm;
206using GxNativeThread = u32;
207using GxNativeMutex = CRITICAL_SECTION;
208
209using GxNativeFileEntry = WIN32_FIND_DATA;
210using GxNativeFileHandle = HANDLE;
211using GxNativeFindHandle = HANDLE;
212
213using GxNativeBuffer = ComPtr<ID3D12Resource>;
214using GxNativeBufferAddress = void*;
215using GxNativeDevice = ComPtr<ID3D12Device>;
216using GxNativeSwapChain = IDXGISwapChain3;
217using GxNativeTexture = ComPtr<ID3D12Resource>;
218using GxNativeRenderTarget = ComPtr<ID3D12Resource>;
219using GxNativeDepthStencil = ComPtr<ID3D12Resource>;
220using GxNativeRenderFormat = DXGI_FORMAT;
221using GxNativeQueryResult = ComPtr<ID3D12Resource>;
222using D3D_INPUT_ELEMENT_DESC = D3D12_INPUT_ELEMENT_DESC;
223
224//===========================================================================
226//===========================================================================
227#define U8_MAX ( (u8)( UCHAR_MAX ) )
228#define S8_MIN ( (s8)( CHAR_MIN ) )
229#define S8_MAX ( (s8)( CHAR_MAX ) )
230
231#define U16_MAX ( (u16)( USHRT_MAX ) )
232#define S16_MIN ( (s16)( SHRT_MIN ) )
233#define S16_MAX ( (s16)( SHRT_MAX ) )
234
235#define U32_MAX ( (u32)( ULONG_MAX ) )
236#define S32_MIN ( (s32)( LONG_MIN ) )
237#define S32_MAX ( (s32)( LONG_MAX ) )
238
239// #define F32_MIN FLT_MINとS32_MINの意味が違うので誤用を防ぐため定義していません
240// #define F32_MAX
241#define F32_ABS_MIN ( (f32)( FLT_MIN ) )
242#define F32_ABS_MAX ( (f32)( FLT_MAX ) )
243#define F32_NEARLY_ZERO ( (f32)( F32_ABS_MIN ) )
244
245#define U64_MAX ( (u64)( ULLONG_MAX ) )
246#define S64_MIN ( (s64)( LLONG_MIN ) )
247#define S64_MAX ( (s64)( LLONG_MAX ) )
248
249// #define F64_MIN DBL_MINとS64_MINの意味が違うので誤用を防ぐため定義していません
250// #define F64_MAX
251#define F64_ABS_MIN ( (f64)( DBL_MIN ) )
252#define F64_ABS_MAX ( (f64)( DBL_MAX ) )
253#define F64_NEARLY_ZERO ( (f64)( F64_ABS_MIN ) )
254
255//===========================================================================
257//===========================================================================
258//===========================================================================
260//===========================================================================
261#define GX_ALIGN32_BEGIN __declspec(align(32))
262#define GX_ALIGN32_END
263#define GX_ALIGN16_BEGIN __declspec(align(16))
264#define GX_ALIGN16_END
265#define GX_ALIGN8_BEGIN __declspec(align(8))
266#define GX_ALIGN8_END
267
268//===========================================================================
270//===========================================================================
271//---------------------------------------------------------------------------
273//---------------------------------------------------------------------------
274#pragma inline_recursion(on)
275#pragma inline_depth(255) // インライン展開無限
276#define GX_INLINE __inline
277
278#if defined(_DEBUG)
279#define GX_FORCE_INLINE __inline
280#else //_DEBUG
281#define GX_FORCE_INLINE __forceinline
282#endif // !_DEBUG
283
284//---------------------------------------------------------------------------
286//---------------------------------------------------------------------------
287#if defined(_MSC_VER) && (_MSC_VER >= 1400)
288 // Visual C++ 2005
289 #define GX_RESTRICT __restrict
290#else // _MSC_VER && (_MSC_VER >= 1400)
291 // Visual C++ 2003以前
292 #define GX_RESTRICT
293#endif // !(_MSC_VER && (_MSC_VER >= 1400))
294
295//---------------------------------------------------------------------------
297// 廃止予定関数やクラスに使用します
298//
299// 関数での使用例
300// GX_DEPRECATED_BEGIN void hogeFunc(void) GX_DEPRECATED_END
301// {
302// }
303//
304// クラスでの使用例
305// GX_DEPRECATED_BEGIN class Hoge
306// {
307// }GX_DEPRECATED_END;
308//---------------------------------------------------------------------------
309#define GX_DEPRECATED_BEGIN __declspec(deprecated)
310#define GX_DEPRECATED_END
311
312//===========================================================================
314//===========================================================================
315#define GX_THREAD_LOCAL_STORAGE __declspec(thread)
316
317//===========================================================================
319//===========================================================================
320#define GX_ALLOCA(size) _alloca(size)
321
322//===========================================================================
324//===========================================================================
327#define GX_PREFETCH_NT(__BASE_ADDRESS__, __OFFSET__)
328
331#define GX_PREFETCH_T(__BASE_ADDRESS__, __OFFSET__)
332
335#define GX_PREFETCH(__BASE_ADDRESS__, __OFFSET__)
336
339#define GX_PREFETCH128(__BASE_POINTER__, __OFFSET__)
340
341//===========================================================================
343//===========================================================================
345#if !defined(GX_SAFE_DELETE)
346 #define GX_SAFE_DELETE(__POINTER__) if(__POINTER__){GX_DELETE(__POINTER__); __POINTER__ = nullptr;}
347#endif // !GX_SAFE_DELETE
348
350#if !defined(GX_SAFE_DELETE_ARRAY)
351 #define GX_SAFE_DELETE_ARRAY(__POINTER__) if(__POINTER__){GX_DELETE[](__POINTER__); __POINTER__ = nullptr;}
352#endif // !GX_SAFE_DELETE_ARRAY
353
355#if !defined(DIRECTX_SAFE_RELEASE)
356 #define DIRECTX_SAFE_RELEASE(__POINTER__) if(__POINTER__){(__POINTER__)->Release(); __POINTER__ = nullptr;}
357#endif // !DIRECTX_SAFE_RELEASE
358
360#if !defined(GX_SAFE_PLACEMENT_DELETE)
361#define GX_SAFE_PLACEMENT_DELETE(__POINTER__, __CLASSNAME__) if(__POINTER__){(__POINTER__)->~__CLASSNAME__(); GX_SAFE_FREE_MEMORY(__POINTER__);}
362#endif
363
365#if !defined(GX_SAFE_PLACEMENT_DELETE_ALLOCATOR)
366#define GX_SAFE_PLACEMENT_DELETE_ALLOCATOR(__POINTER__, __CLASSNAME__, __ALLOCATOR__) if(__POINTER__){(__POINTER__)->~__CLASSNAME__(); GX_SAFE_FREE_MEMORY_ALLOCATOR(__POINTER__, __ALLOCATOR__);}
367#endif // !GX_SAFE_PLACEMENT_DELETE_ALLOCATOR
368
369//===========================================================================
370// その他
371//===========================================================================
372//---------------------------------------------------------------------------
374//---------------------------------------------------------------------------
375#define GX_POINTER_ADD(__POINTER__, __ADD__) ((void*)(((size_t)(__POINTER__)) + (size_t)(__ADD__)))
376
377//---------------------------------------------------------------------------
379//---------------------------------------------------------------------------
380#define GX_POINTER_SUB(__POINTER__, __SUB__) ((void*)(((size_t)(__POINTER__)) - (size_t)(__SUB__)))
381
382//---------------------------------------------------------------------------
384//---------------------------------------------------------------------------
385#define GX_POINTER_TO_UINT(__POINTER__) ((u64)(size_t)(__POINTER__))
386#define GX_POINTER_TO_SIZE_T(__POINTER__) ((size_t)(__POINTER__))
387#define GX_POINTER_TO_U32(__POINTER__) ((u32)(size_t)(__POINTER__))
388
389//---------------------------------------------------------------------------
391//---------------------------------------------------------------------------
392#define GX_SIZE_T_TO_POINTER(__SIZE_T__) ((void*)(size_t)(__SIZE_T__))
393
394//---------------------------------------------------------------------------
396//---------------------------------------------------------------------------
397#define GX_GET_OFFSET(__CLASS_NAME__, __PARAM_NAME__) (reinterpret_cast<size_t>(&((__CLASS_NAME__*)0x100)->__PARAM_NAME__) - 0x100)
398
399//---------------------------------------------------------------------------
401//---------------------------------------------------------------------------
402#define GX_GET_POINTER_BY_OFFSET(__POINTER__, __CLASS_NAME__, __OFFSET__) ((__CLASS_NAME__*)((size_t)__POINTER__ + __OFFSET__))
403
404//---------------------------------------------------------------------------
406//todo: 高速化実装
407//---------------------------------------------------------------------------
408// 通常版
409#define GX_MEMSET(__DST__, __VALUE__, __SIZE__) memset(__DST__, __VALUE__, __SIZE__)
410
411// 高速版 (dstアドレス4byteアライメント保証が必要)
412#define GX_MEMSET_ALIGNMENT4(__DST__, __VALUE__, __SIZE__) memset(__DST__, __VALUE__, __SIZE__)
413
414// 高速版 (dstアドレス16byteアライメント保証が必要)
415#define GX_MEMSET_ALIGNMENT16(__DST__, __VALUE__, __SIZE__) memset(__DST__, __VALUE__, __SIZE__)
416
417// 高速版 (dstアドレス128byteアライメント保証が必要)
418#define GX_MEMSET_ALIGNMENT128(__DST__, __VALUE__, __SIZE__) memset(__DST__, __VALUE__, __SIZE__)
419
420//---------------------------------------------------------------------------
422//todo: 高速化実装
423//---------------------------------------------------------------------------
424// 通常版
425#define GX_MEMCPY(__DST__, __SRC__, __SIZE__) memcpy(__DST__, __SRC__, __SIZE__)
426
427// 高速版 (dst, srcアドレス4byteアライメント保証が必要)
428#define GX_MEMCPY_ALIGNMENT4(__DST__, __SRC__, __SIZE__) memcpy(__DST__, __SRC__, __SIZE__)
429
430// 高速版 (dst, srcアドレス16byteアライメント保証が必要)
431#define GX_MEMCPY_ALIGNMENT16(__DST__, __SRC__, __SIZE__) memcpy(__DST__, __SRC__, __SIZE__)
432
433// 高速版 (dst, srcアドレス128byteアライメント保証が必要)
434#define GX_MEMCPY_ALIGNMENT128(__DST__, __SRC__, __SIZE__) memcpy(__DST__, __SRC__, __SIZE__)
435
436//---------------------------------------------------------------------------
438//todo: 高速化実装
439//---------------------------------------------------------------------------
440// 通常版
441#define GX_MEMCMP(__PTR1__, __PTR2__, __SIZE__) memcmp(__PTR1__, __PTR2__, __SIZE__)
442
443// 高速版 (ptr1, ptr2アドレス4byteアライメント保証が必要)
444#define GX_MEMCMP_ALIGNMENT4(__PTR1__, __PTR2__, __SIZE__) memcmp(__PTR1__, __PTR2__, __SIZE__)
445
446// 高速版 (ptr1, ptr2アドレス16byteアライメント保証が必要)
447#define GX_MEMCMP_ALIGNMENT16(__PTR1__, __PTR2__, __SIZE__) memcmp(__PTR1__, __PTR2__, __SIZE__)
448
449// 高速版 (ptr1, ptr2アドレス128byteアライメント保証が必要)
450#define GX_MEMCMP_ALIGNMENT128(__PTR1__, __PTR2__, __SIZE__) memcmp(__PTR1__, __PTR2__, __SIZE__)
451
452//---------------------------------------------------------------------------
454//todo: 高速化実装
455//---------------------------------------------------------------------------
456// 通常版
457#define GX_MEMMOVE(__DST__, __VALUE__, __SIZE__) memmove(__DST__, __VALUE__, __SIZE__)
458
459// 高速版 (dstアドレス4byteアライメント保証が必要)
460#define GX_MEMMOVE_ALIGNMENT4(__DST__, __VALUE__, __SIZE__) memmove(__DST__, __VALUE__, __SIZE__)
461
462// 高速版 (dstアドレス16byteアライメント保証が必要)
463#define GX_MEMMOVE_ALIGNMENT16(__DST__, __VALUE__, __SIZE__) memmove(__DST__, __VALUE__, __SIZE__)
464
465// 高速版 (dstアドレス128byteアライメント保証が必要)
466#define GX_MEMMOVE_ALIGNMENT128(__DST__, __VALUE__, __SIZE__) memmove(__DST__, __VALUE__, __SIZE__)
467
468//---------------------------------------------------------------------------
470//---------------------------------------------------------------------------
471// ハンドルエラー値
472#define GX_INVALID_HANDLE ((GX_HANDLE)0xffffffffL)
473
474// 未使用変数のwarning回避
475#define GX_UNUSED(__POINTER__) (&__POINTER__)
476
477// 構造体のメンバオフセットを取得
478#define GX_OFFSET_OF(__STRUCTURE__, __VALUE__) (u32)(size_t)(&((__STRUCTURE__*)0)->__VALUE__)
479
480// FourCCコード
481#define GX_FOURCC(__A__, __B__, __C__, __D__) (((u32)(__D__) << 24) | ((u32)(__C__) << 16) | ((u32)(__B__) << 8) | (u32)(__A__))
482
483// 色の並びを入れ替える
484#define GX_COLOR_RGB_SWAP 1
485
486GX_CORE_NAMESPACE_END()
487
488//===========================================================================
489// デバッグアロケータ(メモリリークチェック)
490//===========================================================================
491#if GX_USE_DEFAULT_ALLOCATOR
492 // crtdbg.hをインクルードしたあとに _CRTDBG_MAP_ALLOC を定義
493 #if defined(_DEBUG)
494 #define _CRTDBG_MAP_ALLOC
495 #define GX_MEMORY_LEAK_CHECK_INIT() _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
496 #else //_DEBUG
497 #define GX_MEMORY_LEAK_CHECK_INIT()
498 #endif // !_DEBUG
499 #define GX_NEW new
500 #define GX_NEW_NAME(name) new
501 #define GX_DELETE delete
502#else //GX_USE_DEFAULT_ALLOCATOR
503 #if GX_DEBUG_NEW
504 #define GX_NEW new(__FILE__, __LINE__)
505 #define GX_NEW_NAME(name) new(__FILE__ "::" name, __LINE__)
506 #define GX_PLACEMENT_NEW(addr) new(addr)
507 #define GX_DELETE delete
508 void* operator new ( size_t blocksize, gx::core::GX_CSTR filename, gx::core::u32 line );
509 void* operator new[] ( size_t blocksize, gx::core::GX_CSTR filename, gx::core::u32 line );
510 void operator delete ( void* block , gx::core::GX_CSTR filename, gx::core::u32 line );
511 void operator delete[] ( void* block , gx::core::GX_CSTR filename, gx::core::u32 line );
512
513 inline void *operator new(size_t, void *where , gx::core::GX_CSTR, gx::core::u32) { return (where); }
514 inline void operator delete(void *, void * , gx::core::GX_CSTR, gx::core::u32) { }
515 inline void *operator new[](size_t, void *where , gx::core::GX_CSTR, gx::core::u32) { return (where); }
516 inline void operator delete[](void *, void *, gx::core::GX_CSTR, gx::core::u32) { }
517 #else //GX_DEBUG_NEW
518 #define GX_NEW new
519 #define GX_NEW_NAME(name) new
520 #define GX_PLACEMENT_NEW(addr) new(addr)
521 #define GX_DELETE delete
522 #endif // !GX_DEBUG_NEW
523 #define GX_MEMORY_LEAK_CHECK_INIT()
524#endif // !GX_USE_DEFAULT_ALLOCATOR
525
526void* operator new ( size_t blocksize );
527void* operator new[] ( size_t blocksize );
528void operator delete ( void* block );
529void operator delete[] ( void* block );
530
531GX_CORE_NAMESPACE_BEGIN()
532#if GX_DEVELOP
533//===========================================================================
535//===========================================================================
536enum class GX_PLATFORM
537{
538 WINDOWS = 0,
539 PS4,
540 PS5,
541 SWITCH,
542 XBOX_XS,
543 MAX,
544};
545
546static GX_CSTR GX_PLATFORM_NAMES[static_cast<u32>(GX_PLATFORM::MAX)] = {
547 GX_PLATFORM_NAME,
548 "PS4",
549 "PS5",
550 "NX64",
551 "XboxXS",
552};
553#endif //GX_DEVELOP
554
555GX_CORE_NAMESPACE_END()
@ MAX
定義数