parent
e5ea20e2c7
commit
8d866e1d23
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,568 @@
|
|||||||
|
From ac19024c141448dbc5d89ad943a28875b4504f5c Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||||
|
Date: Fri, 25 Nov 2016 14:11:13 +0000
|
||||||
|
Subject: [PATCH] gtk3: implement opengl support for slideshow
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
all of them work, except "Fall" doesn't look right, but it has
|
||||||
|
the exact same problem under gtk2/gen to.
|
||||||
|
|
||||||
|
Change-Id: I73cb9c0fb8211f727198be78d90d4f80a4f8c7c8
|
||||||
|
Reviewed-on: https://gerrit.libreoffice.org/31214
|
||||||
|
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
|
||||||
|
Tested-by: Caolán McNamara <caolanm@redhat.com>
|
||||||
|
(cherry picked from commit 8bd9db90383ee008777903c35c7a5eb2c5352e71)
|
||||||
|
---
|
||||||
|
include/vcl/opengl/OpenGLContext.hxx | 2 +
|
||||||
|
slideshow/source/engine/opengl/TransitionImpl.cxx | 73 ++++++------
|
||||||
|
slideshow/source/engine/opengl/TransitionImpl.hxx | 9 +-
|
||||||
|
.../source/engine/opengl/TransitionerImpl.cxx | 7 +-
|
||||||
|
vcl/inc/unx/gtk/gtkinst.hxx | 1 +
|
||||||
|
vcl/source/opengl/OpenGLContext.cxx | 5 +
|
||||||
|
vcl/unx/gtk3/gtk3gtkinst.cxx | 127 +++++++++++++++++++++
|
||||||
|
7 files changed, 181 insertions(+), 43 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/include/vcl/opengl/OpenGLContext.hxx b/include/vcl/opengl/OpenGLContext.hxx
|
||||||
|
index ffcd816..5796f7e 100644
|
||||||
|
--- a/include/vcl/opengl/OpenGLContext.hxx
|
||||||
|
+++ b/include/vcl/opengl/OpenGLContext.hxx
|
||||||
|
@@ -129,6 +129,8 @@ public:
|
||||||
|
void registerAsCurrent();
|
||||||
|
/// reset the GL context so this context is not implicit in subsequent GL calls.
|
||||||
|
virtual void resetCurrent();
|
||||||
|
+ /// unbind the GL_FRAMEBUFFER to its default state, needed for gtk3
|
||||||
|
+ virtual void restoreDefaultFramebuffer();
|
||||||
|
virtual void swapBuffers();
|
||||||
|
virtual void sync();
|
||||||
|
void show();
|
||||||
|
diff --git a/slideshow/source/engine/opengl/TransitionImpl.cxx b/slideshow/source/engine/opengl/TransitionImpl.cxx
|
||||||
|
index 115aaf2..7b9b894 100644
|
||||||
|
--- a/slideshow/source/engine/opengl/TransitionImpl.cxx
|
||||||
|
+++ b/slideshow/source/engine/opengl/TransitionImpl.cxx
|
||||||
|
@@ -29,6 +29,7 @@
|
||||||
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
|
#include <glm/gtc/type_ptr.hpp>
|
||||||
|
#include <vcl/opengl/OpenGLHelper.hxx>
|
||||||
|
+#include <vcl/opengl/OpenGLContext.hxx>
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <array>
|
||||||
|
@@ -132,7 +133,7 @@ static std::vector<int> uploadPrimitives(const Primitives_t& primitives)
|
||||||
|
return indices;
|
||||||
|
}
|
||||||
|
|
||||||
|
-bool OGLTransitionImpl::prepare( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex )
|
||||||
|
+bool OGLTransitionImpl::prepare( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext )
|
||||||
|
{
|
||||||
|
m_nProgramObject = makeShader();
|
||||||
|
if (!m_nProgramObject)
|
||||||
|
@@ -200,7 +201,7 @@ bool OGLTransitionImpl::prepare( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteri
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
|
||||||
|
- prepareTransition( glLeavingSlideTex, glEnteringSlideTex );
|
||||||
|
+ prepareTransition( glLeavingSlideTex, glEnteringSlideTex, pContext );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -233,7 +234,7 @@ void OGLTransitionImpl::finish( double, double, double, double, double )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
-void OGLTransitionImpl::prepareTransition( sal_Int32, sal_Int32 )
|
||||||
|
+void OGLTransitionImpl::prepareTransition( sal_Int32, sal_Int32, OpenGLContext* )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -241,7 +242,7 @@ void OGLTransitionImpl::finishTransition()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
-void OGLTransitionImpl::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale )
|
||||||
|
+void OGLTransitionImpl::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext * )
|
||||||
|
{
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale );
|
||||||
|
@@ -257,7 +258,7 @@ void OGLTransitionImpl::displaySlides_( double nTime, sal_Int32 glLeavingSlideTe
|
||||||
|
}
|
||||||
|
|
||||||
|
void OGLTransitionImpl::display( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex,
|
||||||
|
- double SlideWidth, double SlideHeight, double DispWidth, double DispHeight )
|
||||||
|
+ double SlideWidth, double SlideHeight, double DispWidth, double DispHeight, OpenGLContext *pContext )
|
||||||
|
{
|
||||||
|
const double SlideWidthScale = SlideWidth/DispWidth;
|
||||||
|
const double SlideHeightScale = SlideHeight/DispHeight;
|
||||||
|
@@ -267,7 +268,7 @@ void OGLTransitionImpl::display( double nTime, sal_Int32 glLeavingSlideTex, sal_
|
||||||
|
prepare( nTime, SlideWidth, SlideHeight, DispWidth, DispHeight );
|
||||||
|
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
- displaySlides_( nTime, glLeavingSlideTex, glEnteringSlideTex, SlideWidthScale, SlideHeightScale );
|
||||||
|
+ displaySlides_( nTime, glLeavingSlideTex, glEnteringSlideTex, SlideWidthScale, SlideHeightScale, pContext );
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
displayScene( nTime, SlideWidth, SlideHeight, DispWidth, DispHeight );
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
@@ -534,9 +535,9 @@ public:
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual GLuint makeShader() const override;
|
||||||
|
- virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override;
|
||||||
|
+ virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext *pContext ) override;
|
||||||
|
|
||||||
|
- virtual void prepareTransition( sal_Int32, sal_Int32 ) override {
|
||||||
|
+ virtual void prepareTransition( sal_Int32, sal_Int32, OpenGLContext* ) override {
|
||||||
|
glDisable(GL_CULL_FACE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -551,7 +552,7 @@ GLuint ReflectionTransition::makeShader() const
|
||||||
|
}
|
||||||
|
|
||||||
|
void ReflectionTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex,
|
||||||
|
- double SlideWidthScale, double SlideHeightScale )
|
||||||
|
+ double SlideWidthScale, double SlideHeightScale, OpenGLContext * )
|
||||||
|
{
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale );
|
||||||
|
@@ -598,7 +599,7 @@ public:
|
||||||
|
private:
|
||||||
|
virtual GLuint makeShader() const override;
|
||||||
|
|
||||||
|
- virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override;
|
||||||
|
+ virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext *pContext ) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
GLuint SimpleTransition::makeShader() const
|
||||||
|
@@ -607,7 +608,7 @@ GLuint SimpleTransition::makeShader() const
|
||||||
|
}
|
||||||
|
|
||||||
|
void SimpleTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex,
|
||||||
|
- double SlideWidthScale, double SlideHeightScale )
|
||||||
|
+ double SlideWidthScale, double SlideHeightScale, OpenGLContext * )
|
||||||
|
{
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale );
|
||||||
|
@@ -857,10 +858,10 @@ public:
|
||||||
|
{}
|
||||||
|
|
||||||
|
private:
|
||||||
|
- virtual void displaySlides_(double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale) override;
|
||||||
|
+ virtual void displaySlides_(double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext *pContext) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
-void RochadeTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale )
|
||||||
|
+void RochadeTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext * )
|
||||||
|
{
|
||||||
|
applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale );
|
||||||
|
|
||||||
|
@@ -1195,7 +1196,7 @@ public:
|
||||||
|
{}
|
||||||
|
|
||||||
|
private:
|
||||||
|
- virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override;
|
||||||
|
+ virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext *pContext ) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
Primitives_t makeLeavingSlide(double nTime)
|
||||||
|
@@ -1229,7 +1230,7 @@ Primitives_t makeLeavingSlide(double nTime)
|
||||||
|
}
|
||||||
|
|
||||||
|
void DiamondTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex,
|
||||||
|
- double SlideWidthScale, double SlideHeightScale )
|
||||||
|
+ double SlideWidthScale, double SlideHeightScale, OpenGLContext * )
|
||||||
|
{
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale );
|
||||||
|
@@ -1411,7 +1412,7 @@ protected:
|
||||||
|
{}
|
||||||
|
|
||||||
|
virtual void finishTransition() override;
|
||||||
|
- virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ) override;
|
||||||
|
+ virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext ) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
/** various data */
|
||||||
|
@@ -1488,7 +1489,7 @@ void initPermTexture(GLuint *texID)
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
}
|
||||||
|
|
||||||
|
-void PermTextureTransition::prepareTransition( sal_Int32, sal_Int32 )
|
||||||
|
+void PermTextureTransition::prepareTransition( sal_Int32, sal_Int32, OpenGLContext* )
|
||||||
|
{
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
GLint location = glGetUniformLocation( m_nProgramObject, "permTexture" );
|
||||||
|
@@ -1629,8 +1630,8 @@ public:
|
||||||
|
private:
|
||||||
|
virtual void finishTransition() override;
|
||||||
|
virtual GLuint makeShader() const override;
|
||||||
|
- virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ) override;
|
||||||
|
- virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override;
|
||||||
|
+ virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext ) override;
|
||||||
|
+ virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext *pContext ) override;
|
||||||
|
|
||||||
|
GLint mnSlideLocation = -1;
|
||||||
|
GLint mnTileInfoLocation = -1;
|
||||||
|
@@ -1679,10 +1680,10 @@ glm::mat4 lookAt(const glm::vec3& eye, const glm::vec3& center, const glm::vec3&
|
||||||
|
-glm::dot(s, eye), -glm::dot(u, eye), glm::dot(f, eye), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
-void VortexTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex )
|
||||||
|
+void VortexTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext )
|
||||||
|
{
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
- PermTextureTransition::prepareTransition( glLeavingSlideTex, glEnteringSlideTex );
|
||||||
|
+ PermTextureTransition::prepareTransition( glLeavingSlideTex, glEnteringSlideTex, pContext );
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
|
||||||
|
mnSlideLocation = glGetUniformLocation(m_nProgramObject, "slide");
|
||||||
|
@@ -1783,7 +1784,7 @@ void VortexTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
+ pContext->restoreDefaultFramebuffer();
|
||||||
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
|
||||||
|
glActiveTexture( GL_TEXTURE2 );
|
||||||
|
@@ -1793,7 +1794,7 @@ void VortexTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32
|
||||||
|
glActiveTexture( GL_TEXTURE0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
-void VortexTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale )
|
||||||
|
+void VortexTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext * pContext )
|
||||||
|
{
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale );
|
||||||
|
@@ -1815,7 +1816,7 @@ void VortexTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex
|
||||||
|
displaySlide( nTime, glEnteringSlideTex, getScene().getEnteringSlide(), SlideWidthScale, SlideHeightScale );
|
||||||
|
|
||||||
|
glViewport(viewport[0], viewport[1], viewport[2], viewport[3]);
|
||||||
|
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
+ pContext->restoreDefaultFramebuffer();
|
||||||
|
glUniform1f( mnShadowLocation, 0.0 );
|
||||||
|
glUniform1f( mnSlideLocation, 0.0 );
|
||||||
|
displaySlide( nTime, glLeavingSlideTex, getScene().getLeavingSlide(), SlideWidthScale, SlideHeightScale );
|
||||||
|
@@ -1877,7 +1878,7 @@ public:
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual GLuint makeShader() const override;
|
||||||
|
- virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ) override;
|
||||||
|
+ virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext ) override;
|
||||||
|
virtual void prepare( double nTime, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight ) override;
|
||||||
|
|
||||||
|
glm::vec2 maCenter;
|
||||||
|
@@ -1889,7 +1890,7 @@ GLuint RippleTransition::makeShader() const
|
||||||
|
return OpenGLHelper::LoadShaders( "basicVertexShader", "rippleFragmentShader" );
|
||||||
|
}
|
||||||
|
|
||||||
|
-void RippleTransition::prepareTransition( sal_Int32, sal_Int32 )
|
||||||
|
+void RippleTransition::prepareTransition( sal_Int32, sal_Int32, OpenGLContext* )
|
||||||
|
{
|
||||||
|
GLint nCenterLocation = glGetUniformLocation(m_nProgramObject, "center");
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
@@ -1974,7 +1975,7 @@ public:
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual GLuint makeShader() const override;
|
||||||
|
- virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ) override;
|
||||||
|
+ virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext ) override;
|
||||||
|
virtual void finish( double nTime, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight ) override;
|
||||||
|
|
||||||
|
GLuint maBuffer = 0;
|
||||||
|
@@ -1990,10 +1991,10 @@ struct ThreeFloats
|
||||||
|
GLfloat x, y, z;
|
||||||
|
};
|
||||||
|
|
||||||
|
-void GlitterTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex )
|
||||||
|
+void GlitterTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext )
|
||||||
|
{
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
- PermTextureTransition::prepareTransition( glLeavingSlideTex, glEnteringSlideTex );
|
||||||
|
+ PermTextureTransition::prepareTransition( glLeavingSlideTex, glEnteringSlideTex, pContext );
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
|
||||||
|
GLint nNumTilesLocation = glGetUniformLocation(m_nProgramObject, "numTiles");
|
||||||
|
@@ -2078,8 +2079,8 @@ public:
|
||||||
|
private:
|
||||||
|
virtual void finishTransition() override;
|
||||||
|
virtual GLuint makeShader() const override;
|
||||||
|
- virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ) override;
|
||||||
|
- virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override;
|
||||||
|
+ virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext ) override;
|
||||||
|
+ virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext *pContext ) override;
|
||||||
|
|
||||||
|
GLint maHexagonSizeLocation = -1;
|
||||||
|
GLint maSelectedTextureLocation = -1;
|
||||||
|
@@ -2112,10 +2113,10 @@ GLuint HoneycombTransition::makeShader() const
|
||||||
|
return OpenGLHelper::LoadShaders( "honeycombVertexShader", "honeycombFragmentShader", "honeycombGeometryShader" );
|
||||||
|
}
|
||||||
|
|
||||||
|
-void HoneycombTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex )
|
||||||
|
+void HoneycombTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext )
|
||||||
|
{
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
- PermTextureTransition::prepareTransition( glLeavingSlideTex, glEnteringSlideTex );
|
||||||
|
+ PermTextureTransition::prepareTransition( glLeavingSlideTex, glEnteringSlideTex, pContext );
|
||||||
|
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
maHexagonSizeLocation = glGetUniformLocation(m_nProgramObject, "hexagonSize");
|
||||||
|
@@ -2189,11 +2190,11 @@ void HoneycombTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_In
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
+ pContext->restoreDefaultFramebuffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HoneycombTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex,
|
||||||
|
- double SlideWidthScale, double SlideHeightScale )
|
||||||
|
+ double SlideWidthScale, double SlideHeightScale, OpenGLContext *pContext )
|
||||||
|
{
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
applyOverallOperations(nTime, SlideWidthScale, SlideHeightScale);
|
||||||
|
@@ -2217,7 +2218,7 @@ void HoneycombTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlide
|
||||||
|
|
||||||
|
// The back (entering) slide needs to be drawn before the front (leaving) one in order for blending to work.
|
||||||
|
glViewport(viewport[0], viewport[1], viewport[2], viewport[3]);
|
||||||
|
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
+ pContext->restoreDefaultFramebuffer();
|
||||||
|
glUniform1f(mnShadowLocation, 0.0);
|
||||||
|
glUniform1f(maSelectedTextureLocation, 0.0);
|
||||||
|
glUniform1f(maHexagonSizeLocation, 1.0f - borderSize);
|
||||||
|
diff --git a/slideshow/source/engine/opengl/TransitionImpl.hxx b/slideshow/source/engine/opengl/TransitionImpl.hxx
|
||||||
|
index b739c0c..54b7ba0 100644
|
||||||
|
--- a/slideshow/source/engine/opengl/TransitionImpl.hxx
|
||||||
|
+++ b/slideshow/source/engine/opengl/TransitionImpl.hxx
|
||||||
|
@@ -36,6 +36,7 @@
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class Primitive;
|
||||||
|
+class OpenGLContext;
|
||||||
|
class Operation;
|
||||||
|
class SceneObject;
|
||||||
|
class TransitionData;
|
||||||
|
@@ -136,10 +137,10 @@ public:
|
||||||
|
|
||||||
|
/** Prepare transition.
|
||||||
|
*/
|
||||||
|
- bool prepare( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex );
|
||||||
|
+ bool prepare( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext );
|
||||||
|
/** Display a step of the transition.
|
||||||
|
*/
|
||||||
|
- void display( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight );
|
||||||
|
+ void display( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight, OpenGLContext *pContext );
|
||||||
|
/** Clean up after transition.
|
||||||
|
*/
|
||||||
|
void finish();
|
||||||
|
@@ -182,7 +183,7 @@ private:
|
||||||
|
*
|
||||||
|
* Default implementation does nothing.
|
||||||
|
*/
|
||||||
|
- virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex );
|
||||||
|
+ virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext );
|
||||||
|
|
||||||
|
/** This function is called when the transition needs to clear after itself, like delete own textures etc.
|
||||||
|
*
|
||||||
|
@@ -195,7 +196,7 @@ private:
|
||||||
|
* Default implementation applies overall operations and then
|
||||||
|
* displays both slides.
|
||||||
|
*/
|
||||||
|
- virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale );
|
||||||
|
+ virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext *pContext );
|
||||||
|
|
||||||
|
/** This function is called in prepare method to create the GL program.
|
||||||
|
*
|
||||||
|
diff --git a/slideshow/source/engine/opengl/TransitionerImpl.cxx b/slideshow/source/engine/opengl/TransitionerImpl.cxx
|
||||||
|
index 01cd3e5..f2f0b3f 100644
|
||||||
|
--- a/slideshow/source/engine/opengl/TransitionerImpl.cxx
|
||||||
|
+++ b/slideshow/source/engine/opengl/TransitionerImpl.cxx
|
||||||
|
@@ -407,7 +407,7 @@ void OGLTransitionerImpl::impl_prepareSlides()
|
||||||
|
bool OGLTransitionerImpl::impl_prepareTransition()
|
||||||
|
{
|
||||||
|
if( mpTransition && mpTransition->getSettings().mnRequiredGLVersion <= mnGLVersion )
|
||||||
|
- return mpTransition->prepare( maLeavingSlideGL, maEnteringSlideGL );
|
||||||
|
+ return mpTransition->prepare( maLeavingSlideGL, maEnteringSlideGL, mpContext.get() );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1046,10 +1046,11 @@ void SAL_CALL OGLTransitionerImpl::update( double nTime ) throw (uno::RuntimeExc
|
||||||
|
CHECK_GL_ERROR();
|
||||||
|
|
||||||
|
const GLWindow& rGLWindow(mpContext->getOpenGLWindow());
|
||||||
|
- mpTransition->display( nTime, maLeavingSlideGL, maEnteringSlideGL,
|
||||||
|
+ mpTransition->display(nTime, maLeavingSlideGL, maEnteringSlideGL,
|
||||||
|
maSlideSize.Width, maSlideSize.Height,
|
||||||
|
static_cast<double>(rGLWindow.Width),
|
||||||
|
- static_cast<double>(rGLWindow.Height) );
|
||||||
|
+ static_cast<double>(rGLWindow.Height),
|
||||||
|
+ mpContext.get());
|
||||||
|
|
||||||
|
mpContext->swapBuffers();
|
||||||
|
|
||||||
|
diff --git a/vcl/inc/unx/gtk/gtkinst.hxx b/vcl/inc/unx/gtk/gtkinst.hxx
|
||||||
|
index 514b13f..e20ca9d 100644
|
||||||
|
--- a/vcl/inc/unx/gtk/gtkinst.hxx
|
||||||
|
+++ b/vcl/inc/unx/gtk/gtkinst.hxx
|
||||||
|
@@ -239,6 +239,7 @@ public:
|
||||||
|
virtual css::uno::Reference< css::uno::XInterface > CreateClipboard( const css::uno::Sequence< css::uno::Any >& i_rArguments ) override;
|
||||||
|
virtual css::uno::Reference< css::uno::XInterface > CreateDragSource() override;
|
||||||
|
virtual css::uno::Reference< css::uno::XInterface > CreateDropTarget() override;
|
||||||
|
+ virtual OpenGLContext* CreateOpenGLContext() override;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
virtual const cairo_font_options_t* GetCairoFontOptions() override;
|
||||||
|
diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx
|
||||||
|
index 1b2893b..d7d7841 100644
|
||||||
|
--- a/vcl/source/opengl/OpenGLContext.cxx
|
||||||
|
+++ b/vcl/source/opengl/OpenGLContext.cxx
|
||||||
|
@@ -330,6 +330,11 @@ void OpenGLContext::InitGLDebugging()
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
+void OpenGLContext::restoreDefaultFramebuffer()
|
||||||
|
+{
|
||||||
|
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void OpenGLContext::setWinPosAndSize(const Point &rPos, const Size& rSize)
|
||||||
|
{
|
||||||
|
if(m_xWindow)
|
||||||
|
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
|
||||||
|
index 7148882..947bcc9 100644
|
||||||
|
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
|
||||||
|
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
|
||||||
|
@@ -916,4 +916,131 @@ Reference< XInterface > GtkInstance::CreateDragSource()
|
||||||
|
return Reference< XInterface >( static_cast<cppu::OWeakObject *>(new GtkDragSource()) );
|
||||||
|
}
|
||||||
|
|
||||||
|
+class GtkOpenGLContext : public OpenGLContext
|
||||||
|
+{
|
||||||
|
+ GLWindow m_aGLWin;
|
||||||
|
+ GtkWidget *m_pGLArea;
|
||||||
|
+
|
||||||
|
+public:
|
||||||
|
+ GtkOpenGLContext()
|
||||||
|
+ : OpenGLContext()
|
||||||
|
+ , m_pGLArea(nullptr)
|
||||||
|
+ {
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ virtual bool initWindow() override
|
||||||
|
+ {
|
||||||
|
+ if( !m_pChildWindow )
|
||||||
|
+ {
|
||||||
|
+ SystemWindowData winData = generateWinData(mpWindow, mbRequestLegacyContext);
|
||||||
|
+ m_pChildWindow = VclPtr<SystemChildWindow>::Create(mpWindow, 0, &winData, false);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (m_pChildWindow)
|
||||||
|
+ {
|
||||||
|
+ InitChildWindow(m_pChildWindow.get());
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+private:
|
||||||
|
+ virtual const GLWindow& getOpenGLWindow() const override { return m_aGLWin; }
|
||||||
|
+ virtual GLWindow& getModifiableOpenGLWindow() override { return m_aGLWin; }
|
||||||
|
+
|
||||||
|
+ static void signalDestroy(GtkWidget*, gpointer context)
|
||||||
|
+ {
|
||||||
|
+ GtkOpenGLContext* pThis = static_cast<GtkOpenGLContext*>(context);
|
||||||
|
+ pThis->m_pGLArea = nullptr;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ virtual bool ImplInit() override
|
||||||
|
+ {
|
||||||
|
+#if GTK_CHECK_VERSION(3,16,0)
|
||||||
|
+ const SystemEnvData* pEnvData = m_pChildWindow->GetSystemData();
|
||||||
|
+ GtkWidget *pParent = static_cast<GtkWidget*>(pEnvData->pWidget);
|
||||||
|
+ m_pGLArea = gtk_gl_area_new();
|
||||||
|
+ g_signal_connect(G_OBJECT(m_pGLArea), "destroy", G_CALLBACK(signalDestroy), this);
|
||||||
|
+ gtk_gl_area_set_has_depth_buffer(GTK_GL_AREA(m_pGLArea), true);
|
||||||
|
+ gtk_gl_area_set_auto_render(GTK_GL_AREA(m_pGLArea), false);
|
||||||
|
+ gtk_widget_set_hexpand(m_pGLArea, true);
|
||||||
|
+ gtk_widget_set_vexpand(m_pGLArea, true);
|
||||||
|
+ gtk_container_add(GTK_CONTAINER(pParent), m_pGLArea);
|
||||||
|
+ gtk_widget_show_all(pParent);
|
||||||
|
+ gtk_gl_area_make_current(GTK_GL_AREA(m_pGLArea));
|
||||||
|
+ gtk_gl_area_attach_buffers(GTK_GL_AREA(m_pGLArea));
|
||||||
|
+#endif
|
||||||
|
+ bool bRet = InitGL();
|
||||||
|
+ InitGLDebugging();
|
||||||
|
+ return bRet;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ virtual void restoreDefaultFramebuffer() override
|
||||||
|
+ {
|
||||||
|
+ OpenGLContext::restoreDefaultFramebuffer();
|
||||||
|
+#if GTK_CHECK_VERSION(3,16,0)
|
||||||
|
+ gtk_gl_area_attach_buffers(GTK_GL_AREA(m_pGLArea));
|
||||||
|
+#endif
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ virtual void makeCurrent() override
|
||||||
|
+ {
|
||||||
|
+ if (isCurrent())
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ clearCurrent();
|
||||||
|
+
|
||||||
|
+#if GTK_CHECK_VERSION(3,16,0)
|
||||||
|
+ if (m_pGLArea)
|
||||||
|
+ gtk_gl_area_make_current(GTK_GL_AREA(m_pGLArea));
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+ registerAsCurrent();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ virtual void destroyCurrentContext() override
|
||||||
|
+ {
|
||||||
|
+#if GTK_CHECK_VERSION(3,16,0)
|
||||||
|
+ gdk_gl_context_clear_current();
|
||||||
|
+#endif
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ virtual bool isCurrent() override
|
||||||
|
+ {
|
||||||
|
+#if GTK_CHECK_VERSION(3,16,0)
|
||||||
|
+ return m_pGLArea && gdk_gl_context_get_current() == gtk_gl_area_get_context(GTK_GL_AREA(m_pGLArea));
|
||||||
|
+#else
|
||||||
|
+ return false;
|
||||||
|
+#endif
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ virtual void sync() override
|
||||||
|
+ {
|
||||||
|
+#if GTK_CHECK_VERSION(3,16,0)
|
||||||
|
+ gtk_gl_area_queue_render(GTK_GL_AREA(m_pGLArea));
|
||||||
|
+#endif
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ virtual void resetCurrent() override
|
||||||
|
+ {
|
||||||
|
+ clearCurrent();
|
||||||
|
+#if GTK_CHECK_VERSION(3,16,0)
|
||||||
|
+ gdk_gl_context_clear_current();
|
||||||
|
+#endif
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ virtual void swapBuffers() override
|
||||||
|
+ {
|
||||||
|
+#if GTK_CHECK_VERSION(3,16,0)
|
||||||
|
+ gtk_gl_area_queue_render(GTK_GL_AREA(m_pGLArea));
|
||||||
|
+#endif
|
||||||
|
+ BuffersSwapped();
|
||||||
|
+ }
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+OpenGLContext* GtkInstance::CreateOpenGLContext()
|
||||||
|
+{
|
||||||
|
+ return new GtkOpenGLContext;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
@ -0,0 +1,28 @@
|
|||||||
|
From e673349ad31a5ea469ef90e3fb03f7f0af5bb559 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||||
|
Date: Tue, 20 Dec 2016 11:11:32 +0000
|
||||||
|
Subject: [PATCH] lower the system epoxy requirement
|
||||||
|
|
||||||
|
(cherry picked from commit d0c3dba866ba0900dcaf2c3a25200edb516bd608)
|
||||||
|
|
||||||
|
Change-Id: I2fff46985502dafa3b860aaebe862853ebaccabb
|
||||||
|
---
|
||||||
|
configure.ac | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 0f8e58d..c4f64d7 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -11727,7 +11727,7 @@ AC_SUBST(CAIRO_LIBS)
|
||||||
|
dnl ===================================================================
|
||||||
|
dnl Check for system epoxy
|
||||||
|
dnl ===================================================================
|
||||||
|
-libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.3.1], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"])
|
||||||
|
+libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"])
|
||||||
|
|
||||||
|
dnl ===================================================================
|
||||||
|
dnl Test whether to use avahi
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
From 2ed57bc3ba020ebc6aec933445ae0b274685499e Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Tardon <dtardon@redhat.com>
|
|
||||||
Date: Mon, 3 Feb 2014 21:41:00 +0100
|
|
||||||
Subject: [PATCH] installation fix
|
|
||||||
|
|
||||||
---
|
|
||||||
solenv/bin/modules/installer/worker.pm | 1 -
|
|
||||||
1 file changed, 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/solenv/bin/modules/installer/worker.pm b/solenv/bin/modules/installer/worker.pm
|
|
||||||
index aab676f..0e6f67d 100644
|
|
||||||
--- a/solenv/bin/modules/installer/worker.pm
|
|
||||||
+++ b/solenv/bin/modules/installer/worker.pm
|
|
||||||
@@ -96,7 +96,6 @@ sub create_installation_directory
|
|
||||||
|
|
||||||
$installdir = installer::systemactions::create_directories("install", $languageref);
|
|
||||||
installer::logger::print_message( "... creating installation set in $installdir ...\n" );
|
|
||||||
- remove_old_installation_sets($installdir);
|
|
||||||
my $inprogressinstalldir = $installdir . "_inprogress";
|
|
||||||
installer::systemactions::rename_directory($installdir, $inprogressinstalldir);
|
|
||||||
$installdir = $inprogressinstalldir;
|
|
||||||
--
|
|
||||||
1.8.4.2
|
|
||||||
|
|
Loading…
Reference in new issue