summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--avmedia/source/opengl/oglplayer.cxx31
-rw-r--r--include/vcl/opengl/OpenGLHelper.hxx3
-rw-r--r--vcl/source/opengl/OpenGLHelper.cxx15
3 files changed, 49 insertions, 0 deletions
diff --git a/avmedia/source/opengl/oglplayer.cxx b/avmedia/source/opengl/oglplayer.cxx
index f39f84749427..b827d2fbe13d 100644
--- a/avmedia/source/opengl/oglplayer.cxx
+++ b/avmedia/source/opengl/oglplayer.cxx
@@ -246,6 +246,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 )
{
@@ -271,6 +290,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;
@@ -305,6 +330,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;
diff --git a/include/vcl/opengl/OpenGLHelper.hxx b/include/vcl/opengl/OpenGLHelper.hxx
index 475bd720c082..58c3d15224e8 100644
--- a/include/vcl/opengl/OpenGLHelper.hxx
+++ b/include/vcl/opengl/OpenGLHelper.hxx
@@ -36,6 +36,9 @@ public:
*/
static void createFramebuffer(long nWidth, long nHeight,
GLuint& nFramebufferId, GLuint& nRenderbufferTextId, GLuint& nRenderbufferColorId);
+
+ // Get OpenGL version (needs a context)
+ static float getGLVersion();
};
VCLOPENGL_DLLPUBLIC std::ostream& operator<<(std::ostream& rStrm, const glm::mat4& rMatrix);
diff --git a/vcl/source/opengl/OpenGLHelper.cxx b/vcl/source/opengl/OpenGLHelper.cxx
index bace47b7bc33..8eb88b9642ac 100644
--- a/vcl/source/opengl/OpenGLHelper.cxx
+++ b/vcl/source/opengl/OpenGLHelper.cxx
@@ -299,5 +299,20 @@ void OpenGLHelper::createFramebuffer(long nWidth, long nHeight,
glBindFramebuffer(GL_FRAMEBUFFER, 0);
}
+float OpenGLHelper::getGLVersion()
+{
+ float fVersion = 1.0;
+ const GLubyte* aVersion = glGetString( GL_VERSION );
+ if( aVersion && aVersion[0] )
+ {
+ fVersion = aVersion[0] - '0';
+ if( aVersion[1] == '.' && aVersion[2] )
+ {
+ fVersion += (aVersion[2] - '0')/10.0;
+ }
+ }
+ return fVersion;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */