aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/graphics/fonts/page.h
blob: 75f1840a36563de5bb0fb6c9db880468fbeca859 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#ifndef __JE_PAGE_H__
#define __JE_PAGE_H__

#include "../../math/vector2.hpp"

#include "font.h"

namespace JinEngine
{
    namespace Graphics
    {
        namespace Fonts
        {

            class Font;

            /// 
            /// Glyphs data to be rendered.
            /// 
            struct GlyphVertex
            {
                int x, y;   ///< screen coordinates
                float u, v; ///< normalized texture uv
            };

            /// 
            /// Glyphs info for reducing draw call.
            /// 
            struct GlyphArrayDrawInfo
            {
                GLuint texture;     ///< atlas
                unsigned int start; ///< glyph vertex indecies
                unsigned int count; ///< glyph vertex count 
            };

            /// 
            /// Page to be rendered. 
            /// 
            /// A page is a pre-rendered text struct for reducing draw call. Each page 
            /// keeps a font pointer which should not be changed.
            /// 
            struct Page : public Object
            {
                Font* font;
                std::vector<GlyphArrayDrawInfo> glyphinfolist;
                std::vector<GlyphVertex> glyphvertices;
                Math::Vector2<int> size;
            };

        } // namespace Fonts
    } // namespace Graphics
} // namespace JinEngine 

#endif // __JE_PAGE_H__