Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vimx, BFast #28

Open
wants to merge 119 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 85 commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
74ae594
imported code from vim-ts dev branch
vim-sroberge Aug 28, 2023
982122a
package update
vim-sroberge Aug 28, 2023
6ac812b
added abort to remote geometry and bfast
vim-sroberge Aug 30, 2023
4f31190
progress on VimX
vim-sroberge Sep 26, 2023
5d556b4
Vimx good state for integration into vimtool
vim-sroberge Sep 29, 2023
61cfdaf
moved BFast.Next to bfast folder
vim-sroberge Sep 29, 2023
30ed18a
moved BfastNext.Test to bfast folder
vim-sroberge Sep 29, 2023
84c9ce6
moved vimx.conversion to format folder
vim-sroberge Sep 29, 2023
c7fdba0
missing project
vim-sroberge Sep 29, 2023
9096423
removed log
vim-sroberge Sep 29, 2023
28d98bf
removed temp files from import
vim-sroberge Sep 29, 2023
dd14b8c
Moved compression stuff into BFastNext
vim-sroberge Oct 2, 2023
eacd702
renamed attributes to avoid conflicts
vim-sroberge Oct 3, 2023
0de6feb
ts update to match vimx chunks
vim-sroberge Oct 4, 2023
0b27fe0
added download parameter to Load
vim-sroberge Oct 5, 2023
976e49a
Merge remote-tracking branch 'origin/mavimaec/ts-fix' into sroberge/vimx
vim-sroberge Oct 5, 2023
2214d55
Implemented proper vimx chunks
vim-sroberge Oct 10, 2023
aeb5926
Implemented chunks support for viewer.
vim-sroberge Oct 10, 2023
ea501b4
fixed case when no instance flags
vim-sroberge Oct 10, 2023
12ed372
ignore type files
vim-sroberge Oct 31, 2023
0be6e28
various changes
vim-sroberge Oct 31, 2023
ecc61a4
dist files for ts
vim-sroberge Nov 30, 2023
02e1d98
Added getEnumerable and setEnumerable to bfastnext
vim-sroberge Nov 30, 2023
b65d6ac
BigG3dWriter implementation using bfastNext
vim-sroberge Nov 30, 2023
ebf307b
changed to a power of 2
vim-sroberge Dec 1, 2023
fdd7a70
moved features from serializer to vimScene using bfastnext.
vim-sroberge Dec 1, 2023
c587f5c
removed header methods
vim-sroberge Dec 1, 2023
0acfd5a
Added instance transforms to scene
vim-sroberge Dec 5, 2023
fec4ff8
Removed all references to BFast except in g3d.
vim-sroberge Dec 5, 2023
bcb8663
small adjustments
vim-sroberge Dec 6, 2023
0caec82
Split Bfast into BFastNext, BFast.Core and Vim.Buffers
vim-sroberge Dec 6, 2023
5d5128e
missing file
vim-sroberge Dec 6, 2023
630645a
removed bfast
vim-sroberge Dec 7, 2023
1a73157
g3d based on bfast
vim-sroberge Dec 8, 2023
7fb8a55
removed unlinked files after projects cleanup
vim-sroberge Dec 8, 2023
220c310
removed serializer file. Removed bfastns prefix
vim-sroberge Dec 11, 2023
ec9878a
added counts
vim-sroberge Dec 11, 2023
5e27223
Moved Transform from mesh to scene.
vim-sroberge Dec 15, 2023
78d010c
removed remoteg3d, removed meshInstanceCounts
vim-sroberge Dec 18, 2023
93122f8
Working vimx mamacos
vim-sroberge Dec 21, 2023
83adbe7
vimx mamacos optims
vim-sroberge Jan 10, 2024
01eba97
NUnit version to match with vimaec repo
vim-sroberge Jan 11, 2024
63f9f94
Merge remote-tracking branch 'origin/develop' into sroberge/vimx
vim-sroberge Jan 12, 2024
5920187
fixed nunit versions to match vimaec
vim-sroberge Jan 12, 2024
2a0f3c6
removed uneeded packages
vim-sroberge Jan 12, 2024
46d4470
updated test and removed old tests.
vim-sroberge Jan 16, 2024
90c4bb6
check for file before delete
vim-sroberge Jan 16, 2024
cf49ba0
simplified paths using vimrepopaths
vim-sroberge Jan 16, 2024
d6e6dd2
create path
vim-sroberge Jan 16, 2024
0e568fb
updated g3d tests
vim-sroberge Jan 16, 2024
1f21f39
removed old tests
vim-sroberge Jan 16, 2024
ea1b8e1
g3d.next refactor
vim-sroberge Jan 18, 2024
add8ea3
fixed namespaces, removed dead code
vim-sroberge Jan 22, 2024
b49ac13
Merge pull request #26 from vimaec/sroberge/vimx-g3d
vim-sroberge Jan 22, 2024
8838a11
create directory if needed
vim-sroberge Jan 22, 2024
ee5da48
create directory if needed, some test cleanup
vim-sroberge Jan 22, 2024
fd2b341
create directory if needed, some test cleanup
vim-sroberge Jan 22, 2024
9e55e23
Merge branch 'sroberge/vimx-g3d' of https://github.com/vimaec/vim-for…
vim-sroberge Jan 22, 2024
6628fc0
Merge branch 'sroberge/vimx-g3d' into sroberge/vimx
vim-sroberge Jan 22, 2024
068cac6
removed attribute project
vim-sroberge Jan 23, 2024
3646e0c
removed writting to file, just test to and from bfast.
vim-sroberge Jan 23, 2024
9ac5e8c
removed comment
vim-sroberge Jan 23, 2024
f63a846
removed rogue capital letter.
vim-sroberge Jan 23, 2024
516bca8
removed unneeded reference
vim-sroberge Jan 23, 2024
0fa5786
New write code for bfast.
vim-sroberge Feb 8, 2024
0a64944
BFast update
vim-sroberge Feb 12, 2024
7bcc35b
small changes
vim-sroberge Feb 12, 2024
4bf88eb
Renamed BFastNS to BFastLib
vim-sroberge Feb 12, 2024
a50271e
changed namespace suffix from NS to Lib
vim-sroberge Feb 12, 2024
32b5700
Merge pull request #29 from vimaec/sroberge/vimx_bfast
vim-sroberge Feb 12, 2024
29923c7
updated codegen
vim-sroberge Feb 12, 2024
98676e9
Merge pull request #30 from vimaec/sroberge/vimx_bfast
vim-sroberge Feb 12, 2024
b4cfbfe
BFast now throws when trying to convert invalid data to bfast
vim-sroberge Feb 13, 2024
3f0dae2
handle padding in existing vims
vim-sroberge Feb 13, 2024
a8d0f52
check that names are distincts
vim-sroberge Feb 13, 2024
95523d3
changed path \ to /
vim-sroberge Feb 13, 2024
b8baedc
removed dead file.
vim-sroberge Feb 14, 2024
c8b4898
Implemented enumerable read. Added comments and more.
vim-sroberge Feb 14, 2024
f768a83
Changed Convert to cast to better match function.
vim-sroberge Feb 14, 2024
0c5d857
Moved unsafe code to its own folder
vim-sroberge Feb 14, 2024
758672e
rename bfastNextExtensions
vim-sroberge Feb 14, 2024
52047ec
extracted stream copy to core
vim-sroberge Feb 14, 2024
df90fea
Replaced code with ToMemoryStream
vim-sroberge Feb 14, 2024
f416a6b
minor changes
vim-sroberge Feb 14, 2024
1151040
missing using
vim-sroberge Feb 14, 2024
99786aa
readme update to remove 64byte alignment from spec
vim-sroberge Feb 16, 2024
5ed7681
added licence to all project
vim-sroberge Feb 16, 2024
c345cd6
added folder src/ts/dist/ to git ignore
vim-sroberge Feb 21, 2024
9c890d0
removed useless using
vim-sroberge Feb 21, 2024
4134b4f
renames
vim-sroberge Feb 21, 2024
d5cde87
Added Try versions of Get
vim-sroberge Feb 21, 2024
eb9b6d2
remove to rename
vim-sroberge Feb 21, 2024
4153716
License with capital letters
vim-sroberge Feb 21, 2024
a4dd3bc
added <PackagePath> attributes to all package license item
vim-sroberge Feb 21, 2024
7d49db2
renamed license
vim-sroberge Feb 21, 2024
999a7cf
Added support for duplicated buffer names
vim-sroberge Feb 22, 2024
6ba6c13
added missing header to serialized header
vim-sroberge Feb 22, 2024
52e1f05
removed dead reference
vim-sroberge Feb 22, 2024
1428db4
removed verbose flag and exposed logs
vim-sroberge Feb 27, 2024
87813ff
typo
vim-sroberge Feb 27, 2024
8ba3c4d
fixed attribute name
vim-sroberge Feb 27, 2024
37a8fc2
model update
vim-sroberge Feb 27, 2024
6c72004
Merge branch 'sroberge/vimx_stable' of https://github.com/vimaec/vim-…
vim-sroberge Feb 27, 2024
38f780b
made logs field public
vim-sroberge Feb 27, 2024
2f986cf
Moved http scripts to http folder
vim-sroberge Feb 27, 2024
235c678
removed get encoding from remote buffer
vim-sroberge Feb 27, 2024
6f0494d
renamed RetryRequest
vim-sroberge Feb 27, 2024
c292b2a
rename xhr to request
vim-sroberge Feb 29, 2024
e87c301
Made root be default source name
vim-sroberge Feb 29, 2024
958908b
"version": "1.0.6"
vim-sroberge Feb 29, 2024
f4370ab
fixed off by one issue in bounding boxes
vim-sroberge Mar 15, 2024
26d6c78
Check for nulls before writing document components
vim-sroberge Mar 25, 2024
511ff4a
Change console.write to debug.write
vim-sroberge Mar 25, 2024
9054031
removed unused code
vim-sroberge Mar 25, 2024
71182ee
getHeader from stream
vim-sroberge Mar 26, 2024
32ff68c
getHeader from stream
vim-sroberge Mar 26, 2024
320c28d
added a test for partial documents
vim-sroberge Mar 26, 2024
0ea66a6
extracted header logic to header file.
vim-sroberge Mar 26, 2024
69662ac
duplicated method
vim-sroberge Mar 26, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
215 changes: 215 additions & 0 deletions src/cs/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,215 @@
# Remove the line below if you want to inherit .editorconfig settings from higher directories
root = true

