Cleanup: strip ghost trailing space
[blender.git] / intern / ghost / intern / GHOST_ContextWGL.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2013 Blender Foundation.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): Jason Wilkins
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 /** \file ghost/intern/GHOST_ContextWGL.h
29  *  \ingroup GHOST
30  */
31
32 #ifndef __GHOST_CONTEXTWGL_H__
33 #define __GHOST_CONTEXTWGL_H__
34
35 //#define WIN32_COMPOSITING
36
37 #include "GHOST_Context.h"
38
39 #ifdef WITH_GLEW_MX
40 #define wglewGetContext() wglewContext
41 #endif
42
43 #include <GL/wglew.h>
44
45 #ifdef WITH_GLEW_MX
46 extern "C" WGLEWContext *wglewContext;
47 #endif
48
49 #ifndef GHOST_OPENGL_WGL_CONTEXT_FLAGS
50 #  ifdef WITH_GPU_DEBUG
51 #    define GHOST_OPENGL_WGL_CONTEXT_FLAGS WGL_CONTEXT_DEBUG_BIT_ARB
52 #  else
53 #    define GHOST_OPENGL_WGL_CONTEXT_FLAGS 0
54 #  endif
55 #endif
56
57 #ifndef GHOST_OPENGL_WGL_RESET_NOTIFICATION_STRATEGY
58 #define GHOST_OPENGL_WGL_RESET_NOTIFICATION_STRATEGY 0
59 #endif
60
61
62 class GHOST_ContextWGL : public GHOST_Context
63 {
64 public:
65         /**
66          * Constructor.
67          */
68         GHOST_ContextWGL(
69                 bool stereoVisual,
70                         bool alphaBackground,
71                 GHOST_TUns16 numOfAASamples,
72                 HWND hWnd,
73                 HDC hDC,
74                 int contextProfileMask,
75                 int contextMajorVersion,
76                 int contextMinorVersion,
77                 int contextFlags,
78                 int contextResetNotificationStrategy);
79
80         /**
81          * Destructor.
82          */
83         ~GHOST_ContextWGL();
84
85         /**
86          * Swaps front and back buffers of a window.
87          * \return  A boolean success indicator.
88          */
89         GHOST_TSuccess swapBuffers();
90
91         /**
92          * Activates the drawing context of this window.
93          * \return  A boolean success indicator.
94          */
95         GHOST_TSuccess activateDrawingContext();
96
97         /**
98          * Call immediately after new to initialize.  If this fails then immediately delete the object.
99          * \return Indication as to whether initialization has succeeded.
100          */
101         GHOST_TSuccess initializeDrawingContext();
102
103         /**
104          * Removes references to native handles from this context and then returns
105          * \return GHOST_kSuccess if it is OK for the parent to release the handles and
106          * GHOST_kFailure if releasing the handles will interfere with sharing
107          */
108         GHOST_TSuccess releaseNativeHandles();
109
110         /**
111          * Sets the swap interval for swapBuffers.
112          * \param interval The swap interval to use.
113          * \return A boolean success indicator.
114          */
115         GHOST_TSuccess setSwapInterval(int interval);
116
117         /**
118          * Gets the current swap interval for swapBuffers.
119          * \param intervalOut Variable to store the swap interval if it can be read.
120          * \return Whether the swap interval can be read.
121          */
122         GHOST_TSuccess getSwapInterval(int &intervalOut);
123
124 protected:
125         inline void activateWGLEW() const {
126 #ifdef WITH_GLEW_MX
127                 wglewContext = m_wglewContext;
128 #endif
129         }
130
131 private:
132         int choose_pixel_format(
133                 bool stereoVisual,
134                 int numOfAASamples,
135                 bool needAlpha,
136                 bool needStencil,
137                 bool sRGB);
138
139         int choose_pixel_format_arb(
140                 bool stereoVisual,
141                 int numOfAASamples,
142                 bool needAlpha,
143                 bool needStencil,
144                 bool sRGB);
145
146         int _choose_pixel_format_arb_1(
147                 bool stereoVisual,
148                 int numOfAASamples,
149                 bool needAlpha,
150                 bool needStencil,
151                 bool sRGB,
152                 int *swapMethodOut);
153
154         int _choose_pixel_format_arb_2(bool stereoVisual,
155                 int *numOfAASamples,
156                 bool needAlpha,
157                 bool needStencil,
158                 bool sRGB,
159                 int  swapMethod);
160
161         void initContextWGLEW(PIXELFORMATDESCRIPTOR &preferredPFD);
162
163         HWND m_hWnd;
164         HDC  m_hDC;
165
166         const int m_contextProfileMask;
167         const int m_contextMajorVersion;
168         const int m_contextMinorVersion;
169         const int m_contextFlags;
170         const bool m_alphaBackground;
171         const int m_contextResetNotificationStrategy;
172
173         HGLRC m_hGLRC;
174
175 #ifdef WITH_GLEW_MX
176         WGLEWContext *m_wglewContext;
177 #endif
178
179 #ifndef NDEBUG
180         const char *m_dummyVendor;
181         const char *m_dummyRenderer;
182         const char *m_dummyVersion;
183 #endif
184
185         static HGLRC s_sharedHGLRC;
186         static int   s_sharedCount;
187
188         static bool s_singleContextMode;
189 };
190
191 #endif  // __GHOST_CONTEXTWGL_H__