@carbonenginejs/runtime-utils 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +23 -0
  3. package/README.md +56 -0
  4. package/THIRD-PARTY-NOTICES.md +38 -0
  5. package/docs/README.md +81 -0
  6. package/docs/architecture.md +101 -0
  7. package/docs/concepts/foundation-consolidation.md +86 -0
  8. package/docs/const-kb.md +92 -0
  9. package/docs/core-types/DECORATOR-TODOS.md +25 -0
  10. package/docs/core-types/README.md +203 -0
  11. package/docs/reference/api.md +70 -0
  12. package/docs/reference/classes/README.md +115 -0
  13. package/package.json +132 -0
  14. package/src/arrays.js +5 -0
  15. package/src/audio/audioFormats.js +34 -0
  16. package/src/audio/index.js +1 -0
  17. package/src/box3.js +1385 -0
  18. package/src/bytes.js +56 -0
  19. package/src/compression.js +56 -0
  20. package/src/constants/index.js +6 -0
  21. package/src/constants.js +15 -0
  22. package/src/curve.js +419 -0
  23. package/src/d3d/dxgiFormats.js +46 -0
  24. package/src/d3d/index.js +2 -0
  25. package/src/d3d/primitiveTopology.js +11 -0
  26. package/src/document/CjsCarbonDocument.js +212 -0
  27. package/src/document/CjsClassRegistry.js +373 -0
  28. package/src/document/CjsDocumentDehydrator.js +142 -0
  29. package/src/document/CjsDocumentHydrator.js +156 -0
  30. package/src/document/CjsStructRegistry.js +348 -0
  31. package/src/document/hydrationAdapter.js +129 -0
  32. package/src/document/index.js +6 -0
  33. package/src/geometry/box.js +137 -0
  34. package/src/geometry/cylinder.js +244 -0
  35. package/src/geometry/helpers/LICENSE +15 -0
  36. package/src/geometry/helpers/earcut.js +766 -0
  37. package/src/geometry/helpers/misc.js +103 -0
  38. package/src/geometry/index.js +8 -0
  39. package/src/geometry/json.js +165 -0
  40. package/src/geometry/lathe.js +172 -0
  41. package/src/geometry/octahedron.js +0 -0
  42. package/src/geometry/plane.js +81 -0
  43. package/src/geometry/shape.js +95 -0
  44. package/src/geometry/sphere.js +123 -0
  45. package/src/geometry/torus.js +96 -0
  46. package/src/graphics/colorSpaces.js +22 -0
  47. package/src/graphics/index.js +4 -0
  48. package/src/graphics/pixelFormats.js +158 -0
  49. package/src/graphics/textureDimensions.js +22 -0
  50. package/src/graphics/trinityEnums.js +87 -0
  51. package/src/index.js +58 -0
  52. package/src/is.js +524 -0
  53. package/src/json.js +23 -0
  54. package/src/lifecycle/CjsLifecycleState.js +77 -0
  55. package/src/lifecycle/index.js +1 -0
  56. package/src/lne3.js +497 -0
  57. package/src/lookup.js +48 -0
  58. package/src/mat3.js +131 -0
  59. package/src/mat4.js +699 -0
  60. package/src/math/index.js +25 -0
  61. package/src/math/scalar.js +63 -0
  62. package/src/media/index.js +1 -0
  63. package/src/media/mediaTypes.js +50 -0
  64. package/src/mesh.js +394 -0
  65. package/src/model/CjsEventEmitter.js +333 -0
  66. package/src/model/CjsModel.js +1544 -0
  67. package/src/model/CjsModelState.js +72 -0
  68. package/src/model/index.js +4 -0
  69. package/src/model/sourceRecordUtils.js +54 -0
  70. package/src/noise.js +310 -0
  71. package/src/num.js +827 -0
  72. package/src/path.js +21 -0
  73. package/src/pln.js +762 -0
  74. package/src/pool.js +160 -0
  75. package/src/quat.js +144 -0
  76. package/src/ray3.js +1085 -0
  77. package/src/renderContext/formats.js +145 -0
  78. package/src/renderContext/index.js +5 -0
  79. package/src/renderContext/presentation.js +125 -0
  80. package/src/renderContext/resources.js +27 -0
  81. package/src/renderContext/upscaling.js +22 -0
  82. package/src/renderContext/window.js +20 -0
  83. package/src/runtime/CjsRuntimeState.js +50 -0
  84. package/src/schema/CjsSchema.js +1009 -0
  85. package/src/schema/index.js +17 -0
  86. package/src/shader/index.js +1 -0
  87. package/src/shader/shaderStages.js +37 -0
  88. package/src/sph3.js +754 -0
  89. package/src/tangent.js +288 -0
  90. package/src/text.js +40 -0
  91. package/src/tri3.js +650 -0
  92. package/src/types/carbonTypes.js +635 -0
  93. package/src/types/index.js +2 -0
  94. package/src/utils.js +58 -0
  95. package/src/validation.js +46 -0
  96. package/src/vec2.js +229 -0
  97. package/src/vec3.js +1172 -0
  98. package/src/vec4.js +347 -0
  99. package/src/vertex.js +108 -0
  100. package/src/webgpu/index.js +1 -0
  101. package/src/webgpu/textureFormats.js +121 -0
