34 SDL_GLContext GHOST_ContextSDL::s_sharedContext =
NULL;
35 int GHOST_ContextSDL::s_sharedCount = 0;
39 int contextProfileMask,
40 int contextMajorVersion,
41 int contextMinorVersion,
43 int contextResetNotificationStrategy)
46 m_hidden_window(
NULL),
47 m_contextProfileMask(contextProfileMask),
48 m_contextMajorVersion(contextMajorVersion),
49 m_contextMinorVersion(contextMinorVersion),
50 m_contextFlags(contextFlags),
51 m_contextResetNotificationStrategy(contextResetNotificationStrategy),
59 if (m_context !=
NULL) {
60 if (m_window !=
NULL && m_context == SDL_GL_GetCurrentContext())
61 SDL_GL_MakeCurrent(m_window,
NULL);
63 if (m_context != s_sharedContext || s_sharedCount == 1) {
64 assert(s_sharedCount > 0);
68 if (s_sharedCount == 0)
69 s_sharedContext =
NULL;
71 SDL_GL_DeleteContext(m_context);
74 if (m_hidden_window !=
NULL)
75 SDL_DestroyWindow(m_hidden_window);
81 SDL_GL_SwapWindow(m_window);
109 #ifdef GHOST_OPENGL_ALPHA
110 const bool needAlpha =
true;
112 const bool needAlpha =
false;
115 SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, m_contextProfileMask);
116 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, m_contextMajorVersion);
117 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, m_contextMinorVersion);
118 SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, m_contextFlags);
120 SDL_GL_SetAttribute(SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 1);
121 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
122 SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
123 SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
124 SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
127 SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
131 SDL_GL_SetAttribute(SDL_GL_STEREO, 1);
134 if (m_window ==
NULL) {
135 m_hidden_window = SDL_CreateWindow(
"Offscreen Context Windows",
136 SDL_WINDOWPOS_UNDEFINED,
137 SDL_WINDOWPOS_UNDEFINED,
140 SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS |
143 m_window = m_hidden_window;
146 m_context = SDL_GL_CreateContext(m_window);
150 if (m_context !=
NULL) {
151 if (!s_sharedContext)
152 s_sharedContext = m_context;
161 SDL_GL_SwapWindow(m_window);
181 if (SDL_GL_SetSwapInterval(interval) != -1) {
191 intervalOut = SDL_GL_GetSwapInterval();
GHOST_TSuccess swapBuffers()
GHOST_TSuccess initializeDrawingContext()
GHOST_TSuccess releaseNativeHandles()
GHOST_TSuccess getSwapInterval(int &intervalOut)
GHOST_ContextSDL(bool stereoVisual, SDL_Window *window, int contextProfileMask, int contextMajorVersion, int contextMinorVersion, int contextFlags, int contextResetNotificationStrategy)
GHOST_TSuccess activateDrawingContext()
GHOST_TSuccess releaseDrawingContext()
GHOST_TSuccess setSwapInterval(int interval)
static void initClearGL()