diff options
author | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-07-20 17:20:01 +0200 |
---|---|---|
committer | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-07-21 13:00:08 +0200 |
commit | 378b1d24a958114eb4484cb10f609f6e482772ec (patch) | |
tree | 012d5e529b09297ad475e5b64bfa35ad3e58a567 /avmedia | |
parent | 23c876deeb357b6306712ff0586a819176151c15 (diff) |
fdo#81055: Crash due to inadequate checks for GL version / capabilities
Base line is OpenGL 2.1 + extensions:
GL_ARB_framebuffer_object (part of OpenGL 3.0) for
glGenFramebuffers, glGenRenderbuffers...
GL_ARB_vertex_array_object (part of OpenGL 3.0) for
glGenVertexArrays, glBindVertexArray...
GL_ARB_sampler_objects (part of OpenGL 3.3) for
glGenSamplers, glBindSampler...
Change-Id: Ib8acf41ab85cd1677d0341719b3a5b4f743ed756
Diffstat (limited to 'avmedia')
-rw-r--r-- | avmedia/source/opengl/oglplayer.cxx | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/avmedia/source/opengl/oglplayer.cxx b/avmedia/source/opengl/oglplayer.cxx index a602d3cbfe3f..89ac3b1899fa 100644 --- a/avmedia/source/opengl/oglplayer.cxx +++ b/avmedia/source/opengl/oglplayer.cxx @@ -239,6 +239,25 @@ awt::Size SAL_CALL OGLPlayer::getPreferredPlayerWindowSize() throw ( uno::Runtim return awt::Size( 480, 360 ); } +static bool lcl_CheckOpenGLRequirements() +{ + float fVersion = OpenGLHelper::getGLVersion(); + if( fVersion >= 3.3 ) + { + return true; + } + else if( fVersion >= 3.0 ) + { + return glewIsSupported("GL_ARB_sampler_objects"); + } + else if( fVersion >= 2.1 ) + { + return glewIsSupported("GL_ARB_sampler_objects GL_ARB_framebuffer_object GL_ARB_vertex_array_object"); + } + + return false; +} + uno::Reference< media::XPlayerWindow > SAL_CALL OGLPlayer::createPlayerWindow( const uno::Sequence< uno::Any >& rArguments ) throw ( uno::RuntimeException, std::exception ) { @@ -264,6 +283,12 @@ uno::Reference< media::XPlayerWindow > SAL_CALL OGLPlayer::createPlayerWindow( c return uno::Reference< media::XPlayerWindow >(); } + if( !lcl_CheckOpenGLRequirements() ) + { + SAL_WARN("avmedia.opengl", "Your platform does not have the minimal OpenGL requiremenets!"); + return uno::Reference< media::XPlayerWindow >(); + } + Size aSize = pChildWindow->GetSizePixel(); m_aContext.setWinSize(aSize); m_pHandle->viewport.x = 0; @@ -298,6 +323,12 @@ uno::Reference< media::XFrameGrabber > SAL_CALL OGLPlayer::createFrameGrabber() return uno::Reference< media::XFrameGrabber >(); } + if( !lcl_CheckOpenGLRequirements() ) + { + SAL_WARN("avmedia.opengl", "Your platform does not have the minimal OpenGL requiremenets!"); + return uno::Reference< media::XFrameGrabber >(); + } + m_pHandle->viewport.x = 0; m_pHandle->viewport.y = 0; m_pHandle->viewport.width = getPreferredPlayerWindowSize().Width; |