Skip to content

Commit

Permalink
interchange Extra and Exstension types
Browse files Browse the repository at this point in the history
  • Loading branch information
qmuntal committed Feb 21, 2019
1 parent c5ef3f9 commit e1aa843
Show file tree
Hide file tree
Showing 3 changed files with 234 additions and 232 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ fmt.Print(doc.Asset)
doc := &gltf.Document{
Scene: 0,
Asset: gltf.Asset{Generator: "qmuntal/gltf"},
Scenes: []gltf.Scene{{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "s_1"}}
Scenes: []gltf.Scene{{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "s_1"}}
}

if err := gltf.Save(doc, "./a.gltf", true); err != nil {
Expand Down
94 changes: 47 additions & 47 deletions encode_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,93 +42,93 @@ func TestEncoder_Encode(t *testing.T) {
wantErr bool
}{
{"withInvalidBuffer", args{&Document{Buffers: []Buffer{
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "binary", ByteLength: 3, URI: "a.bin", Data: []uint8{1, 2, 3}},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "binary2", ByteLength: 3, URI: "/../a.bin", Data: []uint8{1, 2, 3}},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "binary", ByteLength: 3, URI: "a.bin", Data: []uint8{1, 2, 3}},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "binary2", ByteLength: 3, URI: "/../a.bin", Data: []uint8{1, 2, 3}},
}}}, true},
{"empty", args{&Document{}}, false},
{"withExtensions", args{&Document{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, ExtensionsUsed: []string{"c"}, ExtensionsRequired: []string{"d", "e"}}}, false},
{"withAsset", args{&Document{Asset: Asset{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Copyright: "@2019", Generator: "qmuntal/gltf", Version: "2.0", MinVersion: "1.0"}}}, false},
{"withExtensions", args{&Document{Extras: 8.0, Extensions: Extensions{"a": "b"}, ExtensionsUsed: []string{"c"}, ExtensionsRequired: []string{"d", "e"}}}, false},
{"withAsset", args{&Document{Asset: Asset{Extras: 8.0, Extensions: Extensions{"a": "b"}, Copyright: "@2019", Generator: "qmuntal/gltf", Version: "2.0", MinVersion: "1.0"}}}, false},
{"withAccessors", args{&Document{Accessors: []Accessor{
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "acc_1", BufferView: 0, ByteOffset: 50, ComponentType: Byte, Normalized: true, Count: 5, Type: Vec3, Max: []float64{1, 2}, Min: []float64{2.4}},
{BufferView: 0, Normalized: false, Count: 50, Type: Vec4, Sparse: &Sparse{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Count: 2,
Values: SparseValues{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, BufferView: 1, ByteOffset: 2},
Indices: SparseIndices{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, BufferView: 1, ByteOffset: 2, ComponentType: Float}},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "acc_1", BufferView: 0, ByteOffset: 50, ComponentType: Byte, Normalized: true, Count: 5, Type: Vec3, Max: []float64{1, 2}, Min: []float64{2.4}},
{BufferView: 0, Normalized: false, Count: 50, Type: Vec4, Sparse: &Sparse{Extras: 8.0, Extensions: Extensions{"a": "b"}, Count: 2,
Values: SparseValues{Extras: 8.0, Extensions: Extensions{"a": "b"}, BufferView: 1, ByteOffset: 2},
Indices: SparseIndices{Extras: 8.0, Extensions: Extensions{"a": "b"}, BufferView: 1, ByteOffset: 2, ComponentType: Float}},
},
}}}, false},
{"withAnimations", args{&Document{Animations: []Animation{
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "an_1", Channels: []Channel{
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Sampler: 1, Target: ChannelTarget{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Node: 10, Path: Rotation}},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Sampler: 2, Target: ChannelTarget{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Node: 10, Path: Scale}},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "an_1", Channels: []Channel{
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Sampler: 1, Target: ChannelTarget{Extras: 8.0, Extensions: Extensions{"a": "b"}, Node: 10, Path: Rotation}},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Sampler: 2, Target: ChannelTarget{Extras: 8.0, Extensions: Extensions{"a": "b"}, Node: 10, Path: Scale}},
}},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "an_2", Channels: []Channel{
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Sampler: 1, Target: ChannelTarget{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Node: 3, Path: Weights}},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Sampler: 2, Target: ChannelTarget{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Node: 5, Path: Translation}},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "an_2", Channels: []Channel{
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Sampler: 1, Target: ChannelTarget{Extras: 8.0, Extensions: Extensions{"a": "b"}, Node: 3, Path: Weights}},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Sampler: 2, Target: ChannelTarget{Extras: 8.0, Extensions: Extensions{"a": "b"}, Node: 5, Path: Translation}},
}},
}}}, false},
{"withBuffer", args{&Document{Buffers: []Buffer{
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "binary", ByteLength: 3, URI: "a.bin", Data: []uint8{1, 2, 3}},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "embedded", ByteLength: 2, URI: "data:application/octet-stream;base64,YW55ICsgb2xkICYgZGF0YQ==", Data: []byte("any + old & data")},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "external", ByteLength: 4, URI: "b.bin", Data: []uint8{4, 5, 6, 7}},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "binary", ByteLength: 3, URI: "a.bin", Data: []uint8{1, 2, 3}},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "embedded", ByteLength: 2, URI: "data:application/octet-stream;base64,YW55ICsgb2xkICYgZGF0YQ==", Data: []byte("any + old & data")},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "external", ByteLength: 4, URI: "b.bin", Data: []uint8{4, 5, 6, 7}},
}}}, false},
{"withBufView", args{&Document{BufferViews: []BufferView{
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Buffer: 0, ByteOffset: 1, ByteLength: 2, ByteStride: 5, Target: ArrayBuffer},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Buffer: 0, ByteOffset: 1, ByteLength: 2, ByteStride: 5, Target: ArrayBuffer},
{Buffer: 10, ByteOffset: 10, ByteLength: 20, ByteStride: 50, Target: ElementArrayBuffer},
}}}, false},
{"withCameras", args{&Document{Cameras: []Camera{
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "cam_1", Type: OrthographicType, Orthographic: &Orthographic{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Xmag: 1, Ymag: 2, Zfar: 3, Znear: 4}},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "cam_2", Type: PerspectiveType, Perspective: &Perspective{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, AspectRatio: 1, Yfov: 2, Zfar: 3, Znear: 4}},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "cam_1", Type: OrthographicType, Orthographic: &Orthographic{Extras: 8.0, Extensions: Extensions{"a": "b"}, Xmag: 1, Ymag: 2, Zfar: 3, Znear: 4}},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "cam_2", Type: PerspectiveType, Perspective: &Perspective{Extras: 8.0, Extensions: Extensions{"a": "b"}, AspectRatio: 1, Yfov: 2, Zfar: 3, Znear: 4}},
}}}, false},
{"withImages", args{&Document{Images: []Image{
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "binary", BufferView: 1, MimeType: "data:image/png"},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "embedded", URI: "data:image/png;base64,dsjdsaGGUDXGA", MimeType: "data:image/png"},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "external", URI: "https://web.com/a", MimeType: "data:image/png"},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "binary", BufferView: 1, MimeType: "data:image/png"},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "embedded", URI: "data:image/png;base64,dsjdsaGGUDXGA", MimeType: "data:image/png"},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "external", URI: "https://web.com/a", MimeType: "data:image/png"},
}}}, false},
{"withMaterials", args{&Document{Materials: []Material{
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "base", EmissiveFactor: [3]float64{1.0, 1.0, 1.0}, DoubleSided: true, AlphaCutoff: 0.5, AlphaMode: Opaque},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "pbr", AlphaCutoff: 0.5, AlphaMode: Opaque,
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "base", EmissiveFactor: [3]float64{1.0, 1.0, 1.0}, DoubleSided: true, AlphaCutoff: 0.5, AlphaMode: Opaque},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "pbr", AlphaCutoff: 0.5, AlphaMode: Opaque,
PBRMetallicRoughness: &PBRMetallicRoughness{
Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, MetallicFactor: 1, RoughnessFactor: 2, BaseColorFactor: [4]float64{1, 2, 3, 4},
BaseColorTexture: &TextureInfo{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Index: 1, TexCoord: 3},
MetallicRoughnessTexture: &TextureInfo{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Index: 6, TexCoord: 5},
Extras: 8.0, Extensions: Extensions{"a": "b"}, MetallicFactor: 1, RoughnessFactor: 2, BaseColorFactor: [4]float64{1, 2, 3, 4},
BaseColorTexture: &TextureInfo{Extras: 8.0, Extensions: Extensions{"a": "b"}, Index: 1, TexCoord: 3},
MetallicRoughnessTexture: &TextureInfo{Extras: 8.0, Extensions: Extensions{"a": "b"}, Index: 6, TexCoord: 5},
},
},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "normal", AlphaCutoff: 0.7, AlphaMode: Blend,
NormalTexture: &NormalTexture{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Index: 1, TexCoord: 2, Scale: 2.0},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "normal", AlphaCutoff: 0.7, AlphaMode: Blend,
NormalTexture: &NormalTexture{Extras: 8.0, Extensions: Extensions{"a": "b"}, Index: 1, TexCoord: 2, Scale: 2.0},
},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "occlusion", AlphaCutoff: 0.5, AlphaMode: Mask,
OcclusionTexture: &OcclusionTexture{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Index: 1, TexCoord: 2, Strength: 2.0},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "occlusion", AlphaCutoff: 0.5, AlphaMode: Mask,
OcclusionTexture: &OcclusionTexture{Extras: 8.0, Extensions: Extensions{"a": "b"}, Index: 1, TexCoord: 2, Strength: 2.0},
},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "emmisice", AlphaCutoff: 0.5, AlphaMode: Mask, EmissiveTexture: &TextureInfo{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Index: 4, TexCoord: 50}},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "emmisice", AlphaCutoff: 0.5, AlphaMode: Mask, EmissiveTexture: &TextureInfo{Extras: 8.0, Extensions: Extensions{"a": "b"}, Index: 4, TexCoord: 50}},
}}}, false},
{"withMeshes", args{&Document{Meshes: []Mesh{
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "mesh_1", Weights: []float64{1.2, 2}},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "mesh_2", Primitives: []Primitive{
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Attributes: Attribute{"POSITION": 1}, Indices: 2, Material: 1, Mode: Lines},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Targets: []Attribute{{"POSITION": 1, "THEN": 4}, {"OTHER": 2}}, Indices: 2, Material: 1, Mode: Lines},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "mesh_1", Weights: []float64{1.2, 2}},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "mesh_2", Primitives: []Primitive{
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Attributes: Attribute{"POSITION": 1}, Indices: 2, Material: 1, Mode: Lines},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Targets: []Attribute{{"POSITION": 1, "THEN": 4}, {"OTHER": 2}}, Indices: 2, Material: 1, Mode: Lines},
}},
}}}, false},
{"withNodes", args{&Document{Nodes: []Node{
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "n-1", Camera: 1, Children: []uint32{1, 2}, Skin: 3,
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "n-1", Camera: 1, Children: []uint32{1, 2}, Skin: 3,
Matrix: [16]float64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}, Mesh: 15, Rotation: [4]float64{1.5, 1.3, 12, 0}, Scale: [3]float64{1, 3, 4}, Translation: [3]float64{0, 7.8, 9}, Weights: []float64{1, 3}},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "n-2", Camera: 1, Children: []uint32{1, 2}, Skin: 3,
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "n-2", Camera: 1, Children: []uint32{1, 2}, Skin: 3,
Matrix: [16]float64{1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}, Mesh: 15, Rotation: [4]float64{0, 0, 0, 1}, Scale: [3]float64{1, 1, 1}},
}}}, false},
{"withSampler", args{&Document{Samplers: []Sampler{
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "s_1", MagFilter: MagLinear, MinFilter: MinLinearMipMapLinear, WrapS: ClampToEdge, WrapT: MirroredRepeat},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "s_2", MagFilter: MagNearest, MinFilter: MinLinearMipMapLinear, WrapS: MirroredRepeat, WrapT: Repeat},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "s_1", MagFilter: MagLinear, MinFilter: MinLinearMipMapLinear, WrapS: ClampToEdge, WrapT: MirroredRepeat},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "s_2", MagFilter: MagNearest, MinFilter: MinLinearMipMapLinear, WrapS: MirroredRepeat, WrapT: Repeat},
}}}, false},
{"withScene", args{&Document{Scene: 1}}, false},
{"withScenes", args{&Document{Scenes: []Scene{
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "s_1", Nodes: []uint32{1, 2}},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "s_2", Nodes: []uint32{2, 3}},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "s_1", Nodes: []uint32{1, 2}},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "s_2", Nodes: []uint32{2, 3}},
}}}, false},
{"withSkins", args{&Document{Skins: []Skin{
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "skin_1", InverseBindMatrices: 2, Skeleton: 4, Joints: []uint32{5, 6}},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "skin_2", InverseBindMatrices: 3, Skeleton: 4, Joints: []uint32{7, 8}},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "skin_1", InverseBindMatrices: 2, Skeleton: 4, Joints: []uint32{5, 6}},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "skin_2", InverseBindMatrices: 3, Skeleton: 4, Joints: []uint32{7, 8}},
}}}, false},
{"withTextures", args{&Document{Textures: []Texture{
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "t_1", Sampler: 2, Source: 3},
{Extensions: 8.0, Extras: map[string]interface{}{"a": "b"}, Name: "t_2", Sampler: 3, Source: 4},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "t_1", Sampler: 2, Source: 3},
{Extras: 8.0, Extensions: Extensions{"a": "b"}, Name: "t_2", Sampler: 3, Source: 4},
}}}, false},
}
for _, tt := range tests {
Expand Down
Loading

0 comments on commit e1aa843

Please sign in to comment.