@@ -0,0 +1,145 @@
1
+ // Ported from CarbonEngine (MIT, (c) 2026 CCP Games) - https://github.com/carbonengine/trinity
2
+ // trinityal/Tr2RenderContextEnum.h (PixelFormat, DepthStencilFormat); shadercompiler/EffectData.h (TextureType)
3
+
4
+ /** Carbon numeric GPU pixel formats (distinct from the abstract graphics/pixelFormats string vocabulary). */
5
+ export const PixelFormat = Object.freeze({
6
+ PIXEL_FORMAT_UNKNOWN: 0,
7
+ PIXEL_FORMAT_R32G32B32A32_TYPELESS: 1,
8
+ PIXEL_FORMAT_R32G32B32A32_FLOAT: 2,
9
+ PIXEL_FORMAT_R32G32B32A32_UINT: 3,
10
+ PIXEL_FORMAT_R32G32B32A32_SINT: 4,
11
+ PIXEL_FORMAT_R32G32B32_TYPELESS: 5,
12
+ PIXEL_FORMAT_R32G32B32_FLOAT: 6,
13
+ PIXEL_FORMAT_R32G32B32_UINT: 7,
14
+ PIXEL_FORMAT_R32G32B32_SINT: 8,
15
+ PIXEL_FORMAT_R16G16B16A16_TYPELESS: 9,
16
+ PIXEL_FORMAT_R16G16B16A16_FLOAT: 10,
17
+ PIXEL_FORMAT_R16G16B16A16_UNORM: 11,
18
+ PIXEL_FORMAT_R16G16B16A16_UINT: 12,
19
+ PIXEL_FORMAT_R16G16B16A16_SNORM: 13,
20
+ PIXEL_FORMAT_R16G16B16A16_SINT: 14,
21
+ PIXEL_FORMAT_R32G32_TYPELESS: 15,
22
+ PIXEL_FORMAT_R32G32_FLOAT: 16,
23
+ PIXEL_FORMAT_R32G32_UINT: 17,
24
+ PIXEL_FORMAT_R32G32_SINT: 18,
25
+ PIXEL_FORMAT_R32G8X24_TYPELESS: 19,
26
+ PIXEL_FORMAT_D32_FLOAT_S8X24_UINT: 20,
27
+ PIXEL_FORMAT_R32_FLOAT_X8X24_TYPELESS: 21,
28
+ PIXEL_FORMAT_X32_TYPELESS_G8X24_UINT: 22,
29
+ PIXEL_FORMAT_R10G10B10A2_TYPELESS: 23,
30
+ PIXEL_FORMAT_R10G10B10A2_UNORM: 24,
31
+ PIXEL_FORMAT_R10G10B10A2_UINT: 25,
32
+ PIXEL_FORMAT_R11G11B10_FLOAT: 26,
33
+ PIXEL_FORMAT_R8G8B8A8_TYPELESS: 27,
34
+ PIXEL_FORMAT_R8G8B8A8_UNORM: 28,
35
+ PIXEL_FORMAT_R8G8B8A8_UNORM_SRGB: 29,
36
+ PIXEL_FORMAT_R8G8B8A8_UINT: 30,
37
+ PIXEL_FORMAT_R8G8B8A8_SNORM: 31,
38
+ PIXEL_FORMAT_R8G8B8A8_SINT: 32,
39
+ PIXEL_FORMAT_R16G16_TYPELESS: 33,
40
+ PIXEL_FORMAT_R16G16_FLOAT: 34,
41
+ PIXEL_FORMAT_R16G16_UNORM: 35,
42
+ PIXEL_FORMAT_R16G16_UINT: 36,
43
+ PIXEL_FORMAT_R16G16_SNORM: 37,
44
+ PIXEL_FORMAT_R16G16_SINT: 38,
45
+ PIXEL_FORMAT_R32_TYPELESS: 39,
46
+ PIXEL_FORMAT_D32_FLOAT: 40,
47
+ PIXEL_FORMAT_R32_FLOAT: 41,
48
+ PIXEL_FORMAT_R32_UINT: 42,
49
+ PIXEL_FORMAT_R32_SINT: 43,
50
+ PIXEL_FORMAT_R24G8_TYPELESS: 44,
51
+ PIXEL_FORMAT_D24_UNORM_S8_UINT: 45,
52
+ PIXEL_FORMAT_R24_UNORM_X8_TYPELESS: 46,
53
+ PIXEL_FORMAT_X24_TYPELESS_G8_UINT: 47,
54
+ PIXEL_FORMAT_R8G8_TYPELESS: 48,
55
+ PIXEL_FORMAT_R8G8_UNORM: 49,
56
+ PIXEL_FORMAT_R8G8_UINT: 50,
57
+ PIXEL_FORMAT_R8G8_SNORM: 51,
58
+ PIXEL_FORMAT_R8G8_SINT: 52,
59
+ PIXEL_FORMAT_R16_TYPELESS: 53,
60
+ PIXEL_FORMAT_R16_FLOAT: 54,
61
+ PIXEL_FORMAT_D16_UNORM: 55,
62
+ PIXEL_FORMAT_R16_UNORM: 56,
63
+ PIXEL_FORMAT_R16_UINT: 57,
64
+ PIXEL_FORMAT_R16_SNORM: 58,
65
+ PIXEL_FORMAT_R16_SINT: 59,
66
+ PIXEL_FORMAT_R8_TYPELESS: 60,
67
+ PIXEL_FORMAT_R8_UNORM: 61,
68
+ PIXEL_FORMAT_R8_UINT: 62,
69
+ PIXEL_FORMAT_R8_SNORM: 63,
70
+ PIXEL_FORMAT_R8_SINT: 64,
71
+ PIXEL_FORMAT_A8_UNORM: 65,
72
+ PIXEL_FORMAT_R1_UNORM: 66,
73
+ PIXEL_FORMAT_R9G9B9E5_SHAREDEXP: 67,
74
+ PIXEL_FORMAT_R8G8_B8G8_UNORM: 68,
75
+ PIXEL_FORMAT_G8R8_G8B8_UNORM: 69,
76
+ PIXEL_FORMAT_BC1_TYPELESS: 70,
77
+ PIXEL_FORMAT_BC1_UNORM: 71,
78
+ PIXEL_FORMAT_BC1_UNORM_SRGB: 72,
79
+ PIXEL_FORMAT_BC2_TYPELESS: 73,
80
+ PIXEL_FORMAT_BC2_UNORM: 74,
81
+ PIXEL_FORMAT_BC2_UNORM_SRGB: 75,
82
+ PIXEL_FORMAT_BC3_TYPELESS: 76,
83
+ PIXEL_FORMAT_BC3_UNORM: 77,
84
+ PIXEL_FORMAT_BC3_UNORM_SRGB: 78,
85
+ PIXEL_FORMAT_BC4_TYPELESS: 79,
86
+ PIXEL_FORMAT_BC4_UNORM: 80,
87
+ PIXEL_FORMAT_BC4_SNORM: 81,
88
+ PIXEL_FORMAT_BC5_TYPELESS: 82,
89
+ PIXEL_FORMAT_BC5_UNORM: 83,
90
+ PIXEL_FORMAT_BC5_SNORM: 84,
91
+ PIXEL_FORMAT_B5G6R5_UNORM: 85,
92
+ PIXEL_FORMAT_B5G5R5A1_UNORM: 86,
93
+ PIXEL_FORMAT_B8G8R8A8_UNORM: 87,
94
+ PIXEL_FORMAT_B8G8R8X8_UNORM: 88,
95
+ PIXEL_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: 89,
96
+ PIXEL_FORMAT_B8G8R8A8_TYPELESS: 90,
97
+ PIXEL_FORMAT_B8G8R8A8_UNORM_SRGB: 91,
98
+ PIXEL_FORMAT_B8G8R8X8_TYPELESS: 92,
99
+ PIXEL_FORMAT_B8G8R8X8_UNORM_SRGB: 93,
100
+ PIXEL_FORMAT_BC6H_TYPELESS: 94,
101
+ PIXEL_FORMAT_BC6H_UF16: 95,
102
+ PIXEL_FORMAT_BC6H_SF16: 96,
103
+ PIXEL_FORMAT_BC7_TYPELESS: 97,
104
+ PIXEL_FORMAT_BC7_UNORM: 98,
105
+ PIXEL_FORMAT_BC7_UNORM_SRGB: 99,
106
+ PIXEL_FORMAT_SENTINEL: 100,
107
+ PIXEL_FORMAT_FORCE_UINT: 4294967295
108
+ });
109
+
110
+ export const DepthStencilFormat = Object.freeze({
111
+ DSFMT_UNKNOWN: 0,
112
+ DSFMT_D24S8: 1,
113
+ DSFMT_D24X8: 2,
114
+ DSFMT_D24FS8: 3,
115
+ DSFMT_D32F: 4,
116
+ DSFMT_D32: 5,
117
+ DSFMT_READABLE: 6,
118
+ DSFMT_AUTO: 7,
119
+ DSFMT_D16_LOCKABLE: 8,
120
+ DSFMT_D15S1: 9,
121
+ DSFMT_D24X4S4: 10,
122
+ DSFMT_D16: 11,
123
+ DSFMT_D32F_LOCKABLE: 12
124
+ });
125
+
126
+ /** Carbon texture/buffer view type (Tr2RenderContextEnum::TextureType). */
127
+ export const TextureType = Object.freeze({
128
+ TEX_TYPE_1D: 1,
129
+ TEX_TYPE_2D: 2,
130
+ TEX_TYPE_3D: 3,
131
+ TEX_TYPE_CUBE: 4,
132
+ TEX_TYPE_TYPELESS: 5,
133
+ TEX_TYPE_BUFFER: 6,
134
+ TEX_TYPE_STRUCTURED_BUFFER: 7,
135
+ TEX_TYPE_TBUFFER: 8,
136
+ TEX_TYPE_BYTEADDRESS_BUFFER: 9,
137
+ TEX_TYPE_UAV_RWTYPED: 10,
138
+ TEX_TYPE_UAV_RWSTRUCTURED: 11,
139
+ TEX_TYPE_UAV_RWBYTEADDRESS: 12,
140
+ TEX_TYPE_UAV_APPEND_STRUCTURED: 13,
141
+ TEX_TYPE_UAV_CONSUME_STRUCTURED: 14,
142
+ TEX_TYPE_UAV_RWSTRUCTURED_WITH_COUNTER: 15,
143
+ TEX_TYPE_RAYTRACING_ACCELERATION_STRUCTURE: 16,
144
+ TEX_TYPE_INVALID: 17
145
+ });
@@ -0,0 +1,5 @@
1
+ export * from "./formats.js";
2
+ export * from "./resources.js";
3
+ export * from "./presentation.js";
4
+ export * from "./upscaling.js";
5
+ export * from "./window.js";
@@ -0,0 +1,125 @@
1
+ // Ported from CarbonEngine (MIT, (c) 2026 CCP Games) - https://github.com/carbonengine/trinity
2
+ // trinityal/Tr2RenderContextEnum.h (SwapEffect, PresentInterval, RenderState)
3
+
4
+ export const SwapEffect = Object.freeze({
5
+ SWAP_EFFECT_DISCARD: 0,
6
+ SWAP_EFFECT_SEQUENTIAL: 1
7
+ });
8
+
9
+ export const PresentInterval = Object.freeze({
10
+ PRESENT_INTERVAL_IMMEDIATE: 0,
11
+ PRESENT_INTERVAL_ONE: 1
12
+ });
13
+
14
+ /** Sparse D3D-derived render state ids. */
15
+ export const RenderState = Object.freeze({
16
+ RS_ZENABLE: 7,
17
+ RS_FILLMODE: 8,
18
+ RS_SHADEMODE: 9,
19
+ RS_ZWRITEENABLE: 14,
20
+ RS_ALPHATESTENABLE: 15,
21
+ RS_LASTPIXEL: 16,
22
+ RS_SRCBLEND: 19,
23
+ RS_DESTBLEND: 20,
24
+ RS_CULLMODE: 22,
25
+ RS_ZFUNC: 23,
26
+ RS_ALPHAREF: 24,
27
+ RS_ALPHAFUNC: 25,
28
+ RS_DITHERENABLE: 26,
29
+ RS_ALPHABLENDENABLE: 27,
30
+ RS_FOGENABLE: 28,
31
+ RS_SPECULARENABLE: 29,
32
+ RS_FOGCOLOR: 34,
33
+ RS_FOGTABLEMODE: 35,
34
+ RS_FOGSTART: 36,
35
+ RS_FOGEND: 37,
36
+ RS_FOGDENSITY: 38,
37
+ RS_RANGEFOGENABLE: 48,
38
+ RS_STENCILENABLE: 52,
39
+ RS_STENCILFAIL: 53,
40
+ RS_STENCILZFAIL: 54,
41
+ RS_STENCILPASS: 55,
42
+ RS_STENCILFUNC: 56,
43
+ RS_STENCILREF: 57,
44
+ RS_STENCILMASK: 58,
45
+ RS_STENCILWRITEMASK: 59,
46
+ RS_TEXTUREFACTOR: 60,
47
+ RS_DEPTH_CLIP_ENABLE: 61,
48
+ RS_WRAP0: 128,
49
+ RS_WRAP1: 129,
50
+ RS_WRAP2: 130,
51
+ RS_WRAP3: 131,
52
+ RS_WRAP4: 132,
53
+ RS_WRAP5: 133,
54
+ RS_WRAP6: 134,
55
+ RS_WRAP7: 135,
56
+ RS_CLIPPING: 136,
57
+ RS_LIGHTING: 137,
58
+ RS_AMBIENT: 139,
59
+ RS_FOGVERTEXMODE: 140,
60
+ RS_COLORVERTEX: 141,
61
+ RS_LOCALVIEWER: 142,
62
+ RS_NORMALIZENORMALS: 143,
63
+ RS_DIFFUSEMATERIALSOURCE: 145,
64
+ RS_SPECULARMATERIALSOURCE: 146,
65
+ RS_AMBIENTMATERIALSOURCE: 147,
66
+ RS_EMISSIVEMATERIALSOURCE: 148,
67
+ RS_VERTEXBLEND: 151,
68
+ RS_CLIPPLANEENABLE: 152,
69
+ RS_POINTSIZE: 154,
70
+ RS_POINTSIZE_MIN: 155,
71
+ RS_POINTSPRITEENABLE: 156,
72
+ RS_POINTSCALEENABLE: 157,
73
+ RS_POINTSCALE_A: 158,
74
+ RS_POINTSCALE_B: 159,
75
+ RS_POINTSCALE_C: 160,
76
+ RS_MULTISAMPLEANTIALIAS: 161,
77
+ RS_MULTISAMPLEMASK: 162,
78
+ RS_PATCHEDGESTYLE: 163,
79
+ RS_DEBUGMONITORTOKEN: 165,
80
+ RS_POINTSIZE_MAX: 166,
81
+ RS_INDEXEDVERTEXBLENDENABLE: 167,
82
+ RS_COLORWRITEENABLE: 168,
83
+ RS_TWEENFACTOR: 170,
84
+ RS_BLENDOP: 171,
85
+ RS_POSITIONDEGREE: 172,
86
+ RS_NORMALDEGREE: 173,
87
+ RS_SLOPESCALEDEPTHBIAS: 175,
88
+ RS_ANTIALIASEDLINEENABLE: 176,
89
+ RS_MINTESSELLATIONLEVEL: 178,
90
+ RS_MAXTESSELLATIONLEVEL: 179,
91
+ RS_ADAPTIVETESS_X: 180,
92
+ RS_ADAPTIVETESS_Y: 181,
93
+ RS_ADAPTIVETESS_Z: 182,
94
+ RS_ADAPTIVETESS_W: 183,
95
+ RS_ENABLEADAPTIVETESSELLATION: 184,
96
+ RS_TWOSIDEDSTENCILMODE: 185,
97
+ RS_CCW_STENCILFAIL: 186,
98
+ RS_CCW_STENCILZFAIL: 187,
99
+ RS_CCW_STENCILPASS: 188,
100
+ RS_CCW_STENCILFUNC: 189,
101
+ RS_COLORWRITEENABLE1: 190,
102
+ RS_COLORWRITEENABLE2: 191,
103
+ RS_COLORWRITEENABLE3: 192,
104
+ RS_BLENDFACTOR: 193,
105
+ RS_SRGBWRITEENABLE: 194,
106
+ RS_DEPTHBIAS: 195,
107
+ RS_WRAP8: 198,
108
+ RS_WRAP9: 199,
109
+ RS_WRAP10: 200,
110
+ RS_WRAP11: 201,
111
+ RS_WRAP12: 202,
112
+ RS_WRAP13: 203,
113
+ RS_WRAP14: 204,
114
+ RS_WRAP15: 205,
115
+ RS_SEPARATEALPHABLENDENABLE: 206,
116
+ RS_SRCBLENDALPHA: 207,
117
+ RS_DESTBLENDALPHA: 208,
118
+ RS_BLENDOPALPHA: 209,
119
+ RS_ZBIAS: 47,
120
+ // RS_SCISSORTESTENABLE: 174 — present in ccpwgl (src/global/constant/d3d.js)
121
+ // but not in Carbon's Tr2RenderContextEnum::RenderState. Kept commented in
122
+ // case a consumer needs the D3D9 scissor-test state later.
123
+ RS_MAX_STATE: 210,
124
+ RS_FORCE_DWORD: 0
125
+ });
@@ -0,0 +1,27 @@
1
+ // Ported from CarbonEngine (MIT, (c) 2026 CCP Games) - https://github.com/carbonengine/trinity
2
+ // trinityal/Tr2RenderContextEnum.h (Tr2CpuUsage, Tr2GpuUsage namespaces)
3
+
4
+ /** CPU access usage flags. */
5
+ export const Tr2CpuUsage = Object.freeze({
6
+ NONE: 0,
7
+ READ: 1,
8
+ WRITE: 2,
9
+ READ_OFTEN: 5,
10
+ WRITE_OFTEN: 10,
11
+ NON_SYNCRONIZED_WRITE: 16
12
+ });
13
+
14
+ /** GPU resource usage flags. */
15
+ export const Tr2GpuUsage = Object.freeze({
16
+ NONE: 0,
17
+ VERTEX_BUFFER: 1,
18
+ INDEX_BUFFER: 2,
19
+ RENDER_TARGET: 4,
20
+ DEPTH_STENCIL: 8,
21
+ SHADER_RESOURCE: 16,
22
+ UNORDERED_ACCESS: 32,
23
+ COPY_DESTINATION: 64,
24
+ DRAW_INDIRECT_ARGS: 128,
25
+ ACCELERATION_STRUCTURE: 256,
26
+ SHARED: 512
27
+ });
@@ -0,0 +1,22 @@
1
+ // Ported from CarbonEngine (MIT, (c) 2026 CCP Games) - https://github.com/carbonengine/trinity
2
+ // trinityal/include/upscaling/Tr2UpscalingAL.h (Technique, Setting)
3
+
4
+ export const UpscalingTechnique = Object.freeze({
5
+ NONE: 0,
6
+ FSR1: 1,
7
+ FSR2: 2,
8
+ FSR3: 3,
9
+ DLSS: 4,
10
+ XESS: 5,
11
+ METALFX: 6
12
+ });
13
+
14
+ /** Upscaling quality setting flags. */
15
+ export const UpscalingSetting = Object.freeze({
16
+ NATIVE: 1,
17
+ ULTRA_QUALITY: 2,
18
+ QUALITY: 4,
19
+ BALANCED: 8,
20
+ PERFORMANCE: 16,
21
+ ULTRA_PERFORMANCE: 32
22
+ });
@@ -0,0 +1,20 @@
1
+ // Ported from CarbonEngine (MIT, (c) 2026 CCP Games) - https://github.com/carbonengine/trinity
2
+ // trinity/UI/Tr2MainWindow.h (Tr2WindowMode, Tr2WindowShowState, Tr2ImeState_MacOS namespaces)
3
+
4
+ export const Tr2WindowMode = Object.freeze({
5
+ FULL_SCREEN: 0,
6
+ WINDOWED: 1,
7
+ FIXED_WINDOW: 2
8
+ });
9
+
10
+ export const Tr2WindowShowState = Object.freeze({
11
+ NORMAL: 0,
12
+ MAXIMIZED: 1,
13
+ MINIMIZED: 2
14
+ });
15
+
16
+ export const Tr2ImeState_MacOS = Object.freeze({
17
+ DISABLED: 0,
18
+ READY: 1,
19
+ BLOCKING: 2
20
+ });
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Gets an object's own CarbonEngineJS runtime state without creating it.
3
+ *
4
+ * Runtime state is intentionally stored on the object for inspection while
5
+ * remaining outside enumeration and serialization.
6
+ *
7
+ * @param {object|Function} target
8
+ * @returns {object|null}
9
+ */
10
+ export function getRuntimeState(target)
11
+ {
12
+ assertRuntimeStateTarget(target);
13
+ if (!Object.prototype.hasOwnProperty.call(target, "__state")) return null;
14
+
15
+ const state = target.__state;
16
+ if (!state || typeof state !== "object" || Array.isArray(state))
17
+ {
18
+ throw new TypeError("Existing __state must be an object.");
19
+ }
20
+ return state;
21
+ }
22
+
23
+ /**
24
+ * Gets or creates an object's own non-enumerable runtime state.
25
+ *
26
+ * @param {object|Function} target
27
+ * @returns {object}
28
+ */
29
+ export function ensureRuntimeState(target)
30
+ {
31
+ const existing = getRuntimeState(target);
32
+ if (existing) return existing;
33
+
34
+ const state = {};
35
+ Object.defineProperty(target, "__state", {
36
+ value: state,
37
+ enumerable: false,
38
+ configurable: false,
39
+ writable: false
40
+ });
41
+ return state;
42
+ }
43
+
44
+ function assertRuntimeStateTarget(target)
45
+ {
46
+ if ((typeof target !== "object" || target === null) && typeof target !== "function")
47
+ {
48
+ throw new TypeError("Runtime state requires an object or function.");
49
+ }
50
+ }