# C# files
[*.cs]

# Default severity for analyzer diagnostics with category 'Style' (escalated to build warnings)
# This causes the build to fail for the cases below that are suffixed with :error
dotnet_analyzer_diagnostic.category-Style.severity = default

#### Core EditorConfig Options ####

# Indentation and spacing
indent_size = 4
indent_style = space
tab_width = 4

# New line preferences
end_of_line = crlf
insert_final_newline = true

#### .NET Coding Conventions ####

# Organize usings
dotnet_separate_import_directive_groups = false
dotnet_sort_system_directives_first = false
file_header_template = unset

# this. and Me. preferences
dotnet_style_qualification_for_event = false:error
dotnet_style_qualification_for_field = false:error
dotnet_style_qualification_for_method = false:error
dotnet_style_qualification_for_property = false:error

# Language keywords vs BCL types preferences
dotnet_style_predefined_type_for_locals_parameters_members = true
dotnet_style_predefined_type_for_member_access = true

# Parentheses preferences
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity
dotnet_style_parentheses_in_other_operators = never_if_unnecessary
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity

# Modifier preferences
dotnet_style_require_accessibility_modifiers = for_non_interface_members

# Expression-level preferences
dotnet_style_coalesce_expression = true
dotnet_style_collection_initializer = true
dotnet_style_explicit_tuple_names = true
dotnet_style_null_propagation = true
dotnet_style_object_initializer = true
dotnet_style_operator_placement_when_wrapping = beginning_of_line
dotnet_style_prefer_auto_properties = true:error
dotnet_style_prefer_compound_assignment = true
dotnet_style_prefer_conditional_expression_over_assignment = true
dotnet_style_prefer_conditional_expression_over_return = true
dotnet_style_prefer_inferred_anonymous_type_member_names = true
dotnet_style_prefer_inferred_tuple_names = true
dotnet_style_prefer_is_null_check_over_reference_equality_method = true
dotnet_style_prefer_simplified_boolean_expressions = true
dotnet_style_prefer_simplified_interpolation = true

