Cleanup: remove redundant doxygen \file argument
[blender.git] / intern / ghost / intern / GHOST_ContextSDL.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) 2014 Blender Foundation.
17  * All rights reserved.
18  */
19
20 /** \file \ingroup GHOST
21  */
22
23 #ifndef __GHOST_CONTEXTSDL_H__
24 #define __GHOST_CONTEXTSDL_H__
25
26 #include "GHOST_Context.h"
27
28 extern "C" {
29         #include "SDL.h"
30 }
31
32
33 #ifndef GHOST_OPENGL_SDL_CONTEXT_FLAGS
34 #  ifdef WITH_GPU_DEBUG
35 #    define GHOST_OPENGL_SDL_CONTEXT_FLAGS SDL_GL_CONTEXT_DEBUG_FLAG
36 #  else
37 #    define GHOST_OPENGL_SDL_CONTEXT_FLAGS 0
38 # endif
39 #endif
40
41 #ifndef GHOST_OPENGL_SDL_RESET_NOTIFICATION_STRATEGY
42 #define GHOST_OPENGL_SDL_RESET_NOTIFICATION_STRATEGY 0
43 #endif
44
45
46 class GHOST_ContextSDL : public GHOST_Context
47 {
48 public:
49         /**
50          * Constructor.
51          */
52         GHOST_ContextSDL(
53                 bool stereoVisual,
54                 GHOST_TUns16 numOfAASamples,
55                 SDL_Window *window,
56                 int contextProfileMask,
57                 int contextMajorVersion,
58                 int contextMinorVersion,
59                 int contextFlags,
60                 int contextResetNotificationStrategy);
61
62         /**
63          * Destructor.
64          */
65         ~GHOST_ContextSDL();
66
67         /**
68          * Swaps front and back buffers of a window.
69          * \return  A boolean success indicator.
70          */
71         GHOST_TSuccess swapBuffers();
72
73         /**
74          * Activates the drawing context of this window.
75          * \return  A boolean success indicator.
76          */
77         GHOST_TSuccess activateDrawingContext();
78
79         /**
80          * Release the drawing context of the calling thread.
81          * \return  A boolean success indicator.
82          */
83         GHOST_TSuccess releaseDrawingContext();
84
85         /**
86          * Call immediately after new to initialize.  If this fails then immediately delete the object.
87          * \return Indication as to whether initialization has succeeded.
88          */
89         GHOST_TSuccess initializeDrawingContext();
90
91         /**
92          * Removes references to native handles from this context and then returns
93          * \return GHOST_kSuccess if it is OK for the parent to release the handles and
94          * GHOST_kFailure if releasing the handles will interfere with sharing
95          */
96         GHOST_TSuccess releaseNativeHandles();
97
98         /**
99          * Sets the swap interval for swapBuffers.
100          * \param interval The swap interval to use.
101          * \return A boolean success indicator.
102          */
103         GHOST_TSuccess setSwapInterval(int interval);
104
105         /**
106          * Gets the current swap interval for swapBuffers.
107          * \param intervalOut Variable to store the swap interval if it can be read.
108          * \return Whether the swap interval can be read.
109          */
110         GHOST_TSuccess getSwapInterval(int &intervalOut);
111
112 private:
113         SDL_Window *m_window;
114         SDL_Window *m_hidden_window;
115
116         const int m_contextProfileMask;
117         const int m_contextMajorVersion;
118         const int m_contextMinorVersion;
119         const int m_contextFlags;
120         const int m_contextResetNotificationStrategy;
121
122         SDL_GLContext m_context; /* m_sdl_glcontext */
123
124         /** The first created OpenGL context (for sharing display lists) */
125         static SDL_GLContext s_sharedContext;
126         static int           s_sharedCount;
127 };
128
129 #endif // __GHOST_CONTEXTSDL_H__