1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
11 #ifndef INCLUDED_VCL_INC_OPENGL_PACKEDTEXTUREATLAS_HXX
12 #define INCLUDED_VCL_INC_OPENGL_PACKEDTEXTUREATLAS_HXX
15 #include <opengl/texture.hxx>
20 * Pack textures into one texture atlas.
22 * This is based on algorithm described in [1] and is an
23 * adaptation of "texture atlas generator" from [2].
25 * [1]: http://www.blackpawn.com/texts/lightmaps/
26 * [2]: https://github.com/lukaszdk/texture-atlas-generator
29 class VCL_DLLPUBLIC PackedTextureAtlasManager final
31 std::vector
<std::unique_ptr
<PackedTexture
>> maPackedTextures
;
33 int const mnTextureWidth
;
34 int const mnTextureHeight
;
36 void CreateNewTexture();
38 PackedTextureAtlasManager( const PackedTextureAtlasManager
& ) = delete;
39 PackedTextureAtlasManager
& operator=( const PackedTextureAtlasManager
& ) = delete;
44 * nTextureWidth and nTextureHeight are the dimensions of the common texture(s)
45 * nTextureLimit is the maximum limit of that a texture atlas can have (0 or less - unlimited)
47 PackedTextureAtlasManager(int nTextureWidth
, int nTextureHeight
);
48 ~PackedTextureAtlasManager();
50 OpenGLTexture
InsertBuffer(int nWidth
, int nHeight
, int nFormat
, int nType
, sal_uInt8
const * pData
);
51 OpenGLTexture
Reserve(int nWidth
, int nHeight
);
52 std::vector
<GLuint
> ReduceTextureNumber(int nMaxNumberOfTextures
);
55 #endif // INCLUDED_VCL_INC_OPENGL_PACKEDTEXTUREATLAS_HXX
57 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */