include/vcl/opengl/OpenGLContext.hxx | 1 vcl/opengl/gdiimpl.cxx | 2 vcl/source/opengl/OpenGLContext.cxx | 185 +++++++++++++++++------------------ vcl/unx/generic/gdi/salvd.cxx | 6 - 4 files changed, 96 insertions(+), 98 deletions(-)
New commits: commit 62648ad2cf7d64ab2dd2e8511a1874c5524149f0 Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sat Nov 8 15:00:30 2014 +0100 fix bug around wrong number of vertices Change-Id: I52c6c0b5d815266a254a75eabfe8947ccc44bfb5 diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx index 2d520ea..a4f5592 100644 --- a/vcl/opengl/gdiimpl.cxx +++ b/vcl/opengl/gdiimpl.cxx @@ -307,7 +307,7 @@ void OpenGLSalGraphicsImpl::DrawConvexPolygon( sal_uInt32 nPoints, const SalPoin } glEnableVertexAttribArray( GL_ATTRIB_POS ); - glVertexAttribPointer( GL_ATTRIB_POS, 2, GL_FLOAT, GL_FALSE, 0, &aVertices[0] ); + glVertexAttribPointer( GL_ATTRIB_POS, nPoints * 2, GL_FLOAT, GL_FALSE, 0, &aVertices[0] ); glDrawArrays( GL_TRIANGLE_FAN, 0, nPoints ); glDisableVertexAttribArray( GL_ATTRIB_POS ); } commit 42baae783944ef7940f2b4da3f0638db576bbc97 Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sat Nov 8 15:00:05 2014 +0100 improve log messages Change-Id: Ibf7d134be982122f403473380cff3b82efef8b71 diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx index d5cfd94..d499db1 100644 --- a/vcl/source/opengl/OpenGLContext.cxx +++ b/vcl/source/opengl/OpenGLContext.cxx @@ -979,7 +979,8 @@ void OpenGLContext::makeCurrent() #elif defined( IOS ) || defined( ANDROID ) // nothing #elif defined( UNX ) - glXMakeCurrent( m_aGLWin.dpy, m_aGLWin.win, m_aGLWin.ctx ); + if (!glXMakeCurrent( m_aGLWin.dpy, m_aGLWin.win, m_aGLWin.ctx )) + SAL_WARN("vcl.opengl", "OpenGLContext::makeCurrent failed"); #endif } commit 28cb366d426a34e04cb1233593678e42c9a24860 Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Fri Nov 7 06:13:05 2014 +0100 split the OpenGLContext::ImplInit method into its platform parts Change-Id: I2fb8a85748497f2e9c361764e094ebf83ebeabe8 diff --git a/include/vcl/opengl/OpenGLContext.hxx b/include/vcl/opengl/OpenGLContext.hxx index 8e4c257..b9c03c3 100644 --- a/include/vcl/opengl/OpenGLContext.hxx +++ b/include/vcl/opengl/OpenGLContext.hxx @@ -194,6 +194,7 @@ public: static SystemWindowData generateWinData(vcl::Window* pParent, bool bRequestLegacyContext); private: + SAL_DLLPRIVATE bool InitGLEW(); SAL_DLLPRIVATE bool initWindow(); SAL_DLLPRIVATE bool ImplInit(); #if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx index ce954bb..d5cfd94 100644 --- a/vcl/source/opengl/OpenGLContext.cxx +++ b/vcl/source/opengl/OpenGLContext.cxx @@ -493,6 +493,8 @@ bool OpenGLContext::init( vcl::Window* pParent ) m_pWindow.reset(pParent ? NULL : new vcl::Window(0, WB_NOBORDER|WB_NODIALOGCONTROL)); mpWindow = pParent ? pParent : m_pWindow.get(); + if(m_pWindow) + m_pWindow->setPosSizePixel(0,0,0,0); m_pChildWindow = 0; initWindow(); return ImplInit(); @@ -531,42 +533,11 @@ bool OpenGLContext::init(Display* dpy, Window win, int screen) return ImplInit(); } -#elif defined( _WIN32 ) -bool OpenGLContext::init(HDC hDC, HWND hWnd) -{ - if (mbInitialized) - return false; - - m_aGLWin.hDC = hDC; - m_aGLWin.hWnd = hWnd; - return ImplInit(); -} -#endif bool OpenGLContext::ImplInit() { SAL_INFO("vcl.opengl", "OpenGLContext::ImplInit----start"); - if(m_pWindow) - m_pWindow->setPosSizePixel(0,0,0,0); - m_aGLWin.Width = 0; - m_aGLWin.Height = 0; - -#if defined( WNT ) -#elif defined( MACOSX ) - -#elif defined( IOS ) - - SAL_INFO("vcl.opengl", "OpenGLContext not implemented yet for iOS"); - return false; - -#elif defined( ANDROID ) - - SAL_INFO("vcl.opengl", "OpenGLContext not implemented yet for Android"); - return false; - -#elif defined( UNX ) #ifdef DBG_UTIL - if (glXCreateContextAttribsARB && !mbRequestLegacyContext) { int best_fbc = -1; @@ -613,10 +584,78 @@ bool OpenGLContext::ImplInit() SAL_WARN("vcl.opengl", "unable to create GLX context"); return false; } -#endif -#if defined( WNT ) - PIXELFORMATDESCRIPTOR PixelFormatFront = // PixelFormat Tells Windows How We Want Things To Be + if( !glXMakeCurrent( m_aGLWin.dpy, m_aGLWin.win, m_aGLWin.ctx ) ) + { + SAL_WARN("vcl.opengl", "unable to select current GLX context"); + return false; + } + + int glxMinor, glxMajor; + double nGLXVersion = 0; + if( glXQueryVersion( m_aGLWin.dpy, &glxMajor, &glxMinor ) ) + nGLXVersion = glxMajor + 0.1*glxMinor; + SAL_INFO("vcl.opengl", "available GLX version: " << nGLXVersion); + + m_aGLWin.GLExtensions = glGetString( GL_EXTENSIONS ); + SAL_INFO("vcl.opengl", "available GL extensions: " << m_aGLWin.GLExtensions); + + XWindowAttributes xWinAttr; + XGetWindowAttributes( m_aGLWin.dpy, m_aGLWin.win, &xWinAttr ); + m_aGLWin.Width = xWinAttr.width; + m_aGLWin.Height = xWinAttr.height; + + if( m_aGLWin.HasGLXExtension("GLX_SGI_swap_control" ) ) + { + // enable vsync + typedef GLint (*glXSwapIntervalProc)(GLint); + glXSwapIntervalProc glXSwapInterval = (glXSwapIntervalProc) glXGetProcAddress( (const GLubyte*) "glXSwapIntervalSGI" ); + if( glXSwapInterval ) + { + int (*oldHandler)(Display* /*dpy*/, XErrorEvent* /*evnt*/); + + XLockDisplay(m_aGLWin.dpy); + XSync(m_aGLWin.dpy, false); + // replace error handler temporarily + oldHandler = XSetErrorHandler( oglErrorHandler ); + + errorTriggered = false; + + glXSwapInterval( 1 ); + + // sync so that we possibly get an XError + glXWaitGL(); + XSync(m_aGLWin.dpy, false); + + if( errorTriggered ) + SAL_WARN("vcl.opengl", "error when trying to set swap interval, NVIDIA or Mesa bug?"); + else + SAL_INFO("vcl.opengl", "set swap interval to 1 (enable vsync)"); + + // restore the error handler + XSetErrorHandler( oldHandler ); + XUnlockDisplay(m_aGLWin.dpy); + } + } + return InitGLEW(); +} + +#elif defined( _WIN32 ) + +bool OpenGLContext::init(HDC hDC, HWND hWnd) +{ + if (mbInitialized) + return false; + + m_aGLWin.hDC = hDC; + m_aGLWin.hWnd = hWnd; + return ImplInit(); +} + +bool OpenGLContext::ImplInit() +{ + SAL_INFO("vcl.opengl", "OpenGLContext::ImplInit----start"); + PIXELFORMATDESCRIPTOR PixelFormatFront = // PixelFormat Tells Windows How We Want Things To Be { sizeof(PIXELFORMATDESCRIPTOR), 1, // Version Number @@ -677,76 +716,35 @@ bool OpenGLContext::ImplInit() return false; } - RECT clientRect; - GetClientRect(WindowFromDC(m_aGLWin.hDC), &clientRect); m_aGLWin.Width = clientRect.right - clientRect.left; m_aGLWin.Height = clientRect.bottom - clientRect.top; + return InitGLEW(); +} + #elif defined( MACOSX ) +bool OpenGLContext::ImplInit() +{ + SAL_INFO("vcl.opengl", "OpenGLContext::ImplInit----start"); NSOpenGLView* pView = getOpenGLView(); OpenGLWrapper::makeCurrent(pView); -#elif defined( IOS ) - -#elif defined( ANDROID ) - -#elif defined( UNX ) - if( !glXMakeCurrent( m_aGLWin.dpy, m_aGLWin.win, m_aGLWin.ctx ) ) - { - SAL_WARN("vcl.opengl", "unable to select current GLX context"); - return false; - } - - int glxMinor, glxMajor; - double nGLXVersion = 0; - if( glXQueryVersion( m_aGLWin.dpy, &glxMajor, &glxMinor ) ) - nGLXVersion = glxMajor + 0.1*glxMinor; - SAL_INFO("vcl.opengl", "available GLX version: " << nGLXVersion); - - m_aGLWin.GLExtensions = glGetString( GL_EXTENSIONS ); - SAL_INFO("vcl.opengl", "available GL extensions: " << m_aGLWin.GLExtensions); - - XWindowAttributes xWinAttr; - XGetWindowAttributes( m_aGLWin.dpy, m_aGLWin.win, &xWinAttr ); - m_aGLWin.Width = xWinAttr.width; - m_aGLWin.Height = xWinAttr.height; - - if( m_aGLWin.HasGLXExtension("GLX_SGI_swap_control" ) ) - { - // enable vsync - typedef GLint (*glXSwapIntervalProc)(GLint); - glXSwapIntervalProc glXSwapInterval = (glXSwapIntervalProc) glXGetProcAddress( (const GLubyte*) "glXSwapIntervalSGI" ); - if( glXSwapInterval ) - { - int (*oldHandler)(Display* /*dpy*/, XErrorEvent* /*evnt*/); - - XLockDisplay(m_aGLWin.dpy); - XSync(m_aGLWin.dpy, false); - // replace error handler temporarily - oldHandler = XSetErrorHandler( oglErrorHandler ); - - errorTriggered = false; - - glXSwapInterval( 1 ); - - // sync so that we possibly get an XError - glXWaitGL(); - XSync(m_aGLWin.dpy, false); + return InitGLEW(); +} - if( errorTriggered ) - SAL_WARN("vcl.opengl", "error when trying to set swap interval, NVIDIA or Mesa bug?"); - else - SAL_INFO("vcl.opengl", "set swap interval to 1 (enable vsync)"); +#else - // restore the error handler - XSetErrorHandler( oldHandler ); - XUnlockDisplay(m_aGLWin.dpy); - } - } +bool OpenGLContext::ImplInit() +{ + SAL_INFO("vcl.opengl", "OpenGLContext not implemented for this platform"); + return false; +} #endif +bool OpenGLContext::InitGLEW() +{ static bool bGlewInit = false; if(!bGlewInit) { commit 8fe72c340e6c6b023f89ea803eabb56e4da603b3 Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Fri Nov 7 05:46:33 2014 +0100 remove old uncommented code Change-Id: I27bf3b6c812419b1a6dbaa1abb890ba89f4549ff diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx index b5a1898..ce954bb 100644 --- a/vcl/source/opengl/OpenGLContext.cxx +++ b/vcl/source/opengl/OpenGLContext.cxx @@ -747,8 +747,6 @@ bool OpenGLContext::ImplInit() #endif - //rGLRender.InitOpenGL(m_aGLWin); - static bool bGlewInit = false; if(!bGlewInit) { commit 00ea305db1adaf813b200aa1e426b7f4d556e3ff Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Fri Nov 7 01:32:11 2014 +0100 change order of calls Change-Id: I1c45ff7ba09972c20af0c28a5c3e1514171504ff diff --git a/vcl/unx/generic/gdi/salvd.cxx b/vcl/unx/generic/gdi/salvd.cxx index 83925d9..8e08cc2 100644 --- a/vcl/unx/generic/gdi/salvd.cxx +++ b/vcl/unx/generic/gdi/salvd.cxx @@ -102,14 +102,14 @@ void X11SalGraphics::Init( X11SalVirtualDevice *pDevice, SalColormap* pColormap, if (m_pDeleteColormap != pOrigDeleteColormap) delete pOrigDeleteColormap; - const Drawable aVdevDrawable = pDevice->GetDrawable(); - SetDrawable( aVdevDrawable, m_nXScreen ); - m_pVDev = pDevice; m_pFrame = NULL; bWindow_ = pDisplay->IsDisplay(); bVirDev_ = true; + + const Drawable aVdevDrawable = pDevice->GetDrawable(); + SetDrawable( aVdevDrawable, m_nXScreen ); } bool X11SalVirtualDevice::Init( SalDisplay *pDisplay, _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits