Skip to content

Commit 259919d

Browse files
committed
feat(asset-bundle): add "checkCircleDependency","removeDupliceData" logic
1 parent 8e5c3c7 commit 259919d

23 files changed

+1560
-307
lines changed

src/asset/assemble/AssembleWholeWDBSystem.re

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ let _buildBufferArray = (buffers: array(int), binBuffer) => {
112112
[|binBuffer|];
113113
};
114114

115-
let _checkWDB = dataView => {
115+
let checkWDB = dataView => {
116116
WonderLog.Contract.requireCheck(
117117
() => {
118118
open WonderLog;
@@ -189,7 +189,7 @@ let assembleWDBData =
189189

190190
let assemble = (wdb, configTuple, state) => {
191191
let (wdFileContent, streamChunk, binBuffer) =
192-
BufferUtils.decodeWDB(wdb, _checkWDB);
192+
BufferUtils.decodeWDB(wdb, checkWDB);
193193

194194
assembleWDBData(
195195
wdFileContent |> Js.Json.parseExn |> Obj.magic,
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
open WDType;
2+
3+
open Js.Typed_array;
4+
5+
let _getBufferData =
6+
(
7+
{accessors, bufferViews, buffers},
8+
(accessorIndex, dataViewArr, bytes_per_element),
9+
) => {
10+
WonderLog.Contract.requireCheck(
11+
() =>
12+
WonderLog.(
13+
Contract.(
14+
Operators.(
15+
test(
16+
Log.buildAssertMessage(
17+
~expect={j|not support interleaved buffer data|j},
18+
~actual={j|is interleaved|j},
19+
),
20+
() => {
21+
let accessor = Array.unsafe_get(accessors, accessorIndex);
22+
let {byteStride} =
23+
Array.unsafe_get(bufferViews, accessor.bufferView);
24+
25+
byteStride |> OptionService.isJsonSerializedValueNone ?
26+
assertPass() :
27+
byteStride
28+
|> OptionService.unsafeGetJsonSerializedValue
29+
== BufferUtils.getAccessorTypeSize(accessor.type_)
30+
* bytes_per_element;
31+
},
32+
)
33+
)
34+
)
35+
),
36+
IsDebugMainService.getIsDebug(StateDataMain.stateData),
37+
);
38+
39+
let accessor = Array.unsafe_get(accessors, accessorIndex);
40+
let bufferView = Array.unsafe_get(bufferViews, accessor.bufferView);
41+
let dataView = Array.unsafe_get(dataViewArr, bufferView.buffer);
42+
43+
let offset = accessor.byteOffset + bufferView.byteOffset;
44+
45+
(
46+
dataView |> DataView.buffer,
47+
offset,
48+
BufferUtils.computeTypeArrayLengthByAccessorData(
49+
accessor.count,
50+
accessor.type_,
51+
),
52+
);
53+
};
54+
55+
let _getBufferPointData =
56+
(
57+
(accessorIndex, bytes_per_element, dataViewArr, wd),
58+
fromBufferRangeFunc,
59+
) => {
60+
let (arrayBuffer, offset, length) =
61+
_getBufferData(wd, (accessorIndex, dataViewArr, bytes_per_element));
62+
63+
fromBufferRangeFunc(arrayBuffer, ~offset, ~length);
64+
};
65+
66+
let getBufferAttributeData = (accessorIndex, dataViewArr, wd) =>
67+
_getBufferPointData(
68+
(accessorIndex, Float32Array._BYTES_PER_ELEMENT, dataViewArr, wd),
69+
Float32Array.fromBufferRange,
70+
);
71+
72+
let getAccessorComponentType = ({accessors}, accessorIndex) => {
73+
let accessor = Array.unsafe_get(accessors, accessorIndex);
74+
75+
accessor.componentType;
76+
};
77+
78+
let getBufferIndex16Data = (componentType, accessorIndex, dataViewArr, wd) =>
79+
switch (componentType) {
80+
| UNSIGNED_BYTE =>
81+
Uint16Array.from(
82+
_getBufferPointData(
83+
(accessorIndex, Uint8Array._BYTES_PER_ELEMENT, dataViewArr, wd),
84+
Uint8Array.fromBufferRange,
85+
)
86+
|> Obj.magic,
87+
)
88+
->Some
89+
| UNSIGNED_SHORT =>
90+
_getBufferPointData(
91+
(accessorIndex, Uint16Array._BYTES_PER_ELEMENT, dataViewArr, wd),
92+
Uint16Array.fromBufferRange,
93+
)
94+
->Some
95+
| _ => None
96+
};
97+
98+
let getBufferIndex32Data = (componentType, accessorIndex, dataViewArr, wd) =>
99+
switch (componentType) {
100+
| UNSIGNED_INT =>
101+
_getBufferPointData(
102+
(accessorIndex, Uint32Array._BYTES_PER_ELEMENT, dataViewArr, wd),
103+
Uint32Array.fromBufferRange,
104+
)
105+
->Some
106+
| _ => None
107+
};

src/asset/assemble/BatchOperateWholeSystem.re

Lines changed: 19 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -4,110 +4,6 @@ open WDType;
44

55
open Js.Typed_array;
66

7-
let _getAccessorComponentType = ({accessors}, accessorIndex) => {
8-
let accessor = Array.unsafe_get(accessors, accessorIndex);
9-
10-
accessor.componentType;
11-
};
12-
13-
let _getBufferData =
14-
(
15-
{accessors, bufferViews, buffers},
16-
(accessorIndex, dataViewArr, bytes_per_element),
17-
) => {
18-
WonderLog.Contract.requireCheck(
19-
() =>
20-
WonderLog.(
21-
Contract.(
22-
Operators.(
23-
test(
24-
Log.buildAssertMessage(
25-
~expect={j|not support interleaved buffer data|j},
26-
~actual={j|is interleaved|j},
27-
),
28-
() => {
29-
let accessor = Array.unsafe_get(accessors, accessorIndex);
30-
let {byteStride} =
31-
Array.unsafe_get(bufferViews, accessor.bufferView);
32-
33-
byteStride |> OptionService.isJsonSerializedValueNone ?
34-
assertPass() :
35-
byteStride
36-
|> OptionService.unsafeGetJsonSerializedValue
37-
== BufferUtils.getAccessorTypeSize(accessor.type_)
38-
* bytes_per_element;
39-
},
40-
)
41-
)
42-
)
43-
),
44-
IsDebugMainService.getIsDebug(StateDataMain.stateData),
45-
);
46-
47-
let accessor = Array.unsafe_get(accessors, accessorIndex);
48-
let bufferView = Array.unsafe_get(bufferViews, accessor.bufferView);
49-
let dataView = Array.unsafe_get(dataViewArr, bufferView.buffer);
50-
51-
let offset = accessor.byteOffset + bufferView.byteOffset;
52-
53-
(
54-
dataView |> DataView.buffer,
55-
offset,
56-
BufferUtils.computeTypeArrayLengthByAccessorData(
57-
accessor.count,
58-
accessor.type_,
59-
),
60-
);
61-
};
62-
63-
let _getBufferPointData =
64-
(
65-
(accessorIndex, bytes_per_element, dataViewArr, wd),
66-
fromBufferRangeFunc,
67-
) => {
68-
let (arrayBuffer, offset, length) =
69-
_getBufferData(wd, (accessorIndex, dataViewArr, bytes_per_element));
70-
71-
fromBufferRangeFunc(arrayBuffer, ~offset, ~length);
72-
};
73-
74-
let _getBufferAttributeData = (accessorIndex, dataViewArr, wd) =>
75-
_getBufferPointData(
76-
(accessorIndex, Float32Array._BYTES_PER_ELEMENT, dataViewArr, wd),
77-
Float32Array.fromBufferRange,
78-
);
79-
80-
let _getBufferIndex16Data = (componentType, accessorIndex, dataViewArr, wd) =>
81-
switch (componentType) {
82-
| UNSIGNED_BYTE =>
83-
Uint16Array.from(
84-
_getBufferPointData(
85-
(accessorIndex, Uint8Array._BYTES_PER_ELEMENT, dataViewArr, wd),
86-
Uint8Array.fromBufferRange,
87-
)
88-
|> Obj.magic,
89-
)
90-
->Some
91-
| UNSIGNED_SHORT =>
92-
_getBufferPointData(
93-
(accessorIndex, Uint16Array._BYTES_PER_ELEMENT, dataViewArr, wd),
94-
Uint16Array.fromBufferRange,
95-
)
96-
->Some
97-
| _ => None
98-
};
99-
100-
let _getBufferIndex32Data = (componentType, accessorIndex, dataViewArr, wd) =>
101-
switch (componentType) {
102-
| UNSIGNED_INT =>
103-
_getBufferPointData(
104-
(accessorIndex, Uint32Array._BYTES_PER_ELEMENT, dataViewArr, wd),
105-
Uint32Array.fromBufferRange,
106-
)
107-
->Some
108-
| _ => None
109-
};
110-
1117
let _batchSetGeometryData =
1128
({geometrys} as wd, geometryArr, bufferArr, state) => {
1139
let dataViewArr =
@@ -128,15 +24,19 @@ let _batchSetGeometryData =
12824
let state =
12925
VerticesGeometryMainService.setVerticesByTypeArray(
13026
geometry,
131-
_getBufferAttributeData(position, dataViewArr, wd),
27+
BatchOperateWholeGeometrySystem.getBufferAttributeData(
28+
position,
29+
dataViewArr,
30+
wd,
31+
),
13232
state,
13333
);
13434
let state =
13535
normal |> OptionService.isJsonSerializedValueNone ?
13636
state :
13737
NormalsGeometryMainService.setNormalsByTypeArray(
13838
geometry,
139-
_getBufferAttributeData(
39+
BatchOperateWholeGeometrySystem.getBufferAttributeData(
14040
normal |> OptionService.unsafeGetJsonSerializedValue,
14141
dataViewArr,
14242
wd,
@@ -148,18 +48,27 @@ let _batchSetGeometryData =
14848
state :
14949
TexCoordsGeometryMainService.setTexCoordsByTypeArray(
15050
geometry,
151-
_getBufferAttributeData(
51+
BatchOperateWholeGeometrySystem.getBufferAttributeData(
15252
texCoord |> OptionService.unsafeGetJsonSerializedValue,
15353
dataViewArr,
15454
wd,
15555
),
15656
state,
15757
);
15858

159-
let componentType = _getAccessorComponentType(wd, index);
59+
let componentType =
60+
BatchOperateWholeGeometrySystem.getAccessorComponentType(
61+
wd,
62+
index,
63+
);
16064
let state =
16165
switch (
162-
_getBufferIndex16Data(componentType, index, dataViewArr, wd)
66+
BatchOperateWholeGeometrySystem.getBufferIndex16Data(
67+
componentType,
68+
index,
69+
dataViewArr,
70+
wd,
71+
)
16372
) {
16473
| Some(data) =>
16574
IndicesGeometryMainService.setIndicesByUint16Array(
@@ -169,7 +78,7 @@ let _batchSetGeometryData =
16978
)
17079
| None =>
17180
switch (
172-
_getBufferIndex32Data(
81+
BatchOperateWholeGeometrySystem.getBufferIndex32Data(
17382
componentType,
17483
index,
17584
dataViewArr,

src/asset/generate/BuildGeometryDataSystem.re

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ open Js.Typed_array;
22

33
open GenerateSceneGraphType;
44

5-
let _getComponentType = pointType =>
5+
let getComponentType = pointType =>
66
switch (pointType) {
77
| Vertex
88
| Normal
@@ -11,7 +11,7 @@ let _getComponentType = pointType =>
1111
| Index32 => 5125
1212
};
1313

14-
let _getType = pointType =>
14+
let getType = pointType =>
1515
switch (pointType) {
1616
| Vertex
1717
| Normal => "VEC3"
@@ -46,8 +46,8 @@ let _addBufferViewData =
4646
bufferView: bufferViewDataArr |> Js.Array.length,
4747
/* byteOffset: 0, */
4848
count: pointsCount,
49-
componentType: _getComponentType(pointType),
50-
type_: _getType(pointType),
49+
componentType: getComponentType(pointType),
50+
type_: getType(pointType),
5151
}),
5252
bufferViewDataArr
5353
|> ArrayService.push({

src/asset/generate/GenerateCommon.re

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,18 @@ let checkShouldHasNoSlot = map =>
1010
() =>
1111
map
1212
|> WonderCommonlib.MutableSparseMapService.getValidValues
13-
|> WonderCommonlib.MutableSparseMapService.length == (map |> WonderCommonlib.MutableSparseMapService.length)
13+
|> WonderCommonlib.MutableSparseMapService.length
14+
== (map |> WonderCommonlib.MutableSparseMapService.length)
1415
)
1516
)
1617
)
17-
);
18+
);
19+
20+
let buildBufferViewData = (byteOffset, byteLength) => (
21+
0,
22+
byteOffset,
23+
byteLength,
24+
None,
25+
);
26+
27+
let buildAccessorByteOffset = () => 0;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
type abPath = string;
2+
3+
type abDataArr = array((abPath, Js.Typed_array.ArrayBuffer.t));
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
open AllABType;
2+
3+
type imageDependencyRelation =
4+
WonderCommonlib.ImmutableHashMapService.t(array(abPath));
5+
6+
type geometryDependencyRelation =
7+
WonderCommonlib.ImmutableHashMapService.t(array(abPath));
8+
9+
/* type dependencyRelation =
10+
WonderCommonlib.ImmutableHashMapService.t(array(abPath)); */
11+
12+
type dependencyRelation = {
13+
imageDependencyRelation,
14+
geometryDependencyRelation
15+
};
16+
17+
/* {
18+
19+
}; */
20+
21+
/* type imageDependencyData = {
22+
23+
};
24+
25+
26+
type geometryDependencyData = {
27+
28+
};
29+
30+
type dependencyData = {
31+
image: imageDependencyData,
32+
geometry: geometryDependencyData
33+
}; */

0 commit comments

Comments
 (0)