@ -47,12 +47,12 @@ struct SceneToolsTest: TestSuite::Tester {
struct {
const char * name ;
SceneObject Type objectType ;
SceneMapping Type objectType ;
} CombineData [ ] {
{ " UnsignedByte output " , SceneObject Type : : UnsignedByte } ,
{ " UnsignedShort output " , SceneObject Type : : UnsignedShort } ,
{ " UnsignedInt output " , SceneObject Type : : UnsignedInt } ,
{ " UnsignedLong output " , SceneObject Type : : UnsignedLong } ,
{ " UnsignedByte output " , SceneMapping Type : : UnsignedByte } ,
{ " UnsignedShort output " , SceneMapping Type : : UnsignedShort } ,
{ " UnsignedInt output " , SceneMapping Type : : UnsignedInt } ,
{ " UnsignedLong output " , SceneMapping Type : : UnsignedLong } ,
} ;
struct {
@ -86,76 +86,76 @@ void SceneToolsTest::combine() {
/* Testing the four possible object types, it should be possible to combine
them */
const UnsignedInt meshObjects [ ] { 45 , 78 , 23 } ;
const UnsignedByte meshes [ ] { 3 , 5 , 17 } ;
const UnsignedInt meshMappingData [ ] { 45 , 78 , 23 } ;
const UnsignedByte meshFieldData [ ] { 3 , 5 , 17 } ;
const UnsignedShort parentObjects [ ] { 33 , 25 } ;
const Short parents [ ] { - 1 , 33 } ;
const UnsignedShort parentMappingData [ ] { 33 , 25 } ;
const Short parentData [ ] { - 1 , 33 } ;
const UnsignedByte translationObjects [ ] { 16 } ;
const Vector2d translations [ ] { { 1.5 , - 0.5 } } ;
const UnsignedByte translationMappingData [ ] { 16 } ;
const Vector2d translationFieldData [ ] { { 1.5 , - 0.5 } } ;
const UnsignedLong fooObjects [ ] { 15 , 23 } ;
const Int foos [ ] { 0 , 1 , 2 , 3 } ;
const UnsignedLong fooMappingData [ ] { 15 , 23 } ;
const Int fooFieldData [ ] { 0 , 1 , 2 , 3 } ;
SceneData scene = Implementation : : sceneCombine ( data . objectType , 167 , Containers : : arrayView ( {
SceneFieldData { SceneField : : Mesh , Containers : : arrayView ( meshObjects ) , Containers : : arrayView ( meshes ) } ,
SceneFieldData { SceneField : : Parent , Containers : : arrayView ( parentObjects ) , Containers : : arrayView ( parents ) } ,
SceneFieldData { SceneField : : Translation , Containers : : arrayView ( translationObjects ) , Containers : : arrayView ( translations ) } ,
SceneFieldData { SceneField : : Mesh , Containers : : arrayView ( meshMappingData ) , Containers : : arrayView ( meshFieldData ) } ,
SceneFieldData { SceneField : : Parent , Containers : : arrayView ( parentMappingData ) , Containers : : arrayView ( parentData ) } ,
SceneFieldData { SceneField : : Translation , Containers : : arrayView ( translationMappingData ) , Containers : : arrayView ( translationFieldData ) } ,
/* Array field */
SceneFieldData { sceneFieldCustom ( 15 ) , Containers : : arrayView ( fooObjects ) , Containers : : StridedArrayView2D < const Int > { foos , { 2 , 2 } } } ,
SceneFieldData { sceneFieldCustom ( 15 ) , Containers : : arrayView ( fooMappingData ) , Containers : : StridedArrayView2D < const Int > { fooFieldData , { 2 , 2 } } } ,
/* Empty field */
SceneFieldData { SceneField : : Camera , Containers : : ArrayView < const UnsignedByte > { } , Containers : : ArrayView < const UnsignedShort > { } }
} ) ) ;
CORRADE_COMPARE ( scene . dataFlags ( ) , DataFlag : : Owned | DataFlag : : Mutable ) ;
CORRADE_COMPARE ( scene . object Type( ) , data . objectType ) ;
CORRADE_COMPARE ( scene . objectCount ( ) , 167 ) ;
CORRADE_COMPARE ( scene . mapping Type( ) , data . objectType ) ;
CORRADE_COMPARE ( scene . mappingBound ( ) , 167 ) ;
CORRADE_COMPARE ( scene . fieldCount ( ) , 5 ) ;
CORRADE_COMPARE ( scene . fieldName ( 0 ) , SceneField : : Mesh ) ;
CORRADE_COMPARE ( scene . fieldType ( 0 ) , SceneFieldType : : UnsignedByte ) ;
CORRADE_COMPARE ( scene . fieldArraySize ( 0 ) , 0 ) ;
CORRADE_COMPARE_AS ( scene . objects AsArray( 0 ) , Containers : : arrayView < UnsignedInt > ( {
CORRADE_COMPARE_AS ( scene . mapping AsArray( 0 ) , Containers : : arrayView < UnsignedInt > ( {
45 , 78 , 23
} ) , TestSuite : : Compare : : Container ) ;
CORRADE_COMPARE_AS ( scene . field < UnsignedByte > ( 0 ) ,
Containers : : arrayView ( meshes ) ,
Containers : : arrayView ( meshFieldData ) ,
TestSuite : : Compare : : Container ) ;
CORRADE_COMPARE ( scene . fieldName ( 1 ) , SceneField : : Parent ) ;
CORRADE_COMPARE ( scene . fieldType ( 1 ) , SceneFieldType : : Short ) ;
CORRADE_COMPARE ( scene . fieldArraySize ( 1 ) , 0 ) ;
CORRADE_COMPARE_AS ( scene . objects AsArray( 1 ) , Containers : : arrayView < UnsignedInt > ( {
CORRADE_COMPARE_AS ( scene . mapping AsArray( 1 ) , Containers : : arrayView < UnsignedInt > ( {
33 , 25
} ) , TestSuite : : Compare : : Container ) ;
CORRADE_COMPARE_AS ( scene . field < Short > ( 1 ) ,
Containers : : arrayView ( parents ) ,
Containers : : arrayView ( parentData ) ,
TestSuite : : Compare : : Container ) ;
CORRADE_COMPARE ( scene . fieldName ( 2 ) , SceneField : : Translation ) ;
CORRADE_COMPARE ( scene . fieldType ( 2 ) , SceneFieldType : : Vector2d ) ;
CORRADE_COMPARE ( scene . fieldArraySize ( 2 ) , 0 ) ;
CORRADE_COMPARE_AS ( scene . objects AsArray( 2 ) ,
CORRADE_COMPARE_AS ( scene . mapping AsArray( 2 ) ,
Containers : : arrayView < UnsignedInt > ( { 16 } ) ,
TestSuite : : Compare : : Container ) ;
CORRADE_COMPARE_AS ( scene . field < Vector2d > ( 2 ) ,
Containers : : arrayView ( translations ) ,
Containers : : arrayView ( translationFieldData ) ,
TestSuite : : Compare : : Container ) ;
CORRADE_COMPARE ( scene . fieldName ( 3 ) , sceneFieldCustom ( 15 ) ) ;
CORRADE_COMPARE ( scene . fieldType ( 3 ) , SceneFieldType : : Int ) ;
CORRADE_COMPARE ( scene . fieldArraySize ( 3 ) , 2 ) ;
CORRADE_COMPARE_AS ( scene . objects AsArray( 3 ) ,
CORRADE_COMPARE_AS ( scene . mapping AsArray( 3 ) ,
Containers : : arrayView < UnsignedInt > ( { 15 , 23 } ) ,
TestSuite : : Compare : : Container ) ;
/** @todo clean up once it's possible to compare multidimensional
containers */
CORRADE_COMPARE_AS ( scene . field < Int [ ] > ( 3 ) [ 0 ] ,
( Containers : : StridedArrayView2D < const Int > { foos , { 2 , 2 } } ) [ 0 ] ,
( Containers : : StridedArrayView2D < const Int > { fooFieldData , { 2 , 2 } } ) [ 0 ] ,
TestSuite : : Compare : : Container ) ;
CORRADE_COMPARE_AS ( scene . field < Int [ ] > ( 3 ) [ 1 ] ,
( Containers : : StridedArrayView2D < const Int > { foos , { 2 , 2 } } ) [ 1 ] ,
( Containers : : StridedArrayView2D < const Int > { fooFieldData , { 2 , 2 } } ) [ 1 ] ,
TestSuite : : Compare : : Container ) ;
CORRADE_COMPARE ( scene . fieldName ( 4 ) , SceneField : : Camera ) ;
@ -165,33 +165,33 @@ void SceneToolsTest::combine() {
}
void SceneToolsTest : : combineAlignment ( ) {
const UnsignedShort meshObjects [ ] { 15 , 23 , 47 } ;
const UnsignedByte meshes [ ] { 0 , 1 , 2 } ;
const UnsignedShort translationObjects [ ] { 5 } ; /* 1 byte padding before */
const Vector2d translations [ ] { { 1.5 , 3.0 } } ; /* 4 byte padding before */
SceneData scene = Implementation : : sceneCombine ( SceneObject Type : : UnsignedShort , 167 , Containers : : arrayView ( {
SceneFieldData { SceneField : : Mesh , Containers : : arrayView ( meshObjects ) , Containers : : arrayView ( meshes ) } ,
SceneFieldData { SceneField : : Translation , Containers : : arrayView ( translationObjects ) , Containers : : arrayView ( translations ) }
const UnsignedShort meshMappingData [ ] { 15 , 23 , 47 } ;
const UnsignedByte meshFieldData [ ] { 0 , 1 , 2 } ;
const UnsignedShort translationMappingData [ ] { 5 } ; /* 1 byte padding before */
const Vector2d translationFieldData [ ] { { 1.5 , 3.0 } } ; /* 4 byte padding before */
SceneData scene = Implementation : : sceneCombine ( SceneMapping Type : : UnsignedShort , 167 , Containers : : arrayView ( {
SceneFieldData { SceneField : : Mesh , Containers : : arrayView ( meshMappingData ) , Containers : : arrayView ( meshFieldData ) } ,
SceneFieldData { SceneField : : Translation , Containers : : arrayView ( translationMappingData ) , Containers : : arrayView ( translationFieldData ) }
} ) ) ;
CORRADE_COMPARE ( scene . dataFlags ( ) , DataFlag : : Owned | DataFlag : : Mutable ) ;
CORRADE_COMPARE ( scene . object Type( ) , SceneObject Type : : UnsignedShort ) ;
CORRADE_COMPARE ( scene . objectCount ( ) , 167 ) ;
CORRADE_COMPARE ( scene . mapping Type( ) , SceneMapping Type : : UnsignedShort ) ;
CORRADE_COMPARE ( scene . mappingBound ( ) , 167 ) ;
CORRADE_COMPARE ( scene . fieldCount ( ) , 2 ) ;
CORRADE_COMPARE ( scene . fieldName ( 0 ) , SceneField : : Mesh ) ;
CORRADE_COMPARE ( scene . fieldType ( 0 ) , SceneFieldType : : UnsignedByte ) ;
CORRADE_COMPARE ( scene . fieldArraySize ( 0 ) , 0 ) ;
CORRADE_COMPARE_AS ( scene . objects < UnsignedShort > ( 0 ) ,
Containers : : arrayView ( meshObjects ) ,
CORRADE_COMPARE_AS ( scene . mapping < UnsignedShort > ( 0 ) ,
Containers : : arrayView ( meshMappingData ) ,
TestSuite : : Compare : : Container ) ;
CORRADE_COMPARE_AS ( scene . field < UnsignedByte > ( 0 ) ,
Containers : : arrayView ( meshes ) ,
Containers : : arrayView ( meshFieldData ) ,
TestSuite : : Compare : : Container ) ;
CORRADE_COMPARE_AS ( reinterpret_cast < std : : ptrdiff_t > ( scene . objects ( 0 ) . data ( ) ) , 2 , TestSuite : : Compare : : Divisible ) ;
CORRADE_COMPARE ( scene . objects ( 0 ) . data ( ) , scene . data ( ) ) ;
CORRADE_COMPARE ( scene . objects ( 0 ) . stride ( ) [ 0 ] , 2 ) ;
CORRADE_COMPARE_AS ( reinterpret_cast < std : : ptrdiff_t > ( scene . mapping ( 0 ) . data ( ) ) , 2 , TestSuite : : Compare : : Divisible ) ;
CORRADE_COMPARE ( scene . mapping ( 0 ) . data ( ) , scene . data ( ) ) ;
CORRADE_COMPARE ( scene . mapping ( 0 ) . stride ( ) [ 0 ] , 2 ) ;
CORRADE_COMPARE_AS ( reinterpret_cast < std : : ptrdiff_t > ( scene . field ( 0 ) . data ( ) ) , 1 , TestSuite : : Compare : : Divisible ) ;
CORRADE_COMPARE ( scene . field ( 0 ) . data ( ) , scene . data ( ) + 3 * 2 ) ;
CORRADE_COMPARE ( scene . field ( 0 ) . stride ( ) [ 0 ] , 1 ) ;
@ -199,60 +199,60 @@ void SceneToolsTest::combineAlignment() {
CORRADE_COMPARE ( scene . fieldName ( 1 ) , SceneField : : Translation ) ;
CORRADE_COMPARE ( scene . fieldType ( 1 ) , SceneFieldType : : Vector2d ) ;
CORRADE_COMPARE ( scene . fieldArraySize ( 1 ) , 0 ) ;
CORRADE_COMPARE_AS ( scene . objects < UnsignedShort > ( 1 ) ,
Containers : : arrayView ( translationObjects ) ,
CORRADE_COMPARE_AS ( scene . mapping < UnsignedShort > ( 1 ) ,
Containers : : arrayView ( translationMappingData ) ,
TestSuite : : Compare : : Container ) ;
CORRADE_COMPARE_AS ( scene . field < Vector2d > ( 1 ) ,
Containers : : arrayView ( translations ) ,
Containers : : arrayView ( translationFieldData ) ,
TestSuite : : Compare : : Container ) ;
CORRADE_COMPARE_AS ( reinterpret_cast < std : : ptrdiff_t > ( scene . objects ( 1 ) . data ( ) ) , 2 , TestSuite : : Compare : : Divisible ) ;
CORRADE_COMPARE ( scene . objects ( 1 ) . data ( ) , scene . data ( ) + 3 * 2 + 3 + 1 ) ;
CORRADE_COMPARE ( scene . objects ( 1 ) . stride ( ) [ 0 ] , 2 ) ;
CORRADE_COMPARE_AS ( reinterpret_cast < std : : ptrdiff_t > ( scene . mapping ( 1 ) . data ( ) ) , 2 , TestSuite : : Compare : : Divisible ) ;
CORRADE_COMPARE ( scene . mapping ( 1 ) . data ( ) , scene . data ( ) + 3 * 2 + 3 + 1 ) ;
CORRADE_COMPARE ( scene . mapping ( 1 ) . stride ( ) [ 0 ] , 2 ) ;
CORRADE_COMPARE_AS ( reinterpret_cast < std : : ptrdiff_t > ( scene . field ( 1 ) . data ( ) ) , 8 , TestSuite : : Compare : : Divisible ) ;
CORRADE_COMPARE ( scene . field ( 1 ) . data ( ) , scene . data ( ) + 3 * 2 + 3 + 1 + 2 + 4 ) ;
CORRADE_COMPARE ( scene . field ( 1 ) . stride ( ) [ 0 ] , 16 ) ;
}
void SceneToolsTest : : combineObjectsShared ( ) {
const UnsignedShort meshObjects [ ] { 15 , 23 , 47 } ;
const UnsignedByte meshes [ ] { 0 , 1 , 2 } ;
const Int meshMaterials [ ] { 72 , - 1 , 23 } ;
const UnsignedShort meshMappingData [ ] { 15 , 23 , 47 } ;
const UnsignedByte meshFieldData [ ] { 0 , 1 , 2 } ;
const Int meshMaterialFieldData [ ] { 72 , - 1 , 23 } ;
const UnsignedShort translationRotationObjects [ ] { 14 , 22 } ;
const Vector2 translations [ ] { { - 1.0f , 25.3f } , { 2.2f , 2.1f } } ;
const Complex rotations [ ] { Complex : : rotation ( 35.0 _degf ) , Complex : : rotation ( 22.5 _degf ) } ;
const UnsignedShort translationRotationMappingData [ ] { 14 , 22 } ;
const Vector2 translationFieldData [ ] { { - 1.0f , 25.3f } , { 2.2f , 2.1f } } ;
const Complex rotationFieldData [ ] { Complex : : rotation ( 35.0 _degf ) , Complex : : rotation ( 22.5 _degf ) } ;
SceneData scene = Implementation : : sceneCombine ( SceneObject Type : : UnsignedInt , 173 , Containers : : arrayView ( {
SceneData scene = Implementation : : sceneCombine ( SceneMapping Type : : UnsignedInt , 173 , Containers : : arrayView ( {
/* Deliberately in an arbitrary order to avoid false assumptions like
fields sharing the same object mapping always being after each
other */
SceneFieldData { SceneField : : Mesh , Containers : : arrayView ( meshObjects ) , Containers : : arrayView ( meshes ) } ,
SceneFieldData { SceneField : : Translation , Containers : : arrayView ( translationRotationObjects ) , Containers : : arrayView ( translations ) } ,
SceneFieldData { SceneField : : MeshMaterial , Containers : : arrayView ( meshObjects ) , Containers : : arrayView ( meshMaterials ) } ,
SceneFieldData { SceneField : : Rotation , Containers : : arrayView ( translationRotationObjects ) , Containers : : arrayView ( rotations ) }
SceneFieldData { SceneField : : Mesh , Containers : : arrayView ( meshMappingData ) , Containers : : arrayView ( meshFieldData ) } ,
SceneFieldData { SceneField : : Translation , Containers : : arrayView ( translationRotationMappingData ) , Containers : : arrayView ( translationFieldData ) } ,
SceneFieldData { SceneField : : MeshMaterial , Containers : : arrayView ( meshMappingData ) , Containers : : arrayView ( meshMaterialFieldData ) } ,
SceneFieldData { SceneField : : Rotation , Containers : : arrayView ( translationRotationMappingData ) , Containers : : arrayView ( rotationFieldData ) }
} ) ) ;
CORRADE_COMPARE ( scene . dataFlags ( ) , DataFlag : : Owned | DataFlag : : Mutable ) ;
CORRADE_COMPARE ( scene . object Type( ) , SceneObject Type : : UnsignedInt ) ;
CORRADE_COMPARE ( scene . objectCount ( ) , 173 ) ;
CORRADE_COMPARE ( scene . mapping Type( ) , SceneMapping Type : : UnsignedInt ) ;
CORRADE_COMPARE ( scene . mappingBound ( ) , 173 ) ;
CORRADE_COMPARE ( scene . fieldCount ( ) , 4 ) ;
CORRADE_COMPARE ( scene . fieldSize ( SceneField : : Mesh ) , 3 ) ;
CORRADE_COMPARE ( scene . fieldSize ( SceneField : : MeshMaterial ) , 3 ) ;
CORRADE_COMPARE ( scene . objects ( SceneField : : Mesh ) . data ( ) , scene . objects ( SceneField : : MeshMaterial ) . data ( ) ) ;
CORRADE_COMPARE ( scene . mapping ( SceneField : : Mesh ) . data ( ) , scene . mapping ( SceneField : : MeshMaterial ) . data ( ) ) ;
CORRADE_COMPARE ( scene . fieldSize ( SceneField : : Translation ) , 2 ) ;
CORRADE_COMPARE ( scene . fieldSize ( SceneField : : Rotation ) , 2 ) ;
CORRADE_COMPARE ( scene . objects ( SceneField : : Translation ) . data ( ) , scene . objects ( SceneField : : Rotation ) . data ( ) ) ;
CORRADE_COMPARE ( scene . mapping ( SceneField : : Translation ) . data ( ) , scene . mapping ( SceneField : : Rotation ) . data ( ) ) ;
}
void SceneToolsTest : : combineObjectsPlaceholderFieldPlaceholder ( ) {
const UnsignedShort meshObjects [ ] { 15 , 23 , 47 } ;
const UnsignedByte meshes [ ] { 0 , 1 , 2 } ;
const UnsignedShort meshMappingData [ ] { 15 , 23 , 47 } ;
const UnsignedByte meshFieldData [ ] { 0 , 1 , 2 } ;
SceneData scene = Implementation : : sceneCombine ( SceneObject Type : : UnsignedShort , 173 , Containers : : arrayView ( {
SceneData scene = Implementation : : sceneCombine ( SceneMapping Type : : UnsignedShort , 173 , Containers : : arrayView ( {
SceneFieldData { SceneField : : Camera , Containers : : ArrayView < UnsignedByte > { nullptr , 1 } , Containers : : ArrayView < UnsignedShort > { nullptr , 1 } } ,
SceneFieldData { SceneField : : Mesh , Containers : : arrayView ( meshObjects ) , Containers : : arrayView ( meshes ) } ,
SceneFieldData { SceneField : : Mesh , Containers : : arrayView ( meshMappingData ) , Containers : : arrayView ( meshFieldData ) } ,
/* Looks like sharing object mapping with the Camera field, but
actually both are placeholders */
SceneFieldData { SceneField : : Light , Containers : : ArrayView < UnsignedShort > { nullptr , 2 } , Containers : : ArrayView < UnsignedInt > { nullptr , 2 } } ,
@ -261,73 +261,73 @@ void SceneToolsTest::combineObjectsPlaceholderFieldPlaceholder() {
} ) ) ;
CORRADE_COMPARE ( scene . dataFlags ( ) , DataFlag : : Owned | DataFlag : : Mutable ) ;
CORRADE_COMPARE ( scene . object Type( ) , SceneObject Type : : UnsignedShort ) ;
CORRADE_COMPARE ( scene . objectCount ( ) , 173 ) ;
CORRADE_COMPARE ( scene . mapping Type( ) , SceneMapping Type : : UnsignedShort ) ;
CORRADE_COMPARE ( scene . mappingBound ( ) , 173 ) ;
CORRADE_COMPARE ( scene . fieldCount ( ) , 4 ) ;
CORRADE_COMPARE ( scene . fieldType ( SceneField : : Camera ) , SceneFieldType : : UnsignedShort ) ;
CORRADE_COMPARE ( scene . fieldSize ( SceneField : : Camera ) , 1 ) ;
CORRADE_COMPARE ( scene . fieldArraySize ( SceneField : : Camera ) , 0 ) ;
CORRADE_COMPARE ( scene . objects ( SceneField : : Camera ) . data ( ) , scene . data ( ) ) ;
CORRADE_COMPARE ( scene . objects ( SceneField : : Camera ) . stride ( ) [ 0 ] , 2 ) ;
CORRADE_COMPARE ( scene . mapping ( SceneField : : Camera ) . data ( ) , scene . data ( ) ) ;
CORRADE_COMPARE ( scene . mapping ( SceneField : : Camera ) . stride ( ) [ 0 ] , 2 ) ;
CORRADE_COMPARE ( scene . field ( SceneField : : Camera ) . data ( ) , scene . data ( ) + 2 ) ;
CORRADE_COMPARE ( scene . field ( SceneField : : Camera ) . stride ( ) [ 0 ] , 2 ) ;
CORRADE_COMPARE ( scene . fieldType ( SceneField : : Mesh ) , SceneFieldType : : UnsignedByte ) ;
CORRADE_COMPARE ( scene . fieldArraySize ( SceneField : : Mesh ) , 0 ) ;
CORRADE_COMPARE_AS ( scene . objects < UnsignedShort > ( SceneField : : Mesh ) ,
Containers : : arrayView ( meshObjects ) ,
CORRADE_COMPARE_AS ( scene . mapping < UnsignedShort > ( SceneField : : Mesh ) ,
Containers : : arrayView ( meshMappingData ) ,
TestSuite : : Compare : : Container ) ;
CORRADE_COMPARE_AS ( scene . field < UnsignedByte > ( SceneField : : Mesh ) ,
Containers : : arrayView ( meshes ) ,
Containers : : arrayView ( meshFieldData ) ,
TestSuite : : Compare : : Container ) ;
CORRADE_COMPARE ( scene . fieldType ( SceneField : : Light ) , SceneFieldType : : UnsignedInt ) ;
CORRADE_COMPARE ( scene . fieldSize ( SceneField : : Light ) , 2 ) ;
CORRADE_COMPARE ( scene . fieldArraySize ( SceneField : : Light ) , 0 ) ;
CORRADE_COMPARE ( scene . objects ( SceneField : : Light ) . data ( ) , scene . data ( ) + 2 + 2 + 3 * 2 + 3 + 1 ) ;
CORRADE_COMPARE ( scene . objects ( SceneField : : Light ) . stride ( ) [ 0 ] , 2 ) ;
CORRADE_COMPARE ( scene . mapping ( SceneField : : Light ) . data ( ) , scene . data ( ) + 2 + 2 + 3 * 2 + 3 + 1 ) ;
CORRADE_COMPARE ( scene . mapping ( SceneField : : Light ) . stride ( ) [ 0 ] , 2 ) ;
CORRADE_COMPARE ( scene . field ( SceneField : : Light ) . data ( ) , scene . data ( ) + 2 + 2 + 3 * 2 + 3 + 1 + 2 * 2 + 2 ) ;
CORRADE_COMPARE ( scene . field ( SceneField : : Light ) . stride ( ) [ 0 ] , 4 ) ;
CORRADE_COMPARE ( scene . fieldType ( sceneFieldCustom ( 15 ) ) , SceneFieldType : : Short ) ;
CORRADE_COMPARE ( scene . fieldSize ( sceneFieldCustom ( 15 ) ) , 2 ) ;
CORRADE_COMPARE ( scene . fieldArraySize ( sceneFieldCustom ( 15 ) ) , 4 ) ;
CORRADE_COMPARE ( scene . objects ( sceneFieldCustom ( 15 ) ) . data ( ) , scene . data ( ) + 2 + 2 + 3 * 2 + 3 + 1 + 2 * 2 + 2 + 2 * 4 ) ;
CORRADE_COMPARE ( scene . objects ( sceneFieldCustom ( 15 ) ) . stride ( ) [ 0 ] , 2 ) ;
CORRADE_COMPARE ( scene . mapping ( sceneFieldCustom ( 15 ) ) . data ( ) , scene . data ( ) + 2 + 2 + 3 * 2 + 3 + 1 + 2 * 2 + 2 + 2 * 4 ) ;
CORRADE_COMPARE ( scene . mapping ( sceneFieldCustom ( 15 ) ) . stride ( ) [ 0 ] , 2 ) ;
CORRADE_COMPARE ( scene . field ( sceneFieldCustom ( 15 ) ) . data ( ) , scene . data ( ) + 2 + 2 + 3 * 2 + 3 + 1 + 2 * 2 + 2 + 2 * 4 + 2 * 2 ) ;
CORRADE_COMPARE ( scene . field ( sceneFieldCustom ( 15 ) ) . stride ( ) [ 0 ] , 4 * 2 ) ;
}
void SceneToolsTest : : combineObjectSharedFieldPlaceholder ( ) {
const UnsignedInt meshObjects [ ] { 15 , 23 , 47 } ;
const UnsignedByte meshes [ ] { 0 , 1 , 2 } ;
const UnsignedInt meshMappingData [ ] { 15 , 23 , 47 } ;
const UnsignedByte meshFieldData [ ] { 0 , 1 , 2 } ;
SceneData scene = Implementation : : sceneCombine ( SceneObject Type : : UnsignedInt , 173 , Containers : : arrayView ( {
SceneFieldData { SceneField : : Mesh , Containers : : arrayView ( meshObjects ) , Containers : : arrayView ( meshes ) } ,
SceneFieldData { SceneField : : MeshMaterial , Containers : : arrayView ( meshObjects ) , Containers : : ArrayView < Int > { nullptr , 3 } } ,
SceneData scene = Implementation : : sceneCombine ( SceneMapping Type : : UnsignedInt , 173 , Containers : : arrayView ( {
SceneFieldData { SceneField : : Mesh , Containers : : arrayView ( meshMappingData ) , Containers : : arrayView ( meshFieldData ) } ,
SceneFieldData { SceneField : : MeshMaterial , Containers : : arrayView ( meshMappingData ) , Containers : : ArrayView < Int > { nullptr , 3 } } ,
} ) ) ;
CORRADE_COMPARE ( scene . dataFlags ( ) , DataFlag : : Owned | DataFlag : : Mutable ) ;
CORRADE_COMPARE ( scene . object Type( ) , SceneObject Type : : UnsignedInt ) ;
CORRADE_COMPARE ( scene . objectCount ( ) , 173 ) ;
CORRADE_COMPARE ( scene . mapping Type( ) , SceneMapping Type : : UnsignedInt ) ;
CORRADE_COMPARE ( scene . mappingBound ( ) , 173 ) ;
CORRADE_COMPARE ( scene . fieldCount ( ) , 2 ) ;
CORRADE_COMPARE ( scene . fieldType ( SceneField : : Mesh ) , SceneFieldType : : UnsignedByte ) ;
CORRADE_COMPARE ( scene . fieldArraySize ( SceneField : : Mesh ) , 0 ) ;
CORRADE_COMPARE_AS ( scene . objects < UnsignedInt > ( 0 ) ,
Containers : : arrayView ( meshObjects ) ,
CORRADE_COMPARE_AS ( scene . mapping < UnsignedInt > ( 0 ) ,
Containers : : arrayView ( meshMappingData ) ,
TestSuite : : Compare : : Container ) ;
CORRADE_COMPARE_AS ( scene . field < UnsignedByte > ( 0 ) ,
Containers : : arrayView ( meshes ) ,
Containers : : arrayView ( meshFieldData ) ,
TestSuite : : Compare : : Container ) ;
CORRADE_COMPARE ( scene . fieldType ( SceneField : : MeshMaterial ) , SceneFieldType : : Int ) ;
CORRADE_COMPARE ( scene . fieldSize ( SceneField : : MeshMaterial ) , 3 ) ;
CORRADE_COMPARE ( scene . fieldArraySize ( SceneField : : MeshMaterial ) , 0 ) ;
CORRADE_COMPARE ( scene . objects ( SceneField : : MeshMaterial ) . data ( ) , scene . objects ( SceneField : : Mesh ) . data ( ) ) ;
CORRADE_COMPARE_AS ( scene . objects < UnsignedInt > ( SceneField : : MeshMaterial ) ,
Containers : : arrayView ( meshObjects ) ,
CORRADE_COMPARE ( scene . mapping ( SceneField : : MeshMaterial ) . data ( ) , scene . mapping ( SceneField : : Mesh ) . data ( ) ) ;
CORRADE_COMPARE_AS ( scene . mapping < UnsignedInt > ( SceneField : : MeshMaterial ) ,
Containers : : arrayView ( meshMappingData ) ,
TestSuite : : Compare : : Container ) ;
CORRADE_COMPARE ( scene . field ( SceneField : : MeshMaterial ) . data ( ) , scene . data ( ) + 3 * 4 + 3 + 1 ) ;
CORRADE_COMPARE ( scene . field ( SceneField : : MeshMaterial ) . stride ( ) [ 0 ] , 4 ) ;
@ -340,13 +340,13 @@ void SceneToolsTest::convertToSingleFunctionObjects() {
/* Haha now I can use sceneCombine() to conveniently prepare the initial
state here , without having to mess with an ArrayTuple */
const UnsignedShort parentObjects [ ] { 15 , 21 , 22 , 23 , 1 } ;
const Byte parents [ ] { - 1 , - 1 , 21 , 22 , - 1 } ;
const UnsignedShort parentMappingData [ ] { 15 , 21 , 22 , 23 , 1 } ;
const Byte parentFieldData [ ] { - 1 , - 1 , 21 , 22 , - 1 } ;
/* Two objects have two and three mesh assignments respectively, meaning we
need three extra */
const UnsignedShort meshObjects [ ] { 15 , 23 , 23 , 23 , 1 , 15 , 21 } ;
const Containers : : Pair < UnsignedInt , Int > meshesMaterials [ ] {
const UnsignedShort meshMappingData [ ] { 15 , 23 , 23 , 23 , 1 , 15 , 21 } ;
const Containers : : Pair < UnsignedInt , Int > meshMaterialFieldData [ ] {
{ 6 , 4 } ,
{ 1 , 0 } ,
{ 2 , 3 } ,
@ -358,13 +358,13 @@ void SceneToolsTest::convertToSingleFunctionObjects() {
/* One camera is attached to an object that already has a mesh, meaning we
need a third extra object */
const UnsignedShort cameraObjects [ ] { 22 , 1 } ;
const UnsignedInt cameras [ ] { 1 , 5 } ;
SceneData original = Implementation : : sceneCombine ( SceneObject Type : : UnsignedShort , data . originalObjectCount , Containers : : arrayView ( {
SceneFieldData { SceneField : : Parent , Containers : : arrayView ( parentObjects ) , Containers : : arrayView ( parents ) } ,
SceneFieldData { SceneField : : Mesh , Containers : : arrayView ( meshObjects ) , Containers : : StridedArrayView1D < const UnsignedInt > { meshesMaterials , & meshesMaterials [ 0 ] . first ( ) , Containers : : arraySize ( meshesMaterials ) , sizeof ( meshesMaterials [ 0 ] ) } } ,
SceneFieldData { SceneField : : MeshMaterial , Containers : : arrayView ( meshObjects ) , Containers : : StridedArrayView1D < const Int > { meshesMaterials , & meshesMaterials [ 0 ] . second ( ) , Containers : : arraySize ( meshesMaterials ) , sizeof ( meshesMaterials [ 0 ] ) } } ,
SceneFieldData { SceneField : : Camera , Containers : : arrayView ( cameraObjects ) , Containers : : arrayView ( cameras ) } ,
const UnsignedShort cameraMappingData [ ] { 22 , 1 } ;
const UnsignedInt cameraFieldData [ ] { 1 , 5 } ;
SceneData original = Implementation : : sceneCombine ( SceneMapping Type : : UnsignedShort , data . originalObjectCount , Containers : : arrayView ( {
SceneFieldData { SceneField : : Parent , Containers : : arrayView ( parentMappingData ) , Containers : : arrayView ( parentFieldData ) } ,
SceneFieldData { SceneField : : Mesh , Containers : : arrayView ( meshMappingData ) , Containers : : StridedArrayView1D < const UnsignedInt > { meshMaterialFieldData , & meshMaterialFieldData [ 0 ] . first ( ) , Containers : : arraySize ( meshMaterialFieldData ) , sizeof ( meshMaterialFieldData [ 0 ] ) } } ,
SceneFieldData { SceneField : : MeshMaterial , Containers : : arrayView ( meshMappingData ) , Containers : : StridedArrayView1D < const Int > { meshMaterialFieldData , & meshMaterialFieldData [ 0 ] . second ( ) , Containers : : arraySize ( meshMaterialFieldData ) , sizeof ( meshMaterialFieldData [ 0 ] ) } } ,
SceneFieldData { SceneField : : Camera , Containers : : arrayView ( cameraMappingData ) , Containers : : arrayView ( cameraFieldData ) } ,
} ) ) ;
SceneData scene = Implementation : : sceneConvertToSingleFunctionObjects ( original , Containers : : arrayView ( {
@ -379,7 +379,7 @@ void SceneToolsTest::convertToSingleFunctionObjects() {
/* There should be three more objects, or the original count preserved if
it ' s large enough */
CORRADE_COMPARE ( scene . objectCount ( ) , data . expectedObjectCount ) ;
CORRADE_COMPARE ( scene . mappingBound ( ) , data . expectedObjectCount ) ;
/* Object 1 should have a new child that has the camera, as it has a mesh */
CORRADE_COMPARE_AS ( scene . childrenFor ( 1 ) ,