1 //  ---------------------------------------------------------------------------
2 //
3 //  @file       TwOpenGL.h
4 //  @brief      OpenGL 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_INCLUDED
15 #define ANT_TW_OPENGL_INCLUDED
16 
17 #include "TwGraph.h"
18 
19 //  ---------------------------------------------------------------------------
20 
21 class CTwGraphOpenGL : 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     GLfloat             m_PrevLineWidth;
50     GLint               m_PrevTexEnv;
51     GLint               m_PrevPolygonMode[2];
52     GLint               m_MaxClipPlanes;
53     GLint               m_PrevTexture;
54     GLint               m_PrevArrayBufferARB;
55     GLint               m_PrevElementArrayBufferARB;
56     GLboolean           m_PrevVertexProgramARB;
57     GLboolean           m_PrevFragmentProgramARB;
58     GLuint              m_PrevProgramObjectARB;
59     GLboolean           m_PrevTexture3D;
60     enum EMaxTextures   { MAX_TEXTURES = 128 };
61     GLboolean           m_PrevActiveTexture1D[MAX_TEXTURES];
62     GLboolean           m_PrevActiveTexture2D[MAX_TEXTURES];
63     GLboolean           m_PrevActiveTexture3D[MAX_TEXTURES];
64     GLboolean           m_PrevClientTexCoordArray[MAX_TEXTURES];
65     GLint               m_PrevActiveTextureARB;
66     GLint               m_PrevClientActiveTextureARB;
67     bool                m_SupportTexRect;
68     GLboolean           m_PrevTexRectARB;
69     GLint               m_PrevBlendEquation;
70     GLint               m_PrevBlendEquationRGB;
71     GLint               m_PrevBlendEquationAlpha;
72     GLint               m_PrevBlendSrcRGB;
73     GLint               m_PrevBlendDstRGB;
74     GLint               m_PrevBlendSrcAlpha;
75     GLint               m_PrevBlendDstAlpha;
76     GLuint              m_PrevVertexArray;
77     GLint               m_ViewportInit[4];
78     GLfloat             m_ProjMatrixInit[16];
79     enum EMaxVtxAttribs { MAX_VERTEX_ATTRIBS = 128 };
80     GLint               m_PrevEnabledVertexAttrib[MAX_VERTEX_ATTRIBS];
81     int                 m_WndWidth;
82     int                 m_WndHeight;
83 
Vec2Vec284     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)){} };
85     struct CTextObj
86     {
87         std::vector<Vec2>   m_TextVerts;
88         std::vector<Vec2>   m_TextUVs;
89         std::vector<Vec2>   m_BgVerts;
90         std::vector<color32>m_Colors;
91         std::vector<color32>m_BgColors;
92     };
93 };
94 
95 //  ---------------------------------------------------------------------------
96 
97 
98 #endif // !defined ANT_TW_OPENGL_INCLUDED
99