--- a/gfx/gl/GLContextProviderWGL.cpp
+++ b/gfx/gl/GLContextProviderWGL.cpp
@@ -117,17 +117,16 @@ WGLLibrary::EnsureInitialized()
const GLLibraryLoader::SymLoadStruct earlySymbols[] = {
{ (PRFuncPtr*) &fCreateContext, { "wglCreateContext", nullptr } },
{ (PRFuncPtr*) &fMakeCurrent, { "wglMakeCurrent", nullptr } },
{ (PRFuncPtr*) &fGetProcAddress, { "wglGetProcAddress", nullptr } },
{ (PRFuncPtr*) &fDeleteContext, { "wglDeleteContext", nullptr } },
{ (PRFuncPtr*) &fGetCurrentContext, { "wglGetCurrentContext", nullptr } },
{ (PRFuncPtr*) &fGetCurrentDC, { "wglGetCurrentDC", nullptr } },
- { (PRFuncPtr*) &fShareLists, { "wglShareLists", nullptr } },
{ nullptr, { nullptr } }
};
if (!GLLibraryLoader::LoadSymbols(mOGLLibrary, &earlySymbols[0])) {
NS_WARNING("Couldn't find required entry points in OpenGL DLL (early init)");
return false;
}
@@ -249,47 +248,38 @@ WGLLibrary::EnsureInitialized()
if (!mWindowGLContext) {
mHasRobustness = false;
mWindowGLContext = fCreateContext(mWindowDC);
}
}
mInitialized = true;
- // Call this to create the global GLContext instance,
- // and to check for errors. Note that this must happen /after/
- // setting mInitialized to TRUE, or an infinite loop results.
- if (GLContextProviderWGL::GetGlobalContext() == nullptr) {
- mInitialized = false;
- return false;
- }
-
reporter.SetSuccessful();
return true;
}
GLContextWGL::GLContextWGL(CreateContextFlags flags, const SurfaceCaps& caps,
- GLContext* sharedContext, bool isOffscreen, HDC aDC,
- HGLRC aContext, HWND aWindow)
- : GLContext(flags, caps, sharedContext, isOffscreen),
+ bool isOffscreen, HDC aDC, HGLRC aContext, HWND aWindow)
+ : GLContext(flags, caps, nullptr, isOffscreen),
mDC(aDC),
mContext(aContext),
mWnd(aWindow),
mPBuffer(nullptr),
mPixelFormat(0),
mIsDoubleBuffered(false)
{
// See 899855
SetProfileVersion(ContextProfile::OpenGLCompatibility, 200);
}
GLContextWGL::GLContextWGL(CreateContextFlags flags, const SurfaceCaps& caps,
- GLContext* sharedContext, bool isOffscreen, HANDLE aPbuffer,
- HDC aDC, HGLRC aContext, int aPixelFormat)
- : GLContext(flags, caps, sharedContext, isOffscreen),
+ bool isOffscreen, HANDLE aPbuffer, HDC aDC, HGLRC aContext,
+ int aPixelFormat)
+ : GLContext(flags, caps, nullptr, isOffscreen),
mDC(aDC),
mContext(aContext),
mWnd(nullptr),
mPBuffer(aPbuffer),
mPixelFormat(aPixelFormat),
mIsDoubleBuffered(false)
{
// See 899855
@@ -412,17 +402,17 @@ IsValidSizeForFormat(HDC hDC, int format
if (requested.width > max.width)
return false;
if (requested.height > max.height)
return false;
return true;
}
-static GLContextWGL *
+static GLContextWGL*
GetGlobalContextWGL()
{
return static_cast<GLContextWGL*>(GLContextProviderWGL::GetGlobalContext());
}
already_AddRefed<GLContext>
GLContextProviderWGL::CreateWrappingExisting(void*, void*)
{
@@ -448,63 +438,46 @@ GLContextProviderWGL::CreateForWindow(ns
* wglCreateContext will fail.
*/
HDC dc = (HDC)aWidget->GetNativeData(NS_NATIVE_GRAPHIC);
SetPixelFormat(dc, sWGLLib.GetWindowPixelFormat(), nullptr);
HGLRC context;
- GLContextWGL* shareContext = GetGlobalContextWGL();
-
if (sWGLLib.HasRobustness()) {
int attribs[] = {
LOCAL_WGL_CONTEXT_FLAGS_ARB, LOCAL_WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB,
LOCAL_WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB, LOCAL_WGL_LOSE_CONTEXT_ON_RESET_ARB,
0
};
- context = sWGLLib.fCreateContextAttribs(dc,
- shareContext ? shareContext->Context() : nullptr,
- attribs);
+ context = sWGLLib.fCreateContextAttribs(dc, nullptr, attribs);
} else {
context = sWGLLib.fCreateContext(dc);
- if (context &&
- shareContext &&
- !sWGLLib.fShareLists(shareContext->Context(), context))
- {
- printf_stderr("WGL context creation failed for window: wglShareLists returned false!");
- sWGLLib.fDeleteContext(context);
- context = nullptr;
- }
}
if (!context) {
return nullptr;
}
SurfaceCaps caps = SurfaceCaps::ForRGBA();
- RefPtr<GLContextWGL> glContext = new GLContextWGL(CreateContextFlags::NONE,
- caps,
- shareContext,
- false,
- dc,
- context);
+ RefPtr<GLContextWGL> glContext = new GLContextWGL(CreateContextFlags::NONE, caps,
+ false, dc, context);
if (!glContext->Init()) {
return nullptr;
}
glContext->SetIsDoubleBuffered(true);
return glContext.forget();
}
static already_AddRefed<GLContextWGL>
-CreatePBufferOffscreenContext(CreateContextFlags flags, const IntSize& aSize,
- GLContextWGL* aShareContext)
+CreatePBufferOffscreenContext(CreateContextFlags flags, const IntSize& aSize)
{
WGLLibrary& wgl = sWGLLib;
const int pfAttribs[] = {
LOCAL_WGL_SUPPORT_OPENGL_ARB, LOCAL_GL_TRUE,
LOCAL_WGL_ACCELERATION_ARB, LOCAL_WGL_FULL_ACCELERATION_ARB,
LOCAL_WGL_DRAW_TO_PBUFFER_ARB, LOCAL_GL_TRUE,
@@ -538,97 +511,66 @@ CreatePBufferOffscreenContext(CreateCont
return nullptr;
}
HDC pbdc = wgl.fGetPbufferDC(pbuffer);
NS_ASSERTION(pbdc, "expected a dc");
HGLRC context;
if (wgl.HasRobustness()) {
- int attribs[] = {
+ const int attribs[] = {
LOCAL_WGL_CONTEXT_FLAGS_ARB, LOCAL_WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB,
LOCAL_WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB, LOCAL_WGL_LOSE_CONTEXT_ON_RESET_ARB,
0
};
- const HGLRC shareHandle = (aShareContext ? aShareContext->Context() : 0);
- context = wgl.fCreateContextAttribs(pbdc, shareHandle, attribs);
+ context = wgl.fCreateContextAttribs(pbdc, nullptr, attribs);
} else {
context = wgl.fCreateContext(pbdc);
- if (context && aShareContext) {
- if (!wgl.fShareLists(aShareContext->Context(), context)) {
- wgl.fDeleteContext(context);
- context = nullptr;
- printf_stderr("ERROR - creating pbuffer context failed because wglShareLists returned FALSE");
- }
- }
}
if (!context) {
wgl.fDestroyPbuffer(pbuffer);
return nullptr;
}
SurfaceCaps dummyCaps = SurfaceCaps::Any();
- RefPtr<GLContextWGL> glContext = new GLContextWGL(flags, dummyCaps,
- aShareContext,
- true,
- pbuffer,
- pbdc,
- context,
- chosenFormat);
-
+ RefPtr<GLContextWGL> glContext = new GLContextWGL(flags, dummyCaps, true, pbuffer,
+ pbdc, context, chosenFormat);
return glContext.forget();
}
static already_AddRefed<GLContextWGL>
CreateWindowOffscreenContext()
{
- // CreateWindowOffscreenContext must return a global-shared context
- GLContextWGL* shareContext = GetGlobalContextWGL();
- if (!shareContext) {
- return nullptr;
- }
-
HDC dc;
HWND win = sWGLLib.CreateDummyWindow(&dc);
if (!win) {
return nullptr;
}
HGLRC context = sWGLLib.fCreateContext(dc);
if (sWGLLib.HasRobustness()) {
int attribs[] = {
LOCAL_WGL_CONTEXT_FLAGS_ARB, LOCAL_WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB,
LOCAL_WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB, LOCAL_WGL_LOSE_CONTEXT_ON_RESET_ARB,
0
};
- context = sWGLLib.fCreateContextAttribs(dc, shareContext->Context(), attribs);
+ context = sWGLLib.fCreateContextAttribs(dc, nullptr, attribs);
} else {
context = sWGLLib.fCreateContext(dc);
- if (context && shareContext &&
- !sWGLLib.fShareLists(shareContext->Context(), context))
- {
- NS_WARNING("wglShareLists failed!");
-
- sWGLLib.fDeleteContext(context);
- DestroyWindow(win);
- return nullptr;
- }
}
if (!context) {
return nullptr;
}
SurfaceCaps caps = SurfaceCaps::ForRGBA();
RefPtr<GLContextWGL> glContext = new GLContextWGL(CreateContextFlags::NONE, caps,
- shareContext, true, dc, context,
- win);
-
+ true, dc, context, win);
return glContext.forget();
}
/*static*/ already_AddRefed<GLContext>
GLContextProviderWGL::CreateHeadless(CreateContextFlags flags,
nsACString* const out_failureId)
{
if (!sWGLLib.EnsureInitialized()) {
@@ -638,18 +580,17 @@ GLContextProviderWGL::CreateHeadless(Cre
RefPtr<GLContextWGL> glContext;
// Always try to create a pbuffer context first, because we
// want the context isolation.
if (sWGLLib.fCreatePbuffer &&
sWGLLib.fChoosePixelFormat)
{
IntSize dummySize = IntSize(16, 16);
- glContext = CreatePBufferOffscreenContext(flags, dummySize,
- GetGlobalContextWGL());
+ glContext = CreatePBufferOffscreenContext(flags, dummySize);
}
// If it failed, then create a window context and use a FBO.
if (!glContext) {
glContext = CreateWindowOffscreenContext();
}
if (!glContext ||
@@ -675,35 +616,21 @@ GLContextProviderWGL::CreateOffscreen(co
if (!gl->InitOffscreen(size, minCaps)) {
*out_failureId = NS_LITERAL_CSTRING("FEATURE_FAILURE_WGL_INIT");
return nullptr;
}
return gl.forget();
}
-static StaticRefPtr<GLContext> gGlobalContext;
-
/*static*/ GLContext*
GLContextProviderWGL::GetGlobalContext()
{
- static bool triedToCreateContext = false;
- if (!triedToCreateContext) {
- triedToCreateContext = true;
-
- MOZ_RELEASE_ASSERT(!gGlobalContext, "GFX: Global GL context already initialized.");
- nsCString discardFailureId;
- RefPtr<GLContext> temp = CreateHeadless(CreateContextFlags::NONE,
- &discardFailureId);
- gGlobalContext = temp;
- }
-
- return static_cast<GLContext*>(gGlobalContext);
+ return nullptr;
}
/*static*/ void
GLContextProviderWGL::Shutdown()
{
- gGlobalContext = nullptr;
}
} /* namespace gl */
} /* namespace mozilla */