[Libreoffice-commits] .: 2 commits - slideshow/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Wed Nov 28 03:15:52 PST 2012
slideshow/source/engine/OGLTrans/unx/OGLTrans_TransitionImpl.cxx | 5
slideshow/source/engine/OGLTrans/unx/OGLTrans_TransitionerImpl.cxx | 67 +++++++---
2 files changed, 53 insertions(+), 19 deletions(-)
New commits:
commit 60f6c7578b2ba9e78d1aa9589b315aec6b489a16
Author: David Tardon <dtardon at redhat.com>
Date: Wed Nov 28 11:58:46 2012 +0100
fix first run of shader-using 3D transitions
The slideshow engine emits viewChanged() immediately after the
transition has been initialized. Because the ShaderTransition data were
not fully reset in finishTransition_, no transition texture would be
generated on the re-initialization in viewChanged(), thus there would be
no transition on the first slide.
Change-Id: I04fef9a6c09537995d83889be2fe15569a1ddc2c
diff --git a/slideshow/source/engine/OGLTrans/unx/OGLTrans_TransitionImpl.cxx b/slideshow/source/engine/OGLTrans/unx/OGLTrans_TransitionImpl.cxx
index 491381c..efdf7be 100644
--- a/slideshow/source/engine/OGLTrans/unx/OGLTrans_TransitionImpl.cxx
+++ b/slideshow/source/engine/OGLTrans/unx/OGLTrans_TransitionImpl.cxx
@@ -1449,6 +1449,11 @@ void ShaderTransition::finishTransition_()
OGLShaders::glDeleteProgram( m_nProgramObject );
m_nProgramObject = 0;
}
+ if ( m_nHelperTexture )
+ {
+ glDeleteTextures( 1, &m_nHelperTexture );
+ m_nHelperTexture = 0;
+ }
#endif
}
commit 5ff406634d41b16db2c238d284d7fd7cae66299e
Author: David Tardon <dtardon at redhat.com>
Date: Wed Nov 28 11:58:18 2012 +0100
fix 3D slide trans. initialization
Change-Id: Iafec5485d0a097f386070370b989d5e77f631d99
diff --git a/slideshow/source/engine/OGLTrans/unx/OGLTrans_TransitionerImpl.cxx b/slideshow/source/engine/OGLTrans/unx/OGLTrans_TransitionerImpl.cxx
index 03e7c4c..2e3ae05 100644
--- a/slideshow/source/engine/OGLTrans/unx/OGLTrans_TransitionerImpl.cxx
+++ b/slideshow/source/engine/OGLTrans/unx/OGLTrans_TransitionerImpl.cxx
@@ -179,9 +179,10 @@ class OGLTransitionerImpl : private cppu::BaseMutex, private boost::noncopyable,
{
public:
OGLTransitionerImpl();
- void setSlides( const Reference< rendering::XBitmap >& xLeavingSlide , const uno::Reference< rendering::XBitmap >& xEnteringSlide );
void setTransition( boost::shared_ptr<OGLTransitionImpl> pOGLTransition );
- bool initialize( const Reference< presentation::XSlideShowView >& xView );
+ bool initialize( const Reference< presentation::XSlideShowView >& xView,
+ const Reference< rendering::XBitmap >& xLeavingSlide,
+ const Reference< rendering::XBitmap >& xEnteringSlide );
// XTransition
virtual void SAL_CALL update( double nTime )
@@ -218,6 +219,9 @@ protected:
private:
static void impl_initializeOnce( bool const bGLXPresent );
+ void setSlides( const Reference< rendering::XBitmap >& xLeavingSlide , const uno::Reference< rendering::XBitmap >& xEnteringSlide );
+ void impl_prepareSlides();
+
void impl_createTexture( bool useMipmap, uno::Sequence<sal_Int8>& data, const OGLFormat* pFormat );
bool initWindowFromSlideShowView( const uno::Reference< presentation::XSlideShowView >& xView );
@@ -225,6 +229,8 @@ private:
*/
void GLInitSlides();
+ void impl_prepareTransition();
+ void impl_finishTransition();
/// Holds the information of our new child window
struct GLWindow
@@ -351,12 +357,15 @@ float OGLTransitionerImpl::cnGLVersion;
bool OGLTransitionerImpl::cbMesa;
bool OGLTransitionerImpl::cbGLXPresent;
-bool OGLTransitionerImpl::initialize( const Reference< presentation::XSlideShowView >& xView )
+bool OGLTransitionerImpl::initialize( const Reference< presentation::XSlideShowView >& xView,
+ const Reference< rendering::XBitmap >& xLeavingSlide,
+ const Reference< rendering::XBitmap >& xEnteringSlide )
{
-
bool const bGLXPresent( initWindowFromSlideShowView( xView ) );
impl_initializeOnce( bGLXPresent );
+ setSlides( xLeavingSlide, xEnteringSlide );
+
return cbGLXPresent;
}
@@ -749,20 +758,25 @@ void OGLTransitionerImpl::setSlides( const uno::Reference< rendering::XBitmap >&
mxLeavingBitmap.set( xLeavingSlide , UNO_QUERY_THROW );
mxEnteringBitmap.set( xEnteringSlide , UNO_QUERY_THROW );
- Reference< XFastPropertySet > xLeavingSet( xLeavingSlide , UNO_QUERY );
- Reference< XFastPropertySet > xEnteringSet( xEnteringSlide , UNO_QUERY );
- geometry::IntegerRectangle2D SlideRect;
SlideSize = mxLeavingBitmap->getSize();
+ SAL_INFO("slideshow.opengl", "leaving bitmap area: " << SlideSize.Width << "x" << SlideSize.Height);
+ SlideSize = mxEnteringBitmap->getSize();
+ SAL_INFO("slideshow.opengl", "entering bitmap area: " << SlideSize.Width << "x" << SlideSize.Height);
+}
+
+
+void OGLTransitionerImpl::impl_prepareSlides()
+{
+ Reference< XFastPropertySet > xLeavingSet( mxLeavingBitmap , UNO_QUERY );
+ Reference< XFastPropertySet > xEnteringSet( mxEnteringBitmap , UNO_QUERY );
+
+ geometry::IntegerRectangle2D SlideRect;
SlideRect.X1 = 0;
SlideRect.X2 = SlideSize.Width;
SlideRect.Y1 = 0;
SlideRect.Y2 = SlideSize.Height;
- SAL_INFO("slideshow.opengl", "leaving bitmap area: " << SlideSize.Width << "x" << SlideSize.Height);
- SlideSize = mxEnteringBitmap->getSize();
- SAL_INFO("slideshow.opengl", "entering bitmap area: " << SlideSize.Width << "x" << SlideSize.Height);
-
#ifdef UNX
unx::glXWaitGL();
XSync(GLWin.dpy, false);
@@ -874,14 +888,29 @@ void OGLTransitionerImpl::setSlides( const uno::Reference< rendering::XBitmap >&
#endif
}
-void OGLTransitionerImpl::setTransition( boost::shared_ptr<OGLTransitionImpl> const pNewTransition )
+void OGLTransitionerImpl::impl_prepareTransition()
{
- mpTransition = pNewTransition;
-
if( mpTransition && mpTransition->getSettings().mnRequiredGLVersion <= cnGLVersion )
mpTransition->prepare( GLleavingSlide, GLenteringSlide );
}
+void OGLTransitionerImpl::impl_finishTransition()
+{
+ if( mpTransition && mpTransition->getSettings().mnRequiredGLVersion <= cnGLVersion )
+ mpTransition->finish();
+}
+
+void OGLTransitionerImpl::setTransition( boost::shared_ptr<OGLTransitionImpl> const pTransition )
+{
+ if ( mpTransition ) // already initialized
+ return;
+
+ mpTransition = pTransition;
+
+ impl_prepareSlides();
+ impl_prepareTransition();
+}
+
void OGLTransitionerImpl::createTexture( unsigned int* texID,
#if defined( GLX_VERSION_1_3 ) && defined( GLX_EXT_texture_from_pixmap )
unx::GLXPixmap pixmap,
@@ -1570,11 +1599,14 @@ void SAL_CALL OGLTransitionerImpl::viewChanged( const Reference< presentation::X
{
SAL_INFO("slideshow.opengl", "transitioner: view changed");
+ impl_finishTransition();
disposeTextures();
disposeContextAndWindow();
initWindowFromSlideShowView( rView );
setSlides( rLeavingBitmap, rEnteringBitmap );
+ impl_prepareSlides();
+ impl_prepareTransition();
}
void OGLTransitionerImpl::disposeContextAndWindow()
@@ -1674,11 +1706,9 @@ void OGLTransitionerImpl::disposing()
#endif
if( pWindow ) {
+ impl_finishTransition();
disposeTextures();
- if (mpTransition)
- mpTransition->finish();
-
#ifdef UNX
if( mbRestoreSync ) {
// try to reestablish synchronize state
@@ -1781,7 +1811,7 @@ public:
return uno::Reference< presentation::XTransition >();
rtl::Reference< OGLTransitionerImpl > xRes( new OGLTransitionerImpl() );
- if ( !xRes->initialize( view ) )
+ if ( !xRes->initialize( view, leavingBitmap, enteringBitmap ) )
return uno::Reference< presentation::XTransition >();
if( OGLTransitionerImpl::cbMesa && (
@@ -1852,7 +1882,6 @@ public:
return uno::Reference< presentation::XTransition >();
xRes->setTransition( pTransition );
- xRes->setSlides(leavingBitmap,enteringBitmap);
return uno::Reference<presentation::XTransition>(xRes.get());
}
More information about the Libreoffice-commits
mailing list