Kaydet (Commit) 378b1d24 authored tarafından Zolnai Tamás's avatar Zolnai Tamás

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
üst 23c876de
...@@ -239,6 +239,25 @@ awt::Size SAL_CALL OGLPlayer::getPreferredPlayerWindowSize() throw ( uno::Runtim ...@@ -239,6 +239,25 @@ awt::Size SAL_CALL OGLPlayer::getPreferredPlayerWindowSize() throw ( uno::Runtim
return awt::Size( 480, 360 ); 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 ) uno::Reference< media::XPlayerWindow > SAL_CALL OGLPlayer::createPlayerWindow( const uno::Sequence< uno::Any >& rArguments )
throw ( uno::RuntimeException, std::exception ) throw ( uno::RuntimeException, std::exception )
{ {
...@@ -264,6 +283,12 @@ uno::Reference< media::XPlayerWindow > SAL_CALL OGLPlayer::createPlayerWindow( c ...@@ -264,6 +283,12 @@ uno::Reference< media::XPlayerWindow > SAL_CALL OGLPlayer::createPlayerWindow( c
return uno::Reference< media::XPlayerWindow >(); 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(); Size aSize = pChildWindow->GetSizePixel();
m_aContext.setWinSize(aSize); m_aContext.setWinSize(aSize);
m_pHandle->viewport.x = 0; m_pHandle->viewport.x = 0;
...@@ -298,6 +323,12 @@ uno::Reference< media::XFrameGrabber > SAL_CALL OGLPlayer::createFrameGrabber() ...@@ -298,6 +323,12 @@ uno::Reference< media::XFrameGrabber > SAL_CALL OGLPlayer::createFrameGrabber()
return uno::Reference< media::XFrameGrabber >(); 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.x = 0;
m_pHandle->viewport.y = 0; m_pHandle->viewport.y = 0;
m_pHandle->viewport.width = getPreferredPlayerWindowSize().Width; m_pHandle->viewport.width = getPreferredPlayerWindowSize().Width;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment