diff --git a/src/Magnum/MeshTools/Test/CompileGLTest.cpp b/src/Magnum/MeshTools/Test/CompileGLTest.cpp index 1b2a690c4..8da9dfb8b 100644 --- a/src/Magnum/MeshTools/Test/CompileGLTest.cpp +++ b/src/Magnum/MeshTools/Test/CompileGLTest.cpp @@ -442,27 +442,20 @@ template void CompileGLTest::twoDimensions() { {{ 0.0f, 0.75f}, {0.5f, 1.0f}, 0x8080ff_rgbf, 26234}, {{ 0.75f, 0.75f}, {1.0f, 1.0f}, 0xff00ff_rgbf, 26234} }; + auto vertices = Containers::stridedArrayView(vertexData); Containers::Array attributeData; - arrayAppend(attributeData, Trade::MeshAttributeData{ - Trade::MeshAttribute::Position, - Containers::stridedArrayView(vertexData, &vertexData[0].position, - Containers::arraySize(vertexData), sizeof(Vertex))}); + arrayAppend(attributeData, InPlaceInit, Trade::MeshAttribute::Position, + vertices.slice(&Vertex::position)); if(data.flags & Flag::TextureCoordinates2D) - arrayAppend(attributeData, Trade::MeshAttributeData{ - Trade::MeshAttribute::TextureCoordinates, - Containers::stridedArrayView(vertexData, &vertexData[0].textureCoordinates, - Containers::arraySize(vertexData), sizeof(Vertex))}); + arrayAppend(attributeData, InPlaceInit, Trade::MeshAttribute::TextureCoordinates, + vertices.slice(&Vertex::textureCoordinates)); if(data.flags & Flag::Colors) - arrayAppend(attributeData, Trade::MeshAttributeData{ - Trade::MeshAttribute::Color, - Containers::stridedArrayView(vertexData, &vertexData[0].color, - Containers::arraySize(vertexData), sizeof(Vertex))}); + arrayAppend(attributeData, InPlaceInit, Trade::MeshAttribute::Color, + vertices.slice(&Vertex::color)); if(data.flags & Flag::ObjectId) - arrayAppend(attributeData, Trade::MeshAttributeData{ - Trade::MeshAttribute::ObjectId, - Containers::stridedArrayView(vertexData, &vertexData[0].objectId, - Containers::arraySize(vertexData), sizeof(Vertex))}); + arrayAppend(attributeData, InPlaceInit, Trade::MeshAttribute::ObjectId, + vertices.slice(&Vertex::objectId)); const UnsignedInt indexData[]{ 66, 78, 23, /* offset */ @@ -657,46 +650,33 @@ template void CompileGLTest::threeDimensions() { Vector3{ 0.5f, 0.5f, 1.0f}.normalized(), {1.0f, 1.0f}, 0xff00ff_rgbf, 26234} }; + auto vertices = Containers::stridedArrayView(vertexData); /* Calculate bitangents from normal+tangent */ for(Vertex& i: vertexData) i.bitangent = Math::cross(i.normal, i.tangent.xyz())*i.tangent.w(); Containers::Array attributeData; - arrayAppend(attributeData, Trade::MeshAttributeData{ - Trade::MeshAttribute::Position, - Containers::stridedArrayView(vertexData, &vertexData[0].position, - Containers::arraySize(vertexData), sizeof(Vertex))}); + arrayAppend(attributeData, InPlaceInit, Trade::MeshAttribute::Position, + vertices.slice(&Vertex::position)); if(data.flags & Flag::Tangents || data.flags & Flag::BitangentsFromTangents) - arrayAppend(attributeData, Trade::MeshAttributeData{ - Trade::MeshAttribute::Tangent, - Containers::stridedArrayView(vertexData, &vertexData[0].tangent, - Containers::arraySize(vertexData), sizeof(Vertex))}); + arrayAppend(attributeData, InPlaceInit, Trade::MeshAttribute::Tangent, + vertices.slice(&Vertex::tangent)); if(data.flags & Flag::Bitangents) - arrayAppend(attributeData, Trade::MeshAttributeData{ - Trade::MeshAttribute::Bitangent, - Containers::stridedArrayView(vertexData, &vertexData[0].bitangent, - Containers::arraySize(vertexData), sizeof(Vertex))}); + arrayAppend(attributeData, InPlaceInit, Trade::MeshAttribute::Bitangent, + vertices.slice(&Vertex::bitangent)); if(data.flags & Flag::Normals) - arrayAppend(attributeData, Trade::MeshAttributeData{ - Trade::MeshAttribute::Normal, - Containers::stridedArrayView(vertexData, &vertexData[0].normal, - Containers::arraySize(vertexData), sizeof(Vertex))}); + arrayAppend(attributeData, InPlaceInit, Trade::MeshAttribute::Normal, + vertices.slice(&Vertex::normal)); if(data.flags & Flag::TextureCoordinates2D) - arrayAppend(attributeData, Trade::MeshAttributeData{ - Trade::MeshAttribute::TextureCoordinates, - Containers::stridedArrayView(vertexData, &vertexData[0].textureCoordinates, - Containers::arraySize(vertexData), sizeof(Vertex))}); + arrayAppend(attributeData, InPlaceInit, Trade::MeshAttribute::TextureCoordinates, + vertices.slice(&Vertex::textureCoordinates)); if(data.flags & Flag::Colors) - arrayAppend(attributeData, Trade::MeshAttributeData{ - Trade::MeshAttribute::Color, - Containers::stridedArrayView(vertexData, &vertexData[0].color, - Containers::arraySize(vertexData), sizeof(Vertex))}); + arrayAppend(attributeData, InPlaceInit, Trade::MeshAttribute::Color, + vertices.slice(&Vertex::color)); if(data.flags & Flag::ObjectId) - arrayAppend(attributeData, Trade::MeshAttributeData{ - Trade::MeshAttribute::ObjectId, - Containers::stridedArrayView(vertexData, &vertexData[0].objectId, - Containers::arraySize(vertexData), sizeof(Vertex))}); + arrayAppend(attributeData, InPlaceInit, Trade::MeshAttribute::ObjectId, + vertices.slice(&Vertex::objectId)); const UnsignedByte indexData[]{ 66, 78, 23, /* offset */ @@ -939,6 +919,7 @@ void CompileGLTest::multipleAttributes() { {{ 0.0f, 0.75f}, {0.5f, 1.0f}, {5.0f, 10.0f}}, {{ 0.75f, 0.75f}, {1.0f, 1.0f}, {10.0f, 10.0f}} }; + auto vertices = Containers::stridedArrayView(vertexData); const UnsignedInt indexData[]{ 0, 1, 4, 0, 4, 3, @@ -951,14 +932,11 @@ void CompileGLTest::multipleAttributes() { {}, indexData, Trade::MeshIndexData{indexData}, {}, vertexData, { Trade::MeshAttributeData{Trade::MeshAttribute::Position, - Containers::stridedArrayView(vertexData, - &vertexData[0].position, Containers::arraySize(vertexData), sizeof(Vertex))}, + vertices.slice(&Vertex::position)}, Trade::MeshAttributeData{Trade::MeshAttribute::TextureCoordinates, - Containers::stridedArrayView(vertexData, - &vertexData[0].textureCoordinates1, Containers::arraySize(vertexData), sizeof(Vertex))}, + vertices.slice(&Vertex::textureCoordinates1)}, Trade::MeshAttributeData{Trade::MeshAttribute::TextureCoordinates, - Containers::stridedArrayView(vertexData, - &vertexData[0].textureCoordinates2, Containers::arraySize(vertexData), sizeof(Vertex))}, + vertices.slice(&Vertex::textureCoordinates2)}, }}; GL::Mesh mesh = compile(meshData); @@ -1057,6 +1035,7 @@ void CompileGLTest::packedAttributes() { }; static_assert(sizeof(PackedVertex) % 4 == 0, "the vertex is not 4-byte aligned and that's bad"); + auto vertices = Containers::stridedArrayView(vertexData); const UnsignedByte indexData[]{ 0, 1, 4, 0, 4, 3, @@ -1067,31 +1046,21 @@ void CompileGLTest::packedAttributes() { Trade::MeshData meshData{MeshPrimitive::Triangles, {}, indexData, Trade::MeshIndexData{indexData}, {}, vertexData, { - Trade::MeshAttributeData{ - Trade::MeshAttribute::Position, + Trade::MeshAttributeData{Trade::MeshAttribute::Position, VertexFormat::Vector3sNormalized, - Containers::stridedArrayView(vertexData, &vertexData[0].position, - Containers::arraySize(vertexData), sizeof(PackedVertex))}, - Trade::MeshAttributeData{ - Trade::MeshAttribute::Normal, + vertices.slice(&PackedVertex::position)}, + Trade::MeshAttributeData{Trade::MeshAttribute::Normal, VertexFormat::Vector3sNormalized, - Containers::stridedArrayView(vertexData, &vertexData[0].normal, - Containers::arraySize(vertexData), sizeof(PackedVertex))}, - Trade::MeshAttributeData{ - Trade::MeshAttribute::TextureCoordinates, + vertices.slice(&PackedVertex::normal)}, + Trade::MeshAttributeData{Trade::MeshAttribute::TextureCoordinates, VertexFormat::Vector2usNormalized, - Containers::stridedArrayView(vertexData, &vertexData[0].textureCoordinates, - Containers::arraySize(vertexData), sizeof(PackedVertex))}, - Trade::MeshAttributeData{ - Trade::MeshAttribute::Color, + vertices.slice(&PackedVertex::textureCoordinates)}, + Trade::MeshAttributeData{Trade::MeshAttribute::Color, /* It should figure out the type itself here */ - Containers::stridedArrayView(vertexData, &vertexData[0].color, - Containers::arraySize(vertexData), sizeof(PackedVertex))}, + vertices.slice(&PackedVertex::color)}, #ifndef MAGNUM_TARGET_GLES2 - Trade::MeshAttributeData{ - Trade::MeshAttribute::ObjectId, - Containers::stridedArrayView(vertexData, &vertexData[0].objectId, - Containers::arraySize(vertexData), sizeof(PackedVertex))} + Trade::MeshAttributeData{Trade::MeshAttribute::ObjectId, + vertices.slice(&PackedVertex::objectId)} #endif }};