diff --git a/doc/changelog.dox b/doc/changelog.dox index 63b12f67a..71acc87db 100644 --- a/doc/changelog.dox +++ b/doc/changelog.dox @@ -61,7 +61,7 @@ See also: - @ref Animation::Player::resume() that acts the same as @ref Animation::Player::play() "play()" except it doesn't restart the animation from the start if it is already playing -- Added @ref Animation::Player::advance(T, std::initializer_list>>) +- Added @ref Animation::Player::advance(T, std::initializer_list>>) for advancing multiple players at the same time @subsubsection changelog-latest-new-math Math library @@ -211,6 +211,13 @@ See also: @ref GL::Mesh instead of @ref std::pair of a mesh and a buffer, as the buffer is now owned by the mesh. This change was not possible to be done in a backwards-compatible way. +- @ref Animation::Player, @ref Audio::Listener, @ref GL::AbstractShaderProgram, + @ref GL::MeshView and @ref GL::Shader APIs that take a + @ref std::initializer_list of references were changed to use + @ref Corrade::Containers::Reference instead of a @ref std::reference_wrapper. + This change should be fully transparent to the user as the type conversion + is done implicitly in both cases, but you may need to add an + @cpp #include @ce where appropriate. - Removed deprecated implicit conversion @ref Corrade::Containers::Optional to @cpp std::optional @ce, deprecated in January 2018. The class now contains an *explicit* and opt-in STL compatibility, see its documentation diff --git a/doc/opengl-mapping.dox b/doc/opengl-mapping.dox index 2f254d0a8..4a7b2bc52 100644 --- a/doc/opengl-mapping.dox +++ b/doc/opengl-mapping.dox @@ -291,7 +291,7 @@ OpenGL function | Matching API @fn_gl{MapBuffer}, \n `glMapNamedBuffer()`, \n @fn_gl_extension{MapNamedBuffer,EXT,direct_state_access}, \n @fn_gl{MapBufferRange}, \n `glMapNamedBufferRange()`, \n @fn_gl_extension{MapNamedBufferRange,EXT,direct_state_access}, \n @fn_gl{UnmapBuffer}, \n `glUnmapNamedBuffer()`, \n @fn_gl_extension{UnmapNamedBuffer,EXT,direct_state_access} | @ref GL::Buffer::map(), @ref GL::Buffer::unmap() @fn_gl{MemoryBarrier}, \n `glMemoryBarrierByRegion()` | @ref GL::Renderer::setMemoryBarrier(), \n @ref GL::Renderer::setMemoryBarrierByRegion() @fn_gl{MinSampleShading} | @ref GL::Renderer::setMinSampleShading() -@fn_gl{MultiDrawArrays}, \n @fn_gl{MultiDrawElements}, \n @fn_gl{MultiDrawElementsBaseVertex} | @ref GL::MeshView::draw(AbstractShaderProgram&, std::initializer_list>) +@fn_gl{MultiDrawArrays}, \n @fn_gl{MultiDrawElements}, \n @fn_gl{MultiDrawElementsBaseVertex} | @ref GL::MeshView::draw(AbstractShaderProgram&, std::initializer_list>) @fn_gl{MultiDrawArraysIndirectCount}, \n @fn_gl{MultiDrawElementsIndirectCount} | | @subsection opengl-mapping-functions-o O diff --git a/doc/snippets/MagnumAudio-scenegraph.cpp b/doc/snippets/MagnumAudio-scenegraph.cpp index 5ea4910c1..aed4ba37c 100644 --- a/doc/snippets/MagnumAudio-scenegraph.cpp +++ b/doc/snippets/MagnumAudio-scenegraph.cpp @@ -23,6 +23,8 @@ DEALINGS IN THE SOFTWARE. */ +#include + #include "Magnum/Audio/Buffer.h" #include "Magnum/Audio/Listener.h" #include "Magnum/Audio/Playable.h" diff --git a/doc/snippets/MagnumGL.cpp b/doc/snippets/MagnumGL.cpp index 0dd6a6704..77448c46e 100644 --- a/doc/snippets/MagnumGL.cpp +++ b/doc/snippets/MagnumGL.cpp @@ -23,6 +23,8 @@ DEALINGS IN THE SOFTWARE. */ +#include + #include "Magnum/Image.h" #include "Magnum/PixelFormat.h" #include "Magnum/GL/AbstractShaderProgram.h" diff --git a/src/Magnum/Animation/Player.h b/src/Magnum/Animation/Player.h index f77c36770..51b9235cc 100644 --- a/src/Magnum/Animation/Player.h +++ b/src/Magnum/Animation/Player.h @@ -263,7 +263,7 @@ template>> players); + static void advance(T time, std::initializer_list>> players); /** @brief Constructor */ explicit Player(); diff --git a/src/Magnum/Animation/Player.hpp b/src/Magnum/Animation/Player.hpp index 935f38dee..19af2387c 100644 --- a/src/Magnum/Animation/Player.hpp +++ b/src/Magnum/Animation/Player.hpp @@ -31,8 +31,8 @@ #include "Player.h" -#include #include +#include namespace Magnum { namespace Animation { @@ -71,7 +71,7 @@ template struct Player::Track { }; #endif -template void Player::advance(const T time, const std::initializer_list>> players) { +template void Player::advance(const T time, const std::initializer_list>> players) { for(Player& p: players) p.advance(time); } diff --git a/src/Magnum/Animation/Test/PlayerTest.cpp b/src/Magnum/Animation/Test/PlayerTest.cpp index 85203241b..4de30cf63 100644 --- a/src/Magnum/Animation/Test/PlayerTest.cpp +++ b/src/Magnum/Animation/Test/PlayerTest.cpp @@ -23,8 +23,8 @@ DEALINGS IN THE SOFTWARE. */ -#include #include +#include #include #include diff --git a/src/Magnum/Audio/Listener.cpp b/src/Magnum/Audio/Listener.cpp index eb118dd33..350c67a7d 100644 --- a/src/Magnum/Audio/Listener.cpp +++ b/src/Magnum/Audio/Listener.cpp @@ -26,6 +26,8 @@ #include "Listener.h" +#include + #include "Magnum/Audio/Playable.h" #include "Magnum/Audio/PlayableGroup.h" #include "Magnum/Audio/Renderer.h" @@ -69,7 +71,7 @@ template void Listener::clean(const MatrixTy /** @todo velocity */ } -template void Listener::update(std::initializer_list>> groups) { +template void Listener::update(std::initializer_list>> groups) { /* Check if active listener just changed to this */ if(this != activeListener) { /* Ensure that clean() is called also when switching between (clean) diff --git a/src/Magnum/Audio/Listener.h b/src/Magnum/Audio/Listener.h index da9937b44..0cba88f39 100644 --- a/src/Magnum/Audio/Listener.h +++ b/src/Magnum/Audio/Listener.h @@ -119,7 +119,7 @@ template class Listener: public SceneGraph::AbstractFeat * listener-related configuration for @ref Renderer (position, * orientation, gain). */ - void update(std::initializer_list>> groups); + void update(std::initializer_list>> groups); /** @brief Listener gain */ Float gain() const { return _gain; } diff --git a/src/Magnum/Audio/Test/ListenerALTest.cpp b/src/Magnum/Audio/Test/ListenerALTest.cpp index 510c8262d..83ea678e8 100644 --- a/src/Magnum/Audio/Test/ListenerALTest.cpp +++ b/src/Magnum/Audio/Test/ListenerALTest.cpp @@ -24,6 +24,7 @@ DEALINGS IN THE SOFTWARE. */ +#include #include #include "Magnum/Audio/Context.h" diff --git a/src/Magnum/DebugTools/TextureImage.cpp b/src/Magnum/DebugTools/TextureImage.cpp index a88d65e10..9c734feda 100644 --- a/src/Magnum/DebugTools/TextureImage.cpp +++ b/src/Magnum/DebugTools/TextureImage.cpp @@ -35,6 +35,7 @@ #include "Magnum/GL/Texture.h" #if defined(MAGNUM_TARGET_GLES) && !defined(MAGNUM_TARGET_GLES2) +#include #include #include "Magnum/GL/AbstractShaderProgram.h" diff --git a/src/Magnum/GL/AbstractShaderProgram.cpp b/src/Magnum/GL/AbstractShaderProgram.cpp index d8c7a47aa..2e37632aa 100644 --- a/src/Magnum/GL/AbstractShaderProgram.cpp +++ b/src/Magnum/GL/AbstractShaderProgram.cpp @@ -26,6 +26,7 @@ #include "AbstractShaderProgram.h" #include +#include #include "Magnum/GL/Context.h" #include "Magnum/GL/Extensions.h" @@ -348,7 +349,7 @@ void AbstractShaderProgram::attachShader(Shader& shader) { glAttachShader(_id, shader.id()); } -void AbstractShaderProgram::attachShaders(std::initializer_list> shaders) { +void AbstractShaderProgram::attachShaders(std::initializer_list> shaders) { for(Shader& s: shaders) attachShader(s); } @@ -394,7 +395,9 @@ void AbstractShaderProgram::transformFeedbackVaryingsImplementationDanglingWorka #endif #endif -bool AbstractShaderProgram::link(std::initializer_list> shaders) { +bool AbstractShaderProgram::link() { return link({*this}); } + +bool AbstractShaderProgram::link(std::initializer_list> shaders) { bool allSuccess = true; /* Invoke (possibly parallel) linking on all shaders */ diff --git a/src/Magnum/GL/AbstractShaderProgram.h b/src/Magnum/GL/AbstractShaderProgram.h index 1c3cac406..c7a740ca6 100644 --- a/src/Magnum/GL/AbstractShaderProgram.h +++ b/src/Magnum/GL/AbstractShaderProgram.h @@ -29,7 +29,6 @@ * @brief Class @ref Magnum::GL::AbstractShaderProgram */ -#include #include #include @@ -757,7 +756,7 @@ class MAGNUM_GL_EXPORT AbstractShaderProgram: public AbstractObject { * @def_gl{LINK_STATUS} and @def_gl{INFO_LOG_LENGTH}, * @fn_gl_keyword{GetProgramInfoLog} */ - static bool link(std::initializer_list> shaders); + static bool link(std::initializer_list> shaders); #if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) /** @@ -810,7 +809,7 @@ class MAGNUM_GL_EXPORT AbstractShaderProgram: public AbstractObject { * than one shader at once. Other than that there is no other * (performance) difference when using this function. */ - void attachShaders(std::initializer_list> shaders); + void attachShaders(std::initializer_list> shaders); /** * @brief Bind attribute to given location @@ -930,11 +929,11 @@ class MAGNUM_GL_EXPORT AbstractShaderProgram: public AbstractObject { * @brief Link the shader * * Links single shader. If possible, prefer to link multiple shaders - * at once using @ref link(std::initializer_list>) + * at once using @ref link(std::initializer_list>) * for improved performance, see its documentation for more * information. */ - bool link() { return link({*this}); } + bool link(); /** * @brief Get uniform location diff --git a/src/Magnum/GL/Implementation/MeshState.h b/src/Magnum/GL/Implementation/MeshState.h index 3c7bfa154..9c362b70b 100644 --- a/src/Magnum/GL/Implementation/MeshState.h +++ b/src/Magnum/GL/Implementation/MeshState.h @@ -59,7 +59,7 @@ struct MeshState { #endif #ifdef MAGNUM_TARGET_GLES - void(*multiDrawImplementation)(std::initializer_list>); + void(*multiDrawImplementation)(std::initializer_list>); #endif void(*bindVAOImplementation)(GLuint); diff --git a/src/Magnum/GL/Mesh.h b/src/Magnum/GL/Mesh.h index c65a2e70f..097a902f6 100644 --- a/src/Magnum/GL/Mesh.h +++ b/src/Magnum/GL/Mesh.h @@ -926,7 +926,7 @@ class MAGNUM_GL_EXPORT Mesh: public AbstractObject { * @see @ref setCount(), @ref setInstanceCount(), * @ref draw(AbstractShaderProgram&, TransformFeedback&, UnsignedInt), * @ref MeshView::draw(AbstractShaderProgram&), - * @ref MeshView::draw(AbstractShaderProgram&, std::initializer_list>), + * @ref MeshView::draw(AbstractShaderProgram&, std::initializer_list>), * @fn_gl_keyword{UseProgram}, @fn_gl_keyword{EnableVertexAttribArray}, * @fn_gl{BindBuffer}, @fn_gl_keyword{VertexAttribPointer}, * @fn_gl_keyword{DisableVertexAttribArray} or @fn_gl_keyword{BindVertexArray}, diff --git a/src/Magnum/GL/MeshView.cpp b/src/Magnum/GL/MeshView.cpp index ffc5a5da8..139302c00 100644 --- a/src/Magnum/GL/MeshView.cpp +++ b/src/Magnum/GL/MeshView.cpp @@ -36,7 +36,7 @@ namespace Magnum { namespace GL { -void MeshView::draw(AbstractShaderProgram& shader, std::initializer_list> meshes) { +void MeshView::draw(AbstractShaderProgram& shader, std::initializer_list> meshes) { /* Why std::initializer_list doesn't have empty()? */ if(!meshes.size()) return; @@ -56,7 +56,7 @@ void MeshView::draw(AbstractShaderProgram& shader, std::initializer_list> meshes) { +void MeshView::multiDrawImplementationDefault(std::initializer_list> meshes) { CORRADE_INTERNAL_ASSERT(meshes.size()); const Implementation::MeshState& state = *Context::current().state().mesh; @@ -123,7 +123,7 @@ void MeshView::multiDrawImplementationDefault(std::initializer_list> meshes) { +void MeshView::multiDrawImplementationFallback(std::initializer_list> meshes) { for(MeshView& mesh: meshes) { /* Nothing to draw in this mesh */ if(!mesh._count) continue; diff --git a/src/Magnum/GL/MeshView.h b/src/Magnum/GL/MeshView.h index 457289aec..b14c1d91e 100644 --- a/src/Magnum/GL/MeshView.h +++ b/src/Magnum/GL/MeshView.h @@ -29,9 +29,10 @@ * @brief Class @ref Magnum::GL::MeshView */ -#include #include +#include +#include "Magnum/Magnum.h" #include "Magnum/GL/GL.h" #include "Magnum/GL/OpenGL.h" #include "Magnum/GL/visibility.h" @@ -88,10 +89,10 @@ class MAGNUM_GL_EXPORT MeshView { * @requires_gl Specifying base vertex for indexed meshes is not * available in OpenGL ES or WebGL. */ - static void draw(AbstractShaderProgram& shader, std::initializer_list> meshes); + static void draw(AbstractShaderProgram& shader, std::initializer_list> meshes); /** @overload */ - static void draw(AbstractShaderProgram&& shader, std::initializer_list> meshes) { + static void draw(AbstractShaderProgram&& shader, std::initializer_list> meshes) { draw(shader, meshes); } @@ -238,7 +239,7 @@ class MAGNUM_GL_EXPORT MeshView { * @return Reference to self (for method chaining) * * See @ref Mesh::draw(AbstractShaderProgram&) for more information. - * @see @ref draw(AbstractShaderProgram&, std::initializer_list>), + * @see @ref draw(AbstractShaderProgram&, std::initializer_list>), * @ref draw(AbstractShaderProgram&, TransformFeedback&, UnsignedInt) * @requires_gl32 Extension @gl_extension{ARB,draw_elements_base_vertex} * if the mesh is indexed and @ref baseVertex() is not `0`. @@ -286,11 +287,11 @@ class MAGNUM_GL_EXPORT MeshView { private: #ifndef MAGNUM_TARGET_WEBGL - static MAGNUM_GL_LOCAL void multiDrawImplementationDefault(std::initializer_list> meshes); + static MAGNUM_GL_LOCAL void multiDrawImplementationDefault(std::initializer_list> meshes); #endif - static MAGNUM_GL_LOCAL void multiDrawImplementationFallback(std::initializer_list> meshes); + static MAGNUM_GL_LOCAL void multiDrawImplementationFallback(std::initializer_list> meshes); - std::reference_wrapper _original; + Containers::Reference _original; bool _countSet{}; Int _count{}, _baseVertex{}, _instanceCount{1}; diff --git a/src/Magnum/GL/Shader.cpp b/src/Magnum/GL/Shader.cpp index 24eb49d06..6612f7c10 100644 --- a/src/Magnum/GL/Shader.cpp +++ b/src/Magnum/GL/Shader.cpp @@ -26,6 +26,7 @@ #include "Shader.h" #include +#include #include #include #include @@ -746,7 +747,9 @@ Shader& Shader::addFile(const std::string& filename) { return *this; } -bool Shader::compile(std::initializer_list> shaders) { +bool Shader::compile() { return compile({*this}); } + +bool Shader::compile(std::initializer_list> shaders) { bool allSuccess = true; /* Allocate large enough array for source pointers and sizes (to avoid diff --git a/src/Magnum/GL/Shader.h b/src/Magnum/GL/Shader.h index 3387a1a0f..77efbdc68 100644 --- a/src/Magnum/GL/Shader.h +++ b/src/Magnum/GL/Shader.h @@ -29,7 +29,6 @@ * @brief Class @ref Magnum::GL::Shader */ -#include #include #include #include @@ -498,7 +497,7 @@ class MAGNUM_GL_EXPORT Shader: public AbstractObject { * @fn_gl_keyword{GetShader} with @def_gl{COMPILE_STATUS} and * @def_gl{INFO_LOG_LENGTH}, @fn_gl_keyword{GetShaderInfoLog} */ - static bool compile(std::initializer_list> shaders); + static bool compile(std::initializer_list> shaders); /** * @brief Constructor @@ -610,11 +609,11 @@ class MAGNUM_GL_EXPORT Shader: public AbstractObject { * @brief Compile shader * * Compiles single shader. Prefer to compile multiple shaders at once - * using @ref compile(std::initializer_list>) + * using @ref compile(std::initializer_list>) * for improved performance, see its documentation for more * information. */ - bool compile() { return compile({*this}); } + bool compile(); private: Shader& setLabelInternal(Containers::ArrayView label); diff --git a/src/Magnum/GL/Test/AbstractShaderProgramGLTest.cpp b/src/Magnum/GL/Test/AbstractShaderProgramGLTest.cpp index 8932697b2..9ae8bb2a1 100644 --- a/src/Magnum/GL/Test/AbstractShaderProgramGLTest.cpp +++ b/src/Magnum/GL/Test/AbstractShaderProgramGLTest.cpp @@ -24,6 +24,7 @@ */ #include +#include #include #include diff --git a/src/Magnum/GL/Test/PrimitiveQueryGLTest.cpp b/src/Magnum/GL/Test/PrimitiveQueryGLTest.cpp index 3e92aa30f..f2bd5f5a0 100644 --- a/src/Magnum/GL/Test/PrimitiveQueryGLTest.cpp +++ b/src/Magnum/GL/Test/PrimitiveQueryGLTest.cpp @@ -23,6 +23,7 @@ DEALINGS IN THE SOFTWARE. */ +#include #include #include diff --git a/src/Magnum/GL/Test/SampleQueryGLTest.cpp b/src/Magnum/GL/Test/SampleQueryGLTest.cpp index 151d7817e..72a47bfdb 100644 --- a/src/Magnum/GL/Test/SampleQueryGLTest.cpp +++ b/src/Magnum/GL/Test/SampleQueryGLTest.cpp @@ -23,6 +23,7 @@ DEALINGS IN THE SOFTWARE. */ +#include #include #include diff --git a/src/Magnum/GL/Test/TransformFeedbackGLTest.cpp b/src/Magnum/GL/Test/TransformFeedbackGLTest.cpp index 8fa63431f..ae19c1e7c 100644 --- a/src/Magnum/GL/Test/TransformFeedbackGLTest.cpp +++ b/src/Magnum/GL/Test/TransformFeedbackGLTest.cpp @@ -23,6 +23,8 @@ DEALINGS IN THE SOFTWARE. */ +#include + #include "Magnum/Image.h" #include "Magnum/GL/AbstractShaderProgram.h" #include "Magnum/GL/Buffer.h" diff --git a/src/Magnum/Shaders/DistanceFieldVector.cpp b/src/Magnum/Shaders/DistanceFieldVector.cpp index b8a1f2963..9139f496d 100644 --- a/src/Magnum/Shaders/DistanceFieldVector.cpp +++ b/src/Magnum/Shaders/DistanceFieldVector.cpp @@ -25,6 +25,7 @@ #include "DistanceFieldVector.h" +#include #include #include "Magnum/GL/Context.h" diff --git a/src/Magnum/Shaders/Flat.cpp b/src/Magnum/Shaders/Flat.cpp index 235e829ab..65be491db 100644 --- a/src/Magnum/Shaders/Flat.cpp +++ b/src/Magnum/Shaders/Flat.cpp @@ -26,6 +26,7 @@ #include "Flat.h" #include +#include #include #include "Magnum/GL/Context.h" diff --git a/src/Magnum/Shaders/MeshVisualizer.cpp b/src/Magnum/Shaders/MeshVisualizer.cpp index e5d13aa8f..b54f26893 100644 --- a/src/Magnum/Shaders/MeshVisualizer.cpp +++ b/src/Magnum/Shaders/MeshVisualizer.cpp @@ -27,6 +27,7 @@ #include #include +#include #include #include "Magnum/GL/Context.h" diff --git a/src/Magnum/Shaders/Phong.cpp b/src/Magnum/Shaders/Phong.cpp index ad49c8d91..2a7048674 100644 --- a/src/Magnum/Shaders/Phong.cpp +++ b/src/Magnum/Shaders/Phong.cpp @@ -29,6 +29,7 @@ #include #endif #include +#include #include #include diff --git a/src/Magnum/Shaders/Vector.cpp b/src/Magnum/Shaders/Vector.cpp index 3112468da..f1f334f52 100644 --- a/src/Magnum/Shaders/Vector.cpp +++ b/src/Magnum/Shaders/Vector.cpp @@ -25,6 +25,7 @@ #include "Vector.h" +#include #include #include "Magnum/GL/Context.h" diff --git a/src/Magnum/Shaders/VertexColor.cpp b/src/Magnum/Shaders/VertexColor.cpp index c2b82aad6..d4021187e 100644 --- a/src/Magnum/Shaders/VertexColor.cpp +++ b/src/Magnum/Shaders/VertexColor.cpp @@ -25,6 +25,7 @@ #include "VertexColor.h" +#include #include #include "Magnum/GL/Context.h" diff --git a/src/Magnum/TextureTools/DistanceField.cpp b/src/Magnum/TextureTools/DistanceField.cpp index f79cf392f..83a4f63d8 100644 --- a/src/Magnum/TextureTools/DistanceField.cpp +++ b/src/Magnum/TextureTools/DistanceField.cpp @@ -25,6 +25,7 @@ #include "DistanceField.h" +#include #include #include