ClangFormat: apply to source, most of intern
[blender.git] / intern / ghost / intern / GHOST_Context.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2013 Blender Foundation.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup GHOST
22  * Declaration of GHOST_Context class.
23  */
24
25 #ifndef __GHOST_CONTEXT_H__
26 #define __GHOST_CONTEXT_H__
27
28 #include "GHOST_IContext.h"
29 #include "GHOST_Types.h"
30
31 #include "glew-mx.h"
32
33 #include <cstdlib>  // for NULL
34
35 class GHOST_Context : public GHOST_IContext {
36  public:
37   /**
38    * Constructor.
39    * \param stereoVisual      Stereo visual for quad buffered stereo.
40    * \param numOfAASamples    Number of samples used for AA (zero if no AA)
41    */
42   GHOST_Context(bool stereoVisual, GHOST_TUns16 numOfAASamples)
43       : m_stereoVisual(stereoVisual), m_numOfAASamples(numOfAASamples)
44   {
45   }
46
47   /**
48    * Destructor.
49    */
50   virtual ~GHOST_Context()
51   {
52   }
53
54   /**
55    * Swaps front and back buffers of a window.
56    * \return  A boolean success indicator.
57    */
58   virtual GHOST_TSuccess swapBuffers() = 0;
59
60   /**
61    * Activates the drawing context of this window.
62    * \return  A boolean success indicator.
63    */
64   virtual GHOST_TSuccess activateDrawingContext() = 0;
65
66   /**
67    * Release the drawing context of the calling thread.
68    * \return  A boolean success indicator.
69    */
70   virtual GHOST_TSuccess releaseDrawingContext() = 0;
71
72   /**
73    * Call immediately after new to initialize.  If this fails then immediately delete the object.
74    * \return Indication as to whether initialization has succeeded.
75    */
76   virtual GHOST_TSuccess initializeDrawingContext() = 0;
77
78   /**
79    * Updates the drawing context of this window. Needed
80    * whenever the window is changed.
81    * \return Indication of success.
82    */
83   virtual GHOST_TSuccess updateDrawingContext()
84   {
85     return GHOST_kFailure;
86   }
87
88   /**
89    * Checks if it is OK for a remove the native display
90    * \return Indication as to whether removal has succeeded.
91    */
92   virtual GHOST_TSuccess releaseNativeHandles() = 0;
93
94   /**
95    * Sets the swap interval for swapBuffers.
96    * \param interval The swap interval to use.
97    * \return A boolean success indicator.
98    */
99   virtual GHOST_TSuccess setSwapInterval(int /*interval*/)
100   {
101     return GHOST_kFailure;
102   }
103
104   /**
105    * Gets the current swap interval for swapBuffers.
106    * \param intervalOut Variable to store the swap interval if it can be read.
107    * \return Whether the swap interval can be read.
108    */
109   virtual GHOST_TSuccess getSwapInterval(int &)
110   {
111     return GHOST_kFailure;
112   }
113
114   /**
115    * Stereo visual created. Only necessary for 'real' stereo support,
116    * ie quad buffered stereo. This is not always possible, depends on
117    * the graphics h/w
118    */
119   inline bool isStereoVisual() const
120   {
121     return m_stereoVisual;
122   }
123
124   /** Number of samples used in anti-aliasing, set to 0 if no AA */
125   inline GHOST_TUns16 getNumOfAASamples() const
126   {
127     return m_numOfAASamples;
128   }
129
130  protected:
131   void initContextGLEW();
132
133   bool m_stereoVisual;
134
135   GHOST_TUns16 m_numOfAASamples;
136
137   static void initClearGL();
138
139 #ifdef WITH_CXX_GUARDEDALLOC
140   MEM_CXX_CLASS_ALLOC_FUNCS("GHOST:GHOST_Context")
141 #endif
142 };
143
144 #ifdef _WIN32
145 bool win32_chk(bool result, const char *file = NULL, int line = 0, const char *text = NULL);
146 bool win32_silent_chk(bool result);
147
148 #  ifndef NDEBUG
149 #    define WIN32_CHK(x) win32_chk((x), __FILE__, __LINE__, #    x)
150 #  else
151 #    define WIN32_CHK(x) win32_chk(x)
152 #  endif
153
154 #  define WIN32_CHK_SILENT(x, silent) ((silent) ? win32_silent_chk(x) : WIN32_CHK(x))
155 #endif /* _WIN32 */
156
157 #endif  // __GHOST_CONTEXT_H__