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