From cfbfdb72c0fd45949ec6f22630426addf1e0bfb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Wed, 10 Jul 2019 13:59:09 +0200 Subject: [PATCH] doc: compile MeshTools snippets also when GL is disabled. --- doc/snippets/CMakeLists.txt | 9 +++- doc/snippets/MagnumMeshTools-gl.cpp | 73 ++++++++++++++++++++++++++ doc/snippets/MagnumMeshTools.cpp | 39 -------------- src/Magnum/MeshTools/CompressIndices.h | 2 +- src/Magnum/MeshTools/Interleave.h | 2 +- 5 files changed, 83 insertions(+), 42 deletions(-) create mode 100644 doc/snippets/MagnumMeshTools-gl.cpp diff --git a/doc/snippets/CMakeLists.txt b/doc/snippets/CMakeLists.txt index dfda2bcb2..11c507ef8 100644 --- a/doc/snippets/CMakeLists.txt +++ b/doc/snippets/CMakeLists.txt @@ -85,13 +85,20 @@ endif() if(WITH_GL) add_library(snippets-MagnumGL STATIC MagnumGL.cpp - MagnumMeshTools.cpp + MagnumMeshTools-gl.cpp MagnumShaders.cpp MagnumText.cpp) target_link_libraries(snippets-MagnumGL PRIVATE MagnumGL) set_target_properties(snippets-MagnumGL PROPERTIES FOLDER "Magnum/doc/snippets") endif() +if(WITH_MESHTOOLS) + add_library(snippets-MagnumMeshTools STATIC + MagnumMeshTools.cpp) + target_link_libraries(snippets-MagnumMeshTools PRIVATE MagnumMeshTools) + set_target_properties(snippets-MagnumMeshTools PROPERTIES FOLDER "Magnum/doc/snippets") +endif() + if(WITH_TRADE) add_library(snippets-MagnumTrade STATIC plugins.cpp diff --git a/doc/snippets/MagnumMeshTools-gl.cpp b/doc/snippets/MagnumMeshTools-gl.cpp new file mode 100644 index 000000000..bf17e95e7 --- /dev/null +++ b/doc/snippets/MagnumMeshTools-gl.cpp @@ -0,0 +1,73 @@ +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 + Vladimír Vondruš + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +#include "Magnum/GL/Buffer.h" +#include "Magnum/GL/Mesh.h" +#include "Magnum/Math/Vector3.h" +#include "Magnum/MeshTools/CompressIndices.h" +#include "Magnum/MeshTools/Interleave.h" + +using namespace Magnum; + +int main() { + +{ +/* [compressIndices] */ +std::vector indices; + +Containers::Array indexData; +MeshIndexType indexType; +UnsignedInt indexStart, indexEnd; +std::tie(indexData, indexType, indexStart, indexEnd) = + MeshTools::compressIndices(indices); + +GL::Buffer indexBuffer; +indexBuffer.setData(indexData, GL::BufferUsage::StaticDraw); + +GL::Mesh mesh; +mesh.setCount(indices.size()) + .setIndexBuffer(indexBuffer, 0, indexType, indexStart, indexEnd); +/* [compressIndices] */ +} + +{ +struct MyShader { + typedef GL::Attribute<0, Vector3> Position; + typedef GL::Attribute<0, Vector2> TextureCoordinates; +}; +/* [interleave1] */ +std::vector positions; +std::vector textureCoordinates; + +GL::Buffer vertexBuffer; +vertexBuffer.setData(MeshTools::interleave(positions, textureCoordinates), GL::BufferUsage::StaticDraw); + +GL::Mesh mesh; +mesh.setCount(positions.size()) + .addVertexBuffer(vertexBuffer, 0, MyShader::Position{}, MyShader::TextureCoordinates{}); +/* [interleave1] */ +} + +} diff --git a/doc/snippets/MagnumMeshTools.cpp b/doc/snippets/MagnumMeshTools.cpp index ef59b6126..c57ee65b8 100644 --- a/doc/snippets/MagnumMeshTools.cpp +++ b/doc/snippets/MagnumMeshTools.cpp @@ -23,8 +23,6 @@ DEALINGS IN THE SOFTWARE. */ -#include "Magnum/GL/Buffer.h" -#include "Magnum/GL/Mesh.h" #include "Magnum/Math/Color.h" #include "Magnum/MeshTools/CombineIndexedArrays.h" #include "Magnum/MeshTools/CompressIndices.h" @@ -55,25 +53,6 @@ std::vector indices = MeshTools::combineIndexedArrays( /* [combineIndexedArrays] */ } -{ -/* [compressIndices] */ -std::vector indices; - -Containers::Array indexData; -MeshIndexType indexType; -UnsignedInt indexStart, indexEnd; -std::tie(indexData, indexType, indexStart, indexEnd) = - MeshTools::compressIndices(indices); - -GL::Buffer indexBuffer; -indexBuffer.setData(indexData, GL::BufferUsage::StaticDraw); - -GL::Mesh mesh; -mesh.setCount(indices.size()) - .setIndexBuffer(indexBuffer, 0, indexType, indexStart, indexEnd); -/* [compressIndices] */ -} - { /* [compressIndicesAs] */ std::vector indices; @@ -95,24 +74,6 @@ Containers::Array normals = /* [generateFlatNormals] */ } -{ -struct MyShader { - typedef GL::Attribute<0, Vector3> Position; - typedef GL::Attribute<0, Vector2> TextureCoordinates; -}; -/* [interleave1] */ -std::vector positions; -std::vector textureCoordinates; - -GL::Buffer vertexBuffer; -vertexBuffer.setData(MeshTools::interleave(positions, textureCoordinates), GL::BufferUsage::StaticDraw); - -GL::Mesh mesh; -mesh.setCount(positions.size()) - .addVertexBuffer(vertexBuffer, 0, MyShader::Position{}, MyShader::TextureCoordinates{}); -/* [interleave1] */ -} - { /* [interleave2] */ std::vector positions; diff --git a/src/Magnum/MeshTools/CompressIndices.h b/src/Magnum/MeshTools/CompressIndices.h index a8a2f0a7a..eceb614bd 100644 --- a/src/Magnum/MeshTools/CompressIndices.h +++ b/src/Magnum/MeshTools/CompressIndices.h @@ -49,7 +49,7 @@ sufficient. Example usage: -@snippet MagnumMeshTools.cpp compressIndices +@snippet MagnumMeshTools-gl.cpp compressIndices @see @ref compressIndicesAs() */ diff --git a/src/Magnum/MeshTools/Interleave.h b/src/Magnum/MeshTools/Interleave.h index b75996f2d..c95b19afd 100644 --- a/src/Magnum/MeshTools/Interleave.h +++ b/src/Magnum/MeshTools/Interleave.h @@ -122,7 +122,7 @@ data for each attribute are in continuous place in memory. Example usage: -@snippet MagnumMeshTools.cpp interleave1 +@snippet MagnumMeshTools-gl.cpp interleave1 It's often desirable to align data for one vertex on 32bit boundaries. To achieve that, you can specify gaps between the attributes: