ooo-build r11836 - in trunk: . patches/src680
- From: rodo svn gnome org
- To: svn-commits-list gnome org
- Subject: ooo-build r11836 - in trunk: . patches/src680
- Date: Thu, 6 Mar 2008 21:17:15 +0000 (GMT)
Author: rodo
Date: Thu Mar 6 21:17:14 2008
New Revision: 11836
URL: http://svn.gnome.org/viewvc/ooo-build?rev=11836&view=rev
Log:
2008-03-06 Radek Doulik <rodo novell com>
* patches/src680/transogl-more-transitions.diff,
patches/src680/transogl-transitions-officecfg.diff: added new
transitions
* patches/src680/apply: added transogl-shader-transitions.diff,
contains the changes described below
* build/ooh680-m8/slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.cxx:
implemented Static and Dissolve transitions which use OpenGL
shader language
*
build/ooh680-m8/slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx:
better error handling when creating glX context. check for OpenGL
version and compare with transition requested version. added 2 new
shader based transitions to the factory.
Added:
trunk/patches/src680/transogl-shader-transitions.diff
Modified:
trunk/ChangeLog
trunk/patches/src680/apply
trunk/patches/src680/transogl-more-transitions.diff
trunk/patches/src680/transogl-transitions-officecfg.diff
Modified: trunk/patches/src680/apply
==============================================================================
--- trunk/patches/src680/apply (original)
+++ trunk/patches/src680/apply Thu Mar 6 21:17:14 2008
@@ -1780,6 +1780,7 @@
transogl-transitions-scp2.diff
transogl-more-transitions.diff
transogl-vsync.diff
+transogl-shader-transitions.diff
[ Experimental ]
# sal_uInt32 -> sal_uIntPtr for events on some places
Modified: trunk/patches/src680/transogl-more-transitions.diff
==============================================================================
--- trunk/patches/src680/transogl-more-transitions.diff (original)
+++ trunk/patches/src680/transogl-more-transitions.diff Thu Mar 6 21:17:14 2008
@@ -647,7 +647,7 @@
--- sd/xml-orig/transitions-ogl 2008-02-13 09:19:54.000000000 +0100
+++ sd/xml/transitions-ogl 2008-02-15 12:51:49.000000000 +0100
-@@ -30,4 +30,10 @@
+@@ -30,4 +30,16 @@
<anim:par pres:preset-id="rochade">
<anim:transitionFilter smil:type="miscShapeWipe" smil:subtype="bottomRight"/>
</anim:par>
@@ -657,4 +657,10 @@
+ <anim:par pres:preset-id="venetian3dh">
+ <anim:transitionFilter smil:type="miscShapeWipe" smil:subtype="topCenter"/>
+ </anim:par>
++ <anim:par pres:preset-id="static">
++ <anim:transitionFilter smil:type="miscShapeWipe" smil:subtype="rightCenter"/>
++ </anim:par>
++ <anim:par pres:preset-id="finedissolve">
++ <anim:transitionFilter smil:type="miscShapeWipe" smil:subtype="bottomCenter"/>
++ </anim:par>
</anim:seq>
Added: trunk/patches/src680/transogl-shader-transitions.diff
==============================================================================
--- (empty file)
+++ trunk/patches/src680/transogl-shader-transitions.diff Thu Mar 6 21:17:14 2008
@@ -0,0 +1,613 @@
+diff -rup ../ooh680-m8/slideshow/source/engine/OGLTrans/makefile.mk slideshow/source/engine/OGLTrans/makefile.mk
+--- ../ooh680-m8/slideshow/source/engine/OGLTrans/makefile.mk 2008-03-06 20:57:10.000000000 +0100
++++ slideshow/source/engine/OGLTrans/makefile.mk 2008-03-05 15:07:56.000000000 +0100
+@@ -56,7 +56,7 @@ ENABLE_EXCEPTIONS=TRUE
+ SLOFILES = \
+ $(SLO)$/OGLTrans_TransitionImpl.obj \
+ $(SLO)$/OGLTrans_TransitionerImpl.obj
+-
++
+ DLLPRE=
+ SHL1TARGET=$(TARGET).uno
+
+diff -rup ../ooh680-m8/slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx
+--- ../ooh680-m8/slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx 2008-03-06 20:57:35.000000000 +0100
++++ slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx 2008-03-06 12:57:01.000000000 +0100
+@@ -86,7 +86,7 @@ class OGLTransitionerImpl : private cppu
+ {
+ public:
+ explicit OGLTransitionerImpl(OGLTransitionImpl* pOGLTransition);
+- void initWindowFromSlideShowView( const uno::Reference< presentation::XSlideShowView >& xView, double, double);
++ bool initWindowFromSlideShowView( const uno::Reference< presentation::XSlideShowView >& xView, double, double);
+ void setSlides( const uno::Reference< rendering::XBitmap >& xLeavingSlide , const uno::Reference< rendering::XBitmap >& xEnteringSlide );
+
+ // XTransition
+@@ -154,15 +154,18 @@ private:
+
+ /** whether we are running on ATI fglrx with bug related to textures
+ */
+- bool bBrokenTexturesATI;
++ bool mbBrokenTexturesATI;
++
++ /* GL version */
++ float mnGLVersion;
+ };
+
+-void OGLTransitionerImpl::initWindowFromSlideShowView( const uno::Reference< presentation::XSlideShowView >& xView, double, double)
++bool OGLTransitionerImpl::initWindowFromSlideShowView( const uno::Reference< presentation::XSlideShowView >& xView, double, double)
+ {
+ osl::MutexGuard const guard( m_aMutex );
+
+ if (isDisposed())
+- return;
++ return false;
+
+ /// take the XSlideShowView and extract the parent window from it. see viewmediashape.cxx
+ uno::Reference< rendering::XCanvas > xCanvas(xView->getCanvas(), uno::UNO_QUERY_THROW);
+@@ -281,6 +284,10 @@ void OGLTransitionerImpl::initWindowFrom
+ vi,
+ 0,
+ GL_TRUE);
++ if( glGetError() != GL_NO_ERROR ) {
++ OSL_TRACE("glError: %s\n", (char *)gluErrorString(glGetError()));
++ return false;
++ }
+ glXMakeCurrent( GLWin.dpy, GLWin.win, GLWin.ctx );
+
+ if(GLWin.HasGLXExtension("GLX_SGI_swap_control")) {
+@@ -293,8 +300,19 @@ void OGLTransitionerImpl::initWindowFrom
+ }
+ }
+
++ const GLubyte* version = glGetString( GL_VERSION );
++ if( version && version[0] ) {
++ mnGLVersion = version[0] - '0';
++ if( version[1] == '.' && version[2] )
++ mnGLVersion += (version[2] - '0')/10.0;
++ } else
++ mnGLVersion = 1.0;
++ OSL_TRACE("GL version: %s parsed: %f", version, mnGLVersion );
++
+ /* TODO: check for version once the bug in fglrx driver is fixed */
+- bBrokenTexturesATI = (strcmp( (const char *) glGetString( GL_VENDOR ), "ATI Technologies Inc." ) == 0 );
++ mbBrokenTexturesATI = (strcmp( (const char *) glGetString( GL_VENDOR ), "ATI Technologies Inc." ) == 0 );
++
++
+
+ glEnable(GL_CULL_FACE);
+ glCullFace(GL_BACK);
+@@ -313,8 +331,10 @@ void OGLTransitionerImpl::initWindowFrom
+ if( LeavingBytes.hasElements() && EnteringBytes.hasElements())
+ GLInitSlides();//we already have uninitialized slides, let's initialize
+
+- if (pTransition)
+- pTransition->prepare ();
++ if( pTransition && pTransition->mnRequiredGLVersion <= mnGLVersion )
++ pTransition->prepare( GLleavingSlide, GLenteringSlide );
++
++ return true;
+ }
+
+ void OGLTransitionerImpl::setSlides( const uno::Reference< rendering::XBitmap >& xLeavingSlide,
+@@ -338,7 +358,6 @@ void OGLTransitionerImpl::setSlides( con
+ LeavingBytes = LeavingSlideIntBitmap->getData(SlideBitmapLayout,SlideRect);
+ EnteringBytes = EnteringSlideIntBitmap->getData(SlideBitmapLayout,SlideRect);
+
+-
+ if(GLWin.ctx)//if we have a rendering context, let's init the slides
+ GLInitSlides();
+
+@@ -350,7 +369,7 @@ void OGLTransitionerImpl::GLInitSlides()
+ {
+ osl::MutexGuard const guard( m_aMutex );
+
+- if (isDisposed())
++ if (isDisposed() || pTransition->mnRequiredGLVersion > mnGLVersion)
+ return;
+
+ glMatrixMode(GL_PROJECTION);
+@@ -440,7 +459,7 @@ void OGLTransitionerImpl::GLInitSlides()
+
+ glGenTextures(1, &GLleavingSlide);
+ glBindTexture(GL_TEXTURE_2D, GLleavingSlide);
+- if( pTransition && !bBrokenTexturesATI && !pTransition->mbUseMipMapLeaving) {
++ if( pTransition && !mbBrokenTexturesATI && !pTransition->mbUseMipMapLeaving) {
+ glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, SlideSize.Width, SlideSize.Height, 0, Format, GL_UNSIGNED_BYTE, &LeavingBytes[0]);
+ glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
+@@ -464,7 +483,7 @@ void OGLTransitionerImpl::GLInitSlides()
+
+ glGenTextures(1, &GLenteringSlide);
+ glBindTexture(GL_TEXTURE_2D, GLenteringSlide);
+- if( pTransition && !bBrokenTexturesATI && !pTransition->mbUseMipMapEntering ) {
++ if( pTransition && !mbBrokenTexturesATI && !pTransition->mbUseMipMapEntering ) {
+ glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, SlideSize.Width, SlideSize.Height, 0, Format, GL_UNSIGNED_BYTE, &EnteringBytes[0]);
+ glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
+@@ -489,14 +508,14 @@ void SAL_CALL OGLTransitionerImpl::updat
+ {
+ osl::MutexGuard const guard( m_aMutex );
+
+- if (isDisposed())
++ if (isDisposed() || pTransition->mnRequiredGLVersion > mnGLVersion)
+ return;
+-
++
+ glEnable(GL_DEPTH_TEST);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ if(pTransition)
+- pTransition->display( nTime , GLleavingSlide , GLenteringSlide ,
++ pTransition->display( nTime, GLleavingSlide, GLenteringSlide,
+ SlideSize.Width, SlideSize.Height,
+ static_cast<double>(GLWin.Width),
+ static_cast<double>(GLWin.Height) );
+@@ -567,6 +586,8 @@ public:
+ case animations::TransitionSubType::BOTTOMRIGHT:
+ case animations::TransitionSubType::BOTTOMLEFT:
+ case animations::TransitionSubType::TOPCENTER:
++ case animations::TransitionSubType::RIGHTCENTER:
++ case animations::TransitionSubType::BOTTOMCENTER:
+ return sal_True;
+
+ default:
+@@ -588,6 +609,9 @@ public:
+ const uno::Reference< rendering::XBitmap >& enteringBitmap,
+ const geometry::RealPoint2D& slideOffset ) throw (uno::RuntimeException)
+ {
++ if( !hasTransition( transitionType, transitionSubType ) )
++ return uno::Reference< presentation::XTransition >();
++
+ OGLTransitionImpl* pTransition;
+
+ if( transitionType == animations::TransitionType::MISCSHAPEWIPE ) {
+@@ -630,8 +654,12 @@ public:
+ case animations::TransitionSubType::TOPCENTER:
+ pTransition->makeVenetianBlinds( false, 6 );
+ break;
+- default:
+- return uno::Reference< presentation::XTransition >();
++ case animations::TransitionSubType::RIGHTCENTER:
++ pTransition->makeStatic();
++ break;
++ case animations::TransitionSubType::BOTTOMCENTER:
++ pTransition->makeDissolve();
++ break;
+ }
+ } else if( transitionType == animations::TransitionType::FADE && transitionSubType == animations::TransitionSubType::CROSSFADE ) {
+ pTransition = new OGLTransitionImpl();
+@@ -639,13 +667,12 @@ public:
+ } else if( transitionType == animations::TransitionType::IRISWIPE && transitionSubType == animations::TransitionSubType::DIAMOND ) {
+ pTransition = new OGLTransitionImpl();
+ pTransition->makeDiamond();
+- } else {
+- return uno::Reference< presentation::XTransition >();
+ }
+
+ rtl::Reference<OGLTransitionerImpl> xRes(
+ new OGLTransitionerImpl(pTransition) );
+- xRes->initWindowFromSlideShowView(view,slideOffset.X,slideOffset.Y);
++ if(!xRes->initWindowFromSlideShowView(view,slideOffset.X,slideOffset.Y))
++ return uno::Reference< presentation::XTransition >();
+ xRes->setSlides(leavingBitmap,enteringBitmap);
+
+ return uno::Reference<presentation::XTransition>(xRes.get());
+Only in slideshow/source/engine/OGLTrans: OGLTrans_TransitionerImpl.cxx.orig
+Only in slideshow/source/engine/OGLTrans: OGLTrans_TransitionerImpl.cxx.rej
+diff -rup ../ooh680-m8/slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.cxx slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.cxx
+--- ../ooh680-m8/slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.cxx 2008-03-06 20:57:35.000000000 +0100
++++ slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.cxx 2008-03-06 11:50:51.000000000 +0100
+@@ -32,8 +32,10 @@
+ * MA 02111-1307 USA
+ *
+ ************************************************************************/
++#define GL_GLEXT_PROTOTYPES 1
+ #include "OGLTrans_TransitionImpl.hxx"
+ #include <GL/gl.h>
++#include <GL/glext.h>
+ #include <math.h>
+
+ void OGLTransitionImpl::clear()
+@@ -48,6 +50,29 @@ void OGLTransitionImpl::clear()
+ maSceneObjects.clear();
+
+ mbReflectSlides = false;
++
++ if( mProgramObject ) {
++ glDeleteProgram( mProgramObject );
++ mProgramObject = 0;
++ }
++
++ if( mVertexObject ) {
++ glDeleteShader( mVertexObject );
++ mVertexObject = 0;
++ }
++
++ if( mFragmentObject ) {
++ glDeleteShader( mFragmentObject );
++ mFragmentObject = 0;
++ }
++
++ if( maHelperTexture ) {
++ glDeleteTextures( 1, &maHelperTexture );
++ maHelperTexture = 0;
++ }
++
++ if( mmClearTransition )
++ (this->*mmClearTransition)();
+ }
+
+ OGLTransitionImpl::~OGLTransitionImpl()
+@@ -55,11 +80,14 @@ OGLTransitionImpl::~OGLTransitionImpl()
+ clear();
+ }
+
+-void OGLTransitionImpl::prepare()
++void OGLTransitionImpl::prepare( ::sal_Int32 glLeavingSlideTex, ::sal_Int32 glEnteringSlideTex )
+ {
+ for(unsigned int i(0); i < maSceneObjects.size(); ++i) {
+ maSceneObjects[i]->prepare();
+ }
++
++ if( mmPrepareTransition )
++ (this->*mmPrepareTransition)( glLeavingSlideTex, glEnteringSlideTex );
+ }
+
+ void OGLTransitionImpl::finish()
+@@ -986,3 +1014,265 @@ void OGLTransitionImpl::makeFadeSmoothly
+ mmDisplaySlides = &OGLTransitionImpl::displaySlidesFadeSmoothly;
+ mbUseMipMapLeaving = mbUseMipMapEntering = false;
+ }
++
++static GLuint linkProgram( const char *vertexShader, const char *fragmentShader )
++{
++ GLhandleARB vertexObject, fragmentObject, programObject;
++ GLint vertexCompiled, fragmentCompiled, programLinked;
++ char log[1024];
++
++ vertexObject = glCreateShaderObjectARB( GL_VERTEX_SHADER_ARB );
++ fragmentObject = glCreateShader( GL_FRAGMENT_SHADER );
++ OSL_TRACE("checkpoint 1: shaders created (%d) vertex: %d fragment: %d", glGetError() == GL_NO_ERROR, vertexObject, fragmentObject );
++
++
++ glShaderSourceARB( vertexObject, 1, &vertexShader, NULL );
++ glShaderSourceARB( fragmentObject, 1, &fragmentShader, NULL );
++
++ glCompileShader( vertexObject );
++ glGetInfoLogARB( vertexObject, sizeof( log ), NULL, log );
++ OSL_TRACE("vertex compile log: %s", log);
++ glGetShaderiv( vertexObject, GL_COMPILE_STATUS, &vertexCompiled );
++ glCompileShader( fragmentObject );
++ glGetInfoLogARB( fragmentObject, sizeof( log ), NULL, log );
++ OSL_TRACE("fragment compile log: %s", log);
++ glGetShaderiv( fragmentObject, GL_COMPILE_STATUS, &fragmentCompiled );
++
++ if( !vertexCompiled || !fragmentCompiled )
++ return 0;
++
++ OSL_TRACE("checkpoint 2: shaders compiled (%d)", glGetError() == GL_NO_ERROR);
++
++ programObject = glCreateProgram();
++ glAttachShader( programObject, vertexObject );
++ glAttachShader( programObject, fragmentObject );
++
++ glLinkProgram( programObject );
++ glGetInfoLogARB( programObject, sizeof( log ), NULL, log );
++ OSL_TRACE("program link log: %s", log);
++ glGetProgramiv( programObject, GL_LINK_STATUS, &programLinked );
++
++ if( !programLinked )
++ return 0;
++
++ OSL_TRACE("checkpoint 3: program linked (%d)", glGetError() == GL_NO_ERROR);
++
++ return programObject;
++}
++
++static const char* basicVertexShader = "\n\
++varying vec2 v_texturePosition;\n\
++\n\
++void main( void )\n\
++{\n\
++ gl_Position = ftransform();\n\
++ v_texturePosition = gl_MultiTexCoord0.xy;\n\
++}\n\
++";
++
++static const char* staticFragmentShader = "\n\
++uniform sampler2D leavingSlideTexture;\n\
++uniform sampler2D enteringSlideTexture;\n\
++uniform sampler2D permTexture;\n\
++uniform float time;\n\
++varying vec2 v_texturePosition;\n\
++\n\
++float snoise(vec2 P) {\n\
++\n\
++ return texture2D(permTexture, P).r;\n\
++}\n\
++\n\
++\n\
++#define PART 0.5\n\
++#define START 0.4\n\
++#define END 0.9\n\
++\n\
++void main() {\n\
++ float sn = snoise(10.0*v_texturePosition+time*0.07);\n\
++ if( time < PART ) {\n\
++ float sn1 = snoise(vec2(time*15.0, 20.0*v_texturePosition.y));\n\
++ float sn2 = snoise(v_texturePosition);\n\
++ if (sn1 > 1.0 - time*time && sn2 < 2.0*time+0.1)\n\
++ gl_FragColor = vec4(sn, sn, sn, 1.0);\n\
++ else if (time > START )\n\
++ gl_FragColor = ((time-START)/(PART - START))*vec4(sn, sn, sn, 1.0) + (1.0 - (time - START)/(PART - START))*texture2D(leavingSlideTexture, v_texturePosition);\n\
++ else\n\
++ gl_FragColor = texture2D(leavingSlideTexture, v_texturePosition);\n\
++ } else if ( time < PART ) {\n\
++ gl_FragColor = texture2D(leavingSlideTexture, v_texturePosition);\n\
++ } else if ( time > END ) {\n\
++ gl_FragColor = ((1.0 - time)/(1.0 - END))*vec4(sn, sn, sn, 1.0) + ((time - END)/(1.0 - END))*texture2D(enteringSlideTexture, v_texturePosition);\n\
++ } else \n\
++ gl_FragColor = vec4(sn, sn, sn, 1.0);\n\
++}\n\
++";
++
++static const char* dissolveFragmentShader = "\n\
++uniform sampler2D leavingSlideTexture;\n\
++uniform sampler2D enteringSlideTexture;\n\
++uniform sampler2D permTexture;\n\
++uniform float time;\n\
++varying vec2 v_texturePosition;\n\
++\n\
++float snoise(vec2 P) {\n\
++\n\
++ return texture2D(permTexture, P).r;\n\
++}\n\
++\n\
++void main() {\n\
++ float sn = snoise(10.0*v_texturePosition);\n\
++ if( sn < time)\n\
++ gl_FragColor = texture2D(enteringSlideTexture, v_texturePosition);\n\
++ else\n\
++ gl_FragColor = texture2D(leavingSlideTexture, v_texturePosition);\n\
++}\n\
++";
++
++int permutation256 [256]= {
++215, 100, 200, 204, 233, 50, 85, 196,
++ 71, 141, 122, 160, 93, 131, 243, 234,
++162, 183, 36, 155, 4, 62, 35, 205,
++ 40, 102, 33, 27, 255, 55, 214, 156,
++ 75, 163, 134, 126, 249, 74, 197, 228,
++ 72, 90, 206, 235, 17, 22, 49, 169,
++227, 89, 16, 5, 117, 60, 248, 230,
++217, 68, 138, 96, 194, 170, 136, 10,
++112, 238, 184, 189, 176, 42, 225, 212,
++ 84, 58, 175, 244, 150, 168, 219, 236,
++101, 208, 123, 37, 164, 110, 158, 201,
++ 78, 114, 57, 48, 70, 142, 106, 43,
++232, 26, 32, 252, 239, 98, 191, 94,
++ 59, 149, 39, 187, 203, 190, 19, 13,
++133, 45, 61, 247, 23, 34, 20, 52,
++118, 209, 146, 193, 222, 18, 1, 152,
++ 46, 41, 91, 148, 115, 25, 135, 77,
++254, 147, 224, 161, 9, 213, 223, 250,
++231, 251, 127, 166, 63, 179, 81, 130,
++139, 28, 120, 151, 241, 86, 111, 0,
++ 88, 153, 172, 182, 159, 105, 178, 47,
++ 51, 167, 65, 66, 92, 73, 198, 211,
++245, 195, 31, 220, 140, 76, 221, 186,
++154, 185, 56, 83, 38, 165, 109, 67,
++124, 226, 132, 53, 229, 29, 12, 181,
++121, 24, 207, 199, 177, 113, 30, 80,
++ 3, 97, 188, 79, 216, 173, 8, 145,
++ 87, 128, 180, 237, 240, 137, 125, 104,
++ 15, 242, 119, 246, 103, 143, 95, 144,
++ 2, 44, 69, 157, 192, 174, 14, 54,
++218, 82, 64, 210, 11, 6, 129, 21,
++116, 171, 99, 202, 7, 107, 253, 108
++};
++
++void initPermTexture(GLuint *texID)
++{
++ glGenTextures(1, texID);
++ glBindTexture(GL_TEXTURE_2D, *texID);
++
++ static bool initialized = false;
++ static unsigned char permutation2D[256*256*4];
++ if( !initialized ) {
++ int x, y;
++
++ for( y=0; y < 256; y++ )
++ for( x=0; x < 256; x++ )
++ permutation2D[x*4 + y*1024] = permutation256[(y + permutation256[x]) & 0xff];
++
++ initialized = true;
++ }
++
++ glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, permutation2D );
++ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
++ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
++}
++
++void OGLTransitionImpl::preparePermShader()
++{
++ if( mProgramObject ) {
++ glUseProgram( mProgramObject );
++
++ GLint location = glGetUniformLocation( mProgramObject, "leavingSlideTexture" );
++ if( location != -1 ) {
++ glUniform1i( location, 0 ); // texture unit 0
++ }
++
++ glActiveTexture(GL_TEXTURE1);
++ if( !maHelperTexture )
++ initPermTexture( &maHelperTexture );
++ glActiveTexture(GL_TEXTURE0);
++
++ location = glGetUniformLocation( mProgramObject, "permTexture" );
++ if( location != -1 ) {
++ glUniform1i( location, 1 ); // texture unit 1
++ }
++
++ location = glGetUniformLocation( mProgramObject, "enteringSlideTexture" );
++ if( location != -1 ) {
++ glUniform1i( location, 2 ); // texture unit 2
++ }
++ }
++}
++
++void OGLTransitionImpl::prepareStatic( ::sal_Int32 /* glLeavingSlideTex */, ::sal_Int32 /* glEnteringSlideTex */ )
++{
++ mProgramObject = linkProgram( basicVertexShader, staticFragmentShader );
++
++ preparePermShader();
++}
++
++void OGLTransitionImpl::displaySlidesShaders( double nTime, ::sal_Int32 glLeavingSlideTex, ::sal_Int32 glEnteringSlideTex,
++ double SlideWidthScale, double SlideHeightScale )
++{
++ applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale );
++
++ if( mProgramObject ) {
++ GLint location = glGetUniformLocation( mProgramObject, "time" );
++ if( location != -1 ) {
++ glUniform1f( location, nTime );
++ }
++ }
++
++ glActiveTexture( GL_TEXTURE2 );
++ glBindTexture( GL_TEXTURE_2D, glEnteringSlideTex );
++ glActiveTexture( GL_TEXTURE0 );
++
++ displaySlide( nTime, glLeavingSlideTex, maLeavingSlidePrimitives, SlideWidthScale, SlideHeightScale );
++}
++
++void OGLTransitionImpl::makeStatic()
++{
++ Primitive Slide;
++
++ Slide.pushTriangle (basegfx::B2DVector (0,0), basegfx::B2DVector (1,0), basegfx::B2DVector (0,1));
++ Slide.pushTriangle (basegfx::B2DVector (1,0), basegfx::B2DVector (0,1), basegfx::B2DVector (1,1));
++ maLeavingSlidePrimitives.push_back (Slide);
++ maEnteringSlidePrimitives.push_back (Slide);
++
++ mmDisplaySlides = &OGLTransitionImpl::displaySlidesShaders;
++ mmPrepareTransition = &OGLTransitionImpl::prepareStatic;
++ mbUseMipMapLeaving = mbUseMipMapEntering = false;
++
++ mnRequiredGLVersion = 2.0;
++}
++
++void OGLTransitionImpl::prepareDissolve( ::sal_Int32 /* glLeavingSlideTex */, ::sal_Int32 /* glEnteringSlideTex */ )
++{
++ mProgramObject = linkProgram( basicVertexShader, dissolveFragmentShader );
++
++ preparePermShader();
++}
++
++void OGLTransitionImpl::makeDissolve()
++{
++ Primitive Slide;
++
++ Slide.pushTriangle (basegfx::B2DVector (0,0), basegfx::B2DVector (1,0), basegfx::B2DVector (0,1));
++ Slide.pushTriangle (basegfx::B2DVector (1,0), basegfx::B2DVector (0,1), basegfx::B2DVector (1,1));
++ maLeavingSlidePrimitives.push_back (Slide);
++ maEnteringSlidePrimitives.push_back (Slide);
++
++ mmDisplaySlides = &OGLTransitionImpl::displaySlidesShaders;
++ mmPrepareTransition = &OGLTransitionImpl::prepareDissolve;
++ mbUseMipMapLeaving = mbUseMipMapEntering = false;
++
++ mnRequiredGLVersion = 2.0;
++}
+diff -rup ../ooh680-m8/slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.hxx slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.hxx
+--- ../ooh680-m8/slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.hxx 2008-03-06 20:57:35.000000000 +0100
++++ slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.hxx 2008-03-06 11:50:24.000000000 +0100
+@@ -55,18 +55,25 @@ public:
+ OGLTransitionImpl() :
+ mbUseMipMapLeaving( true ),
+ mbUseMipMapEntering( true ),
++ mnRequiredGLVersion( 1.0 ),
+ maLeavingSlidePrimitives(),
+ maEnteringSlidePrimitives(),
+ maSceneObjects(),
+ mbReflectSlides( false ),
++ mVertexObject( 0 ),
++ mFragmentObject( 0 ),
++ mProgramObject( 0 ),
++ maHelperTexture( 0 ),
+ mmPrepare( NULL ),
++ mmPrepareTransition( NULL ),
++ mmClearTransition( NULL ),
+ mmDisplaySlides( NULL )
+ {}
+
+ ~OGLTransitionImpl();
+
+- void prepare();
+- void display( double nTime, ::sal_Int32 glLeavingSlideTex, ::sal_Int32 glEnteringSlideTex, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight);
++ void prepare( ::sal_Int32 glLeavingSlideTex, ::sal_Int32 glEnteringSlideTex );
++ void display( double nTime, ::sal_Int32 glLeavingSlideTex, ::sal_Int32 glEnteringSlideTex, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight );
+ void finish();
+
+ void makeOutsideCubeFaceToLeft();
+@@ -80,6 +87,8 @@ public:
+ void makeIris();
+ void makeRochade();
+ void makeVenetianBlinds( bool vertical, int parts );
++ void makeStatic();
++ void makeDissolve();
+
+ /** 2D replacements
+ */
+@@ -91,6 +100,10 @@ public:
+ bool mbUseMipMapLeaving;
+ bool mbUseMipMapEntering;
+
++ /** which GL version does the transition require
++ */
++ float mnRequiredGLVersion;
++
+ private:
+ /** clears all the primitives and operations
+ */
+@@ -117,11 +130,28 @@ private:
+ */
+ bool mbReflectSlides;
+
++ /** GLSL objects, shaders and program
++ */
++ GLuint mVertexObject, mFragmentObject, mProgramObject;
++
++ /* various data */
++ GLuint maHelperTexture;
++
+ /** When this method is not NULL, it is called in display method to prepare the slides, scene, etc.
+ ** We might later replace this by cleaner derived class.
+ */
+ void (OGLTransitionImpl::*mmPrepare)( double nTime, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight );
+
++ /** When this method is not NULL, it is called after glx context is ready to let the transition prepare GL related things, like GLSL program.
++ ** We might later replace this by cleaner derived class.
++ */
++ void (OGLTransitionImpl::*mmPrepareTransition)( ::sal_Int32 glLeavingSlideTex, ::sal_Int32 glEnteringSlideTex );
++
++ /** When this method is not NULL, it is called when the transition needs to clear after itself, like delete own textures etc.
++ ** We might later replace this by cleaner derived class.
++ */
++ void (OGLTransitionImpl::*mmClearTransition)();
++
+ /** When this method is not NULL, it is called in display method to display the slides.
+ ** We might later replace this by cleaner derived class.
+ */
+@@ -136,6 +166,10 @@ private:
+ */
+ void prepareDiamond( double nTime, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight );
+ void displaySlidesFadeSmoothly( double nTime, ::sal_Int32 glLeavingSlideTex, ::sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale );
++ void displaySlidesShaders( double nTime, ::sal_Int32 glLeavingSlideTex, ::sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale );
++ void prepareStatic( ::sal_Int32 glLeavingSlideTex, ::sal_Int32 glEnteringSlideTex );
++ void prepareDissolve( ::sal_Int32 glLeavingSlideTex, ::sal_Int32 glEnteringSlideTex );
++ void preparePermShader();
+ };
+
+ class SceneObject
Modified: trunk/patches/src680/transogl-transitions-officecfg.diff
==============================================================================
--- trunk/patches/src680/transogl-transitions-officecfg.diff (original)
+++ trunk/patches/src680/transogl-transitions-officecfg.diff Thu Mar 6 21:17:14 2008
@@ -1,7 +1,7 @@
officecfg/registry/data/org/openoffice/Office/UI/Effects.xcu
--- officecfg/registry/data/org/openoffice/Office/UI/Effects.xcu 2007-12-05 15:02:57.000000000 +0100
+++ officecfg/registry/data/org/openoffice/Office/UI/Effects.xcu 2007-12-05 16:29:43.000000000 +0100
-@@ -1912,6 +1912,66 @@
+@@ -1912,6 +1912,76 @@
</prop>
</node>
@@ -65,6 +65,16 @@
+ <value xml:lang="en-US">Venetian Blinds 3D Horizontal</value>
+ </prop>
+ </node>
++ <node oor:name="static" oor:op="replace">
++ <prop oor:name="Label" oor:type="xs:string">
++ <value xml:lang="en-US">Static</value>
++ </prop>
++ </node>
++ <node oor:name="finedissolve" oor:op="replace">
++ <prop oor:name="Label" oor:type="xs:string">
++ <value xml:lang="en-US">Fine Dissolve</value>
++ </prop>
++ </node>
</node>
</node>
<node oor:name="Presets">
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]