diff --git a/src/Magnum/Shaders/Test/CMakeLists.txt b/src/Magnum/Shaders/Test/CMakeLists.txt index e48a4d39b..31e27b5b9 100644 --- a/src/Magnum/Shaders/Test/CMakeLists.txt +++ b/src/Magnum/Shaders/Test/CMakeLists.txt @@ -210,6 +210,7 @@ if(BUILD_GL_TESTS) MeshVisualizerTestFiles/defaults-wireframe3D.tga MeshVisualizerTestFiles/instancedobjectid2D.tga MeshVisualizerTestFiles/instancedobjectid3D.tga + MeshVisualizerTestFiles/objectid-tn.tga MeshVisualizerTestFiles/objectid2D.tga MeshVisualizerTestFiles/objectid3D.tga MeshVisualizerTestFiles/objectidtexture2D.tga @@ -219,6 +220,7 @@ if(BUILD_GL_TESTS) MeshVisualizerTestFiles/primitiveid3D.tga MeshVisualizerTestFiles/tbn-wide.tga MeshVisualizerTestFiles/tbn.tga + MeshVisualizerTestFiles/vertexid-tn.tga MeshVisualizerTestFiles/vertexid2D.tga MeshVisualizerTestFiles/vertexid3D.tga MeshVisualizerTestFiles/wireframe-nogeo2D.tga diff --git a/src/Magnum/Shaders/Test/MeshVisualizerGLTest.cpp b/src/Magnum/Shaders/Test/MeshVisualizerGLTest.cpp index 57f6cd8f7..f7f3e765e 100644 --- a/src/Magnum/Shaders/Test/MeshVisualizerGLTest.cpp +++ b/src/Magnum/Shaders/Test/MeshVisualizerGLTest.cpp @@ -736,11 +736,30 @@ constexpr struct { MeshVisualizerGL3D::Flag::NormalDirection, MeshVisualizerGL3D::Flag::Wireframe, false, 2.0f, 1.0f, 0.6f, 1.0f, "wireframe-tn-smooth.tga"}, + {"vertex ID + tangents + normals", + MeshVisualizerGL3D::Flag::VertexId| + MeshVisualizerGL3D::Flag::TangentDirection| + MeshVisualizerGL3D::Flag::NormalDirection, {}, + false, 2.0f, 1.0f, 0.6f, 1.0f, "vertexid-tn.tga"}, {"primitive ID + tangents + normals", MeshVisualizerGL3D::Flag::PrimitiveId| MeshVisualizerGL3D::Flag::TangentDirection| MeshVisualizerGL3D::Flag::NormalDirection, {}, - false, 2.0f, 1.0f, 0.6f, 1.0f, "primitiveid-tn.tga"} + false, 2.0f, 1.0f, 0.6f, 1.0f, "primitiveid-tn.tga"}, + {"object ID + tangents + normals", + /* Not instanced, so it's testing the case where the GS doesn't need to + propagate any attribute but still has to render the actual face */ + MeshVisualizerGL3D::Flag::ObjectId| + MeshVisualizerGL3D::Flag::TangentDirection| + MeshVisualizerGL3D::Flag::NormalDirection, {}, + false, 2.0f, 1.0f, 0.6f, 1.0f, "objectid-tn.tga"}, + {"instanced object ID + tangents + normals", + /* No instance data supplied, thus the output should be exactly the + same as the non-instanced case */ + MeshVisualizerGL3D::Flag::InstancedObjectId| + MeshVisualizerGL3D::Flag::TangentDirection| + MeshVisualizerGL3D::Flag::NormalDirection, {}, + false, 2.0f, 1.0f, 0.6f, 1.0f, "objectid-tn.tga"} }; #endif @@ -3991,7 +4010,7 @@ template void MeshVisualizerGLTest::renderTangent MeshVisualizerGL3D shader{data.flags|flag}; /** @todo make this unnecessary */ shader.setViewportSize({80, 80}); - if(data.flags & MeshVisualizerGL3D::Flag::PrimitiveId) + if(data.flags & (MeshVisualizerGL3D::Flag::PrimitiveId|MeshVisualizerGL3D::Flag::ObjectId|MeshVisualizerGL3D::Flag::VertexId)) shader.bindColorMapTexture(_colorMapTexture); if(flag == MeshVisualizerGL3D::Flag{}) { @@ -4007,6 +4026,10 @@ template void MeshVisualizerGLTest::renderTangent .setWireframeColor(0x9999ff_rgbf); if(data.flags & MeshVisualizerGL3D::Flag::PrimitiveId) shader.setColorMapTransformation(1.0f/512.0f, 0.5f); + else if(data.flags & MeshVisualizerGL3D::Flag::VertexId) + shader.setColorMapTransformation(1.0f/8.0f, 1.0f/4.0f); + else if(data.flags & MeshVisualizerGL3D::Flag::ObjectId) + shader.setObjectId(127); shader.draw(mesh); } else if(flag == MeshVisualizerGL3D::Flag::UniformBuffers) { GL::Buffer projectionUniform{GL::Buffer::TargetHint::Uniform, { @@ -4020,6 +4043,7 @@ template void MeshVisualizerGLTest::renderTangent GL::Buffer drawUniform{GL::Buffer::TargetHint::Uniform, { MeshVisualizerDrawUniform3D{} .setNormalMatrix(transformation.normalMatrix()*data.multiply) + .setObjectId(127) }}; MeshVisualizerMaterialUniform materialUniformData[1]; (*materialUniformData) @@ -4032,6 +4056,8 @@ template void MeshVisualizerGLTest::renderTangent .setWireframeColor(0x9999ff_rgbf); if(data.flags & MeshVisualizerGL3D::Flag::PrimitiveId) materialUniformData->setColorMapTransformation(1.0f/512.0f, 0.5f); + else if(data.flags & MeshVisualizerGL3D::Flag::VertexId) + materialUniformData->setColorMapTransformation(1.0f/8.0f, 1.0f/4.0f); GL::Buffer materialUniform{materialUniformData}; shader .bindProjectionBuffer(projectionUniform) diff --git a/src/Magnum/Shaders/Test/MeshVisualizerTestFiles/objectid-tn.tga b/src/Magnum/Shaders/Test/MeshVisualizerTestFiles/objectid-tn.tga new file mode 100644 index 000000000..1a80f469c Binary files /dev/null and b/src/Magnum/Shaders/Test/MeshVisualizerTestFiles/objectid-tn.tga differ diff --git a/src/Magnum/Shaders/Test/MeshVisualizerTestFiles/vertexid-tn.tga b/src/Magnum/Shaders/Test/MeshVisualizerTestFiles/vertexid-tn.tga new file mode 100644 index 000000000..2b7472854 Binary files /dev/null and b/src/Magnum/Shaders/Test/MeshVisualizerTestFiles/vertexid-tn.tga differ