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