summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZolnai Tamás <tamas.zolnai@collabora.com>2014-07-20 17:20:01 +0200
committerZolnai Tamás <tamas.zolnai@collabora.com>2014-07-21 13:00:08 +0200
commit378b1d24a958114eb4484cb10f609f6e482772ec (patch)
tree012d5e529b09297ad475e5b64bfa35ad3e58a567
parent23c876deeb357b6306712ff0586a819176151c15 (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
-rw-r--r--avmedia/source/opengl/oglplayer.cxx31
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;