diff --git a/src/Magnum/CMakeLists.txt b/src/Magnum/CMakeLists.txt index 779a9a6ae..919535f29 100644 --- a/src/Magnum/CMakeLists.txt +++ b/src/Magnum/CMakeLists.txt @@ -39,6 +39,7 @@ set(Magnum_SRCS DefaultFramebuffer.cpp Framebuffer.cpp Image.cpp + ImageView.cpp Mesh.cpp MeshView.cpp OpenGL.cpp diff --git a/src/Magnum/ImageView.cpp b/src/Magnum/ImageView.cpp new file mode 100644 index 000000000..287a08b3b --- /dev/null +++ b/src/Magnum/ImageView.cpp @@ -0,0 +1,45 @@ +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 + 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 "ImageView.h" + +namespace Magnum { + +template ImageView::ImageView(PixelStorage storage, PixelFormat format, PixelType type, const VectorTypeFor& size, Containers::ArrayView data) noexcept: _storage{storage}, _format{format}, _type{type}, _size{size}, _data{reinterpret_cast(data.data()), data.size()} { + CORRADE_ASSERT(!_data || Implementation::imageDataSize(*this) <= _data.size(), "ImageView::ImageView(): bad image data size, got" << _data.size() << "but expected at least" << Implementation::imageDataSize(*this), ); +} + +template void ImageView::setData(const Containers::ArrayView data) { + CORRADE_ASSERT(Implementation::imageDataSize(*this) <= data.size(), "ImageView::setData(): bad image data size, got" << data.size() << "but expected at least" << Implementation::imageDataSize(*this), ); + _data = {reinterpret_cast(data.data()), data.size()}; +} + +#ifndef DOXYGEN_GENERATING_OUTPUT +template class MAGNUM_EXPORT ImageView<1>; +template class MAGNUM_EXPORT ImageView<2>; +template class MAGNUM_EXPORT ImageView<3>; +#endif + +} diff --git a/src/Magnum/ImageView.h b/src/Magnum/ImageView.h index 4a4466509..50ce186b7 100644 --- a/src/Magnum/ImageView.h +++ b/src/Magnum/ImageView.h @@ -70,9 +70,7 @@ template class ImageView { * The data are expected to be of proper size for given @p storage * parameters. */ - explicit ImageView(PixelStorage storage, PixelFormat format, PixelType type, const VectorTypeFor& size, Containers::ArrayView data) noexcept: _storage{storage}, _format{format}, _type{type}, _size{size}, _data{reinterpret_cast(data.data()), data.size()} { - CORRADE_ASSERT(!_data || Implementation::imageDataSize(*this) <= _data.size(), "ImageView::ImageView(): bad image data size, got" << _data.size() << "but expected at least" << Implementation::imageDataSize(*this), ); - } + explicit ImageView(PixelStorage storage, PixelFormat format, PixelType type, const VectorTypeFor& size, Containers::ArrayView data) noexcept; /** @overload * Similar to the above, but uses default @ref PixelStorage parameters. @@ -140,10 +138,7 @@ template class ImageView { * passed in constructor. The data are expected to be of proper size * for given @p storage parameters. */ - void setData(Containers::ArrayView data) { - CORRADE_ASSERT(Implementation::imageDataSize(*this) <= data.size(), "ImageView::setData(): bad image data size, got" << data.size() << "but expected at least" << Implementation::imageDataSize(*this), ); - _data = {reinterpret_cast(data.data()), data.size()}; - } + void setData(Containers::ArrayView data); private: PixelStorage _storage;