1 //  ---------------------------------------------------------------------------
2 //
3 //  @file       TwOpenGLCore.h
4 //  @brief      OpenGL Core graph functions
5 //  @author     Philippe Decaudin
6 //  @license    This file is part of the AntTweakBar library.
7 //              For conditions of distribution and use, see License.txt
8 //
9 //  note:       Private header
10 //
11 //  ---------------------------------------------------------------------------
12 
13 
14 #if !defined ANT_TW_OPENGL_CORE_INCLUDED
15 #define ANT_TW_OPENGL_CORE_INCLUDED
16 
17 #include "TwGraph.h"
18 
19 //  ---------------------------------------------------------------------------
20 
21 class CTwGraphOpenGLCore : public ITwGraph
22 {
23 public:
24     virtual int         Init();
25     virtual int         Shut();
26     virtual void        BeginDraw(int _WndWidth, int _WndHeight);
27     virtual void        EndDraw();
28     virtual bool        IsDrawing();
29     virtual void        Restore();
30     virtual void        DrawLine(int _X0, int _Y0, int _X1, int _Y1, color32 _Color0, color32 _Color1, bool _AntiAliased=false);
31     virtual void        DrawLine(int _X0, int _Y0, int _X1, int _Y1, color32 _Color, bool _AntiAliased=false) { DrawLine(_X0, _Y0, _X1, _Y1, _Color, _Color, _AntiAliased); }
32     virtual void        DrawRect(int _X0, int _Y0, int _X1, int _Y1, color32 _Color00, color32 _Color10, color32 _Color01, color32 _Color11);
DrawRect(int _X0,int _Y0,int _X1,int _Y1,color32 _Color)33     virtual void        DrawRect(int _X0, int _Y0, int _X1, int _Y1, color32 _Color) { DrawRect(_X0, _Y0, _X1, _Y1, _Color, _Color, _Color, _Color); }
34     virtual void        DrawTriangles(int _NumTriangles, int *_Vertices, color32 *_Colors, Cull _CullMode);
35 
36     virtual void *      NewTextObj();
37     virtual void        DeleteTextObj(void *_TextObj);
38     virtual void        BuildText(void *_TextObj, const std::string *_TextLines, color32 *_LineColors, color32 *_LineBgColors, int _NbLines, const CTexFont *_Font, int _Sep, int _BgWidth);
39     virtual void        DrawText(void *_TextObj, int _X, int _Y, color32 _Color, color32 _BgColor);
40 
41     virtual void        ChangeViewport(int _X0, int _Y0, int _Width, int _Height, int _OffsetX, int _OffsetY);
42     virtual void        RestoreViewport();
43     virtual void        SetScissor(int _X0, int _Y0, int _Width, int _Height);
44 
45 protected:
46     bool                m_Drawing;
47     GLuint              m_FontTexID;
48     const CTexFont *    m_FontTex;
49 
50     GLfloat             m_PrevLineWidth;
51     GLint               m_PrevActiveTexture;
52     GLint               m_PrevTexture;
53     GLint               m_PrevVArray;
54     GLboolean           m_PrevLineSmooth;
55     GLboolean           m_PrevCullFace;
56     GLboolean           m_PrevDepthTest;
57     GLboolean           m_PrevBlend;
58     GLint               m_PrevSrcBlend;
59     GLint               m_PrevDstBlend;
60     GLboolean           m_PrevScissorTest;
61     GLint               m_PrevScissorBox[4];
62     GLint               m_PrevViewport[4];
63     GLuint              m_PrevProgramObject;
64 
65     GLuint              m_LineRectVS;
66     GLuint              m_LineRectFS;
67     GLuint              m_LineRectProgram;
68     GLuint              m_LineRectVArray;
69     GLuint              m_LineRectVertices;
70     GLuint              m_LineRectColors;
71     GLuint              m_TriVS;
72     GLuint              m_TriFS;
73     GLuint              m_TriProgram;
74     GLuint              m_TriUniVS;
75     GLuint              m_TriUniFS;
76     GLuint              m_TriUniProgram;
77     GLuint              m_TriTexVS;
78     GLuint              m_TriTexFS;
79     GLuint              m_TriTexProgram;
80     GLuint              m_TriTexUniVS;
81     GLuint              m_TriTexUniFS;
82     GLuint              m_TriTexUniProgram;
83     GLuint              m_TriVArray;
84     GLuint              m_TriVertices;
85     GLuint              m_TriUVs;
86     GLuint              m_TriColors;
87     GLint               m_TriLocationOffset;
88     GLint               m_TriLocationWndSize;
89     GLint               m_TriUniLocationOffset;
90     GLint               m_TriUniLocationWndSize;
91     GLint               m_TriUniLocationColor;
92     GLint               m_TriTexLocationOffset;
93     GLint               m_TriTexLocationWndSize;
94     GLint               m_TriTexLocationTexture;
95     GLint               m_TriTexUniLocationOffset;
96     GLint               m_TriTexUniLocationWndSize;
97     GLint               m_TriTexUniLocationColor;
98     GLint               m_TriTexUniLocationTexture;
99     size_t              m_TriBufferSize;
100 
101     int                 m_WndWidth;
102     int                 m_WndHeight;
103     int                 m_OffsetX;
104     int                 m_OffsetY;
105 
Vec2Vec2106     struct Vec2         { GLfloat x, y; Vec2(){} Vec2(GLfloat _X, GLfloat _Y):x(_X),y(_Y){} Vec2(int _X, int _Y):x(GLfloat(_X)),y(GLfloat(_Y)){} };
107     struct CTextObj
108     {
109         std::vector<Vec2>   m_TextVerts;
110         std::vector<Vec2>   m_TextUVs;
111         std::vector<Vec2>   m_BgVerts;
112         std::vector<color32>m_Colors;
113         std::vector<color32>m_BgColors;
114     };
115     void                ResizeTriBuffers(size_t _NewSize);
116 };
117 
118 //  ---------------------------------------------------------------------------
119 
120 
121 #endif // !defined ANT_TW_OPENGL_CORE_INCLUDED
122