# Field preferences
dotnet_style_readonly_field = true

# Parameter preferences
dotnet_code_quality_unused_parameters = all

# Suppression preferences
dotnet_remove_unnecessary_suppression_exclusions = none

#### C# Coding Conventions ####

# var preferences
csharp_style_var_elsewhere = true:error
csharp_style_var_for_built_in_types = true:error
csharp_style_var_when_type_is_apparent = true:error

# Expression-bodied members
csharp_style_expression_bodied_accessors = true:silent
csharp_style_expression_bodied_constructors = true:silent
csharp_style_expression_bodied_indexers = true:silent
csharp_style_expression_bodied_lambdas = true:silent
csharp_style_expression_bodied_local_functions = true:silent
csharp_style_expression_bodied_methods = true:silent
csharp_style_expression_bodied_operators = true:silent
csharp_style_expression_bodied_properties = true:silent

# Pattern matching preferences
csharp_style_pattern_matching_over_as_with_null_check = true
csharp_style_pattern_matching_over_is_with_cast_check = true
csharp_style_prefer_not_pattern = true
csharp_style_prefer_pattern_matching = true
csharp_style_prefer_switch_expression = true

# Null-checking preferences
csharp_style_conditional_delegate_call = true

# Modifier preferences
csharp_prefer_static_local_function = true
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async

