bump product version to 6.4.0.3
[LibreOffice.git] / vcl / inc / opengl / PackedTextureAtlas.hxx
blob6dadcc59e0ad69dad9f6f74ac65ba12dda3ef645
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
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/.
9 */
11 #ifndef INCLUDED_VCL_INC_OPENGL_PACKEDTEXTUREATLAS_HXX
12 #define INCLUDED_VCL_INC_OPENGL_PACKEDTEXTUREATLAS_HXX
14 #include <memory>
15 #include <opengl/texture.hxx>
17 struct PackedTexture;
19 /**
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;
41 public:
43 /**
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: */