From a63d1e249bab13496e20185254cac29ec484f00b Mon Sep 17 00:00:00 2001 From: kervala Date: Sun, 13 Jun 2010 18:01:03 +0200 Subject: [PATCH] Fixed: #981 Create createWindow and destroyWindow private methods in OpenGL driver --- .../3d/driver/opengl/driver_opengl_window.cpp | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/code/nel/src/3d/driver/opengl/driver_opengl_window.cpp b/code/nel/src/3d/driver/opengl/driver_opengl_window.cpp index a863a898b..e2e91eaac 100644 --- a/code/nel/src/3d/driver/opengl/driver_opengl_window.cpp +++ b/code/nel/src/3d/driver/opengl/driver_opengl_window.cpp @@ -224,8 +224,10 @@ bool CDriverGL::unInit() _PBuffer = NULL; } - if (!UnregisterClassW(L"NLClass", GetModuleHandle(NULL))) + if (_Registered && !UnregisterClassW(L"NLClass", GetModuleHandle(NULL))) + { nlwarning("Can't unregister NLClass"); + } // Restaure monitor color parameters if (_NeedToRestaureGammaRamp) @@ -563,6 +565,10 @@ bool CDriverGL::setDisplay(nlWindow wnd, const GfxMode &mode, bool show, bool re _win = wnd; } + // associate OpenGL driver to window + SetWindowLongPtr(_win, GWLP_USERDATA, (LONG_PTR)this); + + _hDC=GetDC(_win); wglMakeCurrent(_hDC,NULL); @@ -668,14 +674,14 @@ bool CDriverGL::setDisplay(nlWindow wnd, const GfxMode &mode, bool show, bool re nlerror("glXChooseVisual() failed"); } + _visual_info = visual_info; + _ctx = glXCreateContext (_dpy, visual_info, None, GL_TRUE); if (_ctx == NULL) { nlerror("glXCreateContext() failed"); } - _visual_info = visual_info; - if (wnd == EmptyWindow) { if (!createWindow(mode)) @@ -922,9 +928,6 @@ bool CDriverGL::createWindow(const GfxMode &mode) return false; } - // associate OpenGL driver to window - SetWindowLongPtr(window, GWLP_USERDATA, (LONG_PTR)this); - #elif defined(NL_OS_MAC) && defined(NL_MAC_NATIVE) // TODO @@ -934,8 +937,11 @@ bool CDriverGL::createWindow(const GfxMode &mode) if (_visual_info == NULL) return false; + nlWindow root = RootWindow(_dpy, DefaultScreen(_dpy)); + XSetWindowAttributes attr; attr.background_pixel = BlackPixel(_dpy, DefaultScreen(_dpy)); + attr.colormap = XCreateColormap(_dpy, root, _visual_info->visual, AllocNone); #ifdef XF86VIDMODE // If we're going to attempt fullscreen, we need to set redirect to True, @@ -953,12 +959,7 @@ bool CDriverGL::createWindow(const GfxMode &mode) attr.override_redirect = False; #endif - int attr_flags = CWOverrideRedirect | CWBackPixel; - - nlWindow root = RootWindow(_dpy, DefaultScreen(_dpy)); - - attr.colormap = XCreateColormap(_dpy, root, _visual_info->visual, AllocNone); - attr_flags |= CWColormap; + int attr_flags = CWOverrideRedirect | CWBackPixel | CWColormap; window = XCreateWindow (_dpy, root, 0, 0, mode.Width, mode.Height, 0, _visual_info->depth, InputOutput, _visual_info->visual, attr_flags, &attr); @@ -1538,8 +1539,8 @@ void CDriverGL::getWindowSize(uint32 &width, uint32 &height) { if (_win) { - width = (uint32)(_WindowWidth); - height = (uint32)(_WindowHeight); + width = (uint32)_WindowWidth; + height = (uint32)_WindowHeight; } }