# Code-block preferences
csharp_prefer_braces = when_multiline:error
csharp_prefer_simple_using_statement = true

# Expression-level preferences
csharp_prefer_simple_default_expression = true
csharp_style_deconstructed_variable_declaration = true
csharp_style_implicit_object_creation_when_type_is_apparent = true
csharp_style_inlined_variable_declaration = true
csharp_style_pattern_local_over_anonymous_function = true
csharp_style_prefer_index_operator = true
csharp_style_prefer_range_operator = true
csharp_style_throw_expression = true
csharp_style_unused_value_assignment_preference = discard_variable
csharp_style_unused_value_expression_statement_preference = discard_variable

# 'using' directive preferences
csharp_using_directive_placement = outside_namespace

#### C# Formatting Rules ####

# New line preferences
csharp_new_line_before_catch = true
csharp_new_line_before_else = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_open_brace = all
csharp_new_line_between_query_expression_clauses = true

# Indentation preferences
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents = true
csharp_indent_case_contents_when_block = true
csharp_indent_labels = one_less_than_current
csharp_indent_switch_labels = true

# Space preferences
csharp_space_after_cast = false
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_comma = true
csharp_space_after_dot = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_after_semicolon_in_for_statement = true
csharp_space_around_binary_operators = before_and_after
csharp_space_around_declaration_statements = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_before_comma = false
csharp_space_before_dot = false
csharp_space_before_open_square_brackets = false
csharp_space_before_semicolon_in_for_statement = false
csharp_space_between_empty_square_brackets = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_name_and_open_parenthesis = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_space_between_square_brackets = false

# Wrapping preferences
csharp_preserve_single_line_blocks = true
csharp_preserve_single_line_statements = true

#### Naming styles ####

# Naming rules

dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i

dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case

dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case

# Symbol specifications

dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers =

dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.types.required_modifiers =

dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.non_field_members.required_modifiers =

# Naming styles

dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case

dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.required_suffix =
dotnet_naming_style.begins_with_i.word_separator =
dotnet_naming_style.begins_with_i.capitalization = pascal_case

# Web development files use 2 spaces
[*.{js,jsx,ts,tsx,py,css,json}]
indent_size = 2
33 changes: 33 additions & 0 deletions src/cs/Vim.G3dNext.Tests/G3dNextTestUtils.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
using Vim.Math3d;

namespace Vim.G3dNext.Tests
{
public static class G3dNextTestUtils
{
public static G3dVim CreateTestG3d()
{
var g3d = new G3dVim(
instanceTransforms: new Matrix4x4[] { Matrix4x4.Identity },
instanceMeshes: new int[] { 0 },
instanceParents: new int[] { -1 },
instanceFlags: null,
meshSubmeshOffsets: new int[] { 0 },
submeshIndexOffsets: new int[] { 0, 3, 6 },
submeshMaterials: new int[] { 0 },
indices: new int[] { 0, 1, 2, 0, 3, 2, 1, 3, 2 },
positions: new Vector3[] { Vector3.Zero, Vector3.UnitX, Vector3.UnitY, Vector3.UnitZ },
materialColors: new Vector4[] { new Vector4(0.25f, 0.5f, 0.75f, 1) },
materialGlossiness: new float[] { 0.95f },
materialSmoothness: new float[] { 0.5f },
shapeColors: null,
shapeVertexOffsets: null,
shapeVertices: null,
shapeWidths: null
);
g3d.Validate();


return g3d;
}
}
}
24 changes: 24 additions & 0 deletions src/cs/Vim.G3dNext.Tests/Vim.G3dNext.Tests.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="NUnit" Version="3.13.2" />
<PackageReference Include="NUnit3TestAdapter" Version="4.3.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="../bfast/Vim.BFast/Vim.BFast.csproj" />
<ProjectReference Include="../g3d/Vim.G3dNext/Vim.G3dNext.csproj" />
<ProjectReference Include="../util/Vim.Util.Tests/Vim.Util.Tests.csproj" />
</ItemGroup>

</Project>
71 changes: 71 additions & 0 deletions src/cs/Vim.G3dNext.Tests/VimG3dNextTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
using NUnit.Framework;
using NUnit.Framework.Internal;
using Vim.BFastLib;
using Vim.Util.Tests;

namespace Vim.G3dNext.Tests
{
[TestFixture]
public static class VimG3dNextTests
{
[Test]
public static void Can_Read_G3d_From_Vim()
{
var g3d = G3dVim.FromVim(TestUtils.ResidencePath);
Assert.IsNotNull(g3d);
}

[Test]
public static void Can_Ignore_Extra_Attributes()
{
// Both G3dVim and G3dMaterial share 3 attributes
// G3dVim contains many more attributes
// We create a g3dMaterial from the bytes of a g3dVim
// Shows that extra attributes are ignored as they should.

var g3d = G3dNextTestUtils.CreateTestG3d();
var g3dMats = new G3dMaterials(g3d.ToBFast());

Assert.IsNotNull(g3dMats);
Assert.AreEqual(g3d.MaterialColors, g3dMats.MaterialColors);
Assert.AreEqual(g3d.MaterialGlossiness, g3dMats.MaterialGlossiness);
Assert.AreEqual(g3d.MaterialSmoothness, g3dMats.MaterialSmoothness);
}

[Test]
public static void Can_Write_And_Read()
{
var expected = G3dNextTestUtils.CreateTestG3d();
var g3d = new G3dVim(expected.ToBFast());
Assert.IsTrue(g3d.Equals(expected));
}

[Test]
public static void Can_Merge_two_g3d()
{
var g3d = G3dNextTestUtils.CreateTestG3d();
var merged = g3d.Merge(g3d);

var expected = new G3dVim(
instanceTransforms: g3d.InstanceTransforms.Concat(g3d.InstanceTransforms).ToArray(),
instanceMeshes: g3d.InstanceMeshes.Concat(g3d.InstanceMeshes.Select(i => i + g3d.GetMeshCount())).ToArray(),
instanceParents: g3d.InstanceParents.Concat(g3d.InstanceParents).ToArray(),
instanceFlags: null,
meshSubmeshOffsets: g3d.MeshSubmeshOffsets.Concat(g3d.MeshSubmeshOffsets.Select(i => g3d.GetSubmeshCount())).ToArray(),
submeshIndexOffsets: g3d.SubmeshIndexOffsets.Concat(g3d.SubmeshIndexOffsets.Select(i => i + g3d.GetIndexCount())).ToArray(),
submeshMaterials: g3d.SubmeshMaterials.Concat(g3d.SubmeshMaterials.Select(i => i + g3d.GetMaterialCount())).ToArray(),
indices: g3d.Indices.Concat(g3d.Indices.Select(i => i + g3d.Positions.Length)).ToArray(),
positions: g3d.Positions.Concat(g3d.Positions).ToArray(),
materialColors: g3d.MaterialColors.Concat(g3d.MaterialColors).ToArray(),
materialGlossiness: g3d.MaterialGlossiness.Concat(g3d.MaterialGlossiness).ToArray(),
materialSmoothness: g3d.MaterialSmoothness.Concat(g3d.MaterialSmoothness).ToArray(),
shapeColors: null,
shapeWidths: null,
shapeVertices: null,
shapeVertexOffsets: null
);
Assert.IsTrue(merged.Equals(expected));
}
}
}

Loading
Loading