ooo-build r11882 - in trunk: . patches/src680



Author: rodo
Date: Wed Mar 12 13:30:44 2008
New Revision: 11882
URL: http://svn.gnome.org/viewvc/ooo-build?rev=11882&view=rev

Log:
2008-03-12  Radek Doulik  <rodo novell com>

	* patches/src680/apply: added transogl-shader-transitions-1.diff
	with changes described below

	* build/ooh680-m10/slideshow/source/engine/OGLTrans/OGLTrans_Shaders.[ch]xx:
	new Shaders class, contains shader functions, queried from OpenGL
	at runtime, few helper methods
	
	* build/ooh680-m10/slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx:
	declare static OGLTransitionerImpl variables to fix build problems
	with older gcc



Added:
   trunk/patches/src680/transogl-shader-transitions-1.diff
Modified:
   trunk/ChangeLog
   trunk/patches/src680/apply

Modified: trunk/patches/src680/apply
==============================================================================
--- trunk/patches/src680/apply	(original)
+++ trunk/patches/src680/apply	Wed Mar 12 13:30:44 2008
@@ -1806,6 +1806,7 @@
 transogl-vsync.diff
 transogl-shader-transitions.diff
 transogl-mesa-fallback.diff
+transogl-shader-transitions-1.diff
 
 [ Experimental ]
 # sal_uInt32 -> sal_uIntPtr for events on some places

Added: trunk/patches/src680/transogl-shader-transitions-1.diff
==============================================================================
--- (empty file)
+++ trunk/patches/src680/transogl-shader-transitions-1.diff	Wed Mar 12 13:30:44 2008
@@ -0,0 +1,340 @@
+diff -Nrup /net/rychlik/home/rodo/svn/ooo-build-1/build/ooh680-m9/slideshow/source/engine/OGLTrans/makefile.mk slideshow/source/engine/OGLTrans/makefile.mk
+--- /net/rychlik/home/rodo/svn/ooo-build-1/build/ooh680-m9/slideshow/source/engine/OGLTrans/makefile.mk	2008-03-11 20:20:51.000000000 +0100
++++ slideshow/source/engine/OGLTrans/makefile.mk	2008-03-12 13:42:32.000000000 +0100
+@@ -55,6 +55,7 @@ ENABLE_EXCEPTIONS=TRUE
+ 
+ SLOFILES = \
+         $(SLO)$/OGLTrans_TransitionImpl.obj \
++        $(SLO)$/OGLTrans_Shaders.obj \
+         $(SLO)$/OGLTrans_TransitionerImpl.obj
+ 
+ DLLPRE=
+diff -Nrup /net/rychlik/home/rodo/svn/ooo-build-1/build/ooh680-m9/slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx
+--- /net/rychlik/home/rodo/svn/ooo-build-1/build/ooh680-m9/slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx	2008-03-11 20:22:53.000000000 +0100
++++ slideshow/source/engine/OGLTrans/OGLTrans_TransitionerImpl.cxx	2008-03-12 12:43:56.000000000 +0100
+@@ -167,6 +167,11 @@ public:
+     static bool cbMesa;
+ };
+ 
++// declare the static variables as some gcc versions have problems declaring them automaticaly
++bool OGLTransitionerImpl::cbBrokenTexturesATI;
++float OGLTransitionerImpl::cnGLVersion;
++bool OGLTransitionerImpl::cbMesa;
++
+ void OGLTransitionerImpl::initialize( const uno::Reference< presentation::XSlideShowView >& xView )
+ {
+     // not thread safe
+diff -Nrup /net/rychlik/home/rodo/svn/ooo-build-1/build/ooh680-m9/slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.cxx slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.cxx
+--- /net/rychlik/home/rodo/svn/ooo-build-1/build/ooh680-m9/slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.cxx	2008-03-11 20:20:51.000000000 +0100
++++ slideshow/source/engine/OGLTrans/OGLTrans_TransitionImpl.cxx	2008-03-12 13:42:15.000000000 +0100
+@@ -32,10 +32,10 @@
+  *    MA  02111-1307  USA
+  *
+  ************************************************************************/
+-#define GL_GLEXT_PROTOTYPES 1
++
+ #include "OGLTrans_TransitionImpl.hxx"
++#include "OGLTrans_Shaders.hxx"
+ #include <GL/gl.h>
+-#include <GL/glext.h>
+ #include <math.h>
+ 
+ void OGLTransitionImpl::clear()
+@@ -53,17 +53,17 @@ void OGLTransitionImpl::clear()
+ 
+ #ifdef GL_VERSION_2_0
+     if( mProgramObject ) {
+-        glDeleteProgram( mProgramObject );
++        OGLShaders::glDeleteProgram( mProgramObject );
+         mProgramObject = 0;
+     }
+ 
+     if( mVertexObject ) {
+-        glDeleteShader( mVertexObject );
++        OGLShaders::glDeleteShader( mVertexObject );
+         mVertexObject = 0;
+     }
+ 
+     if( mFragmentObject ) {
+-        glDeleteShader( mFragmentObject );
++        OGLShaders::glDeleteShader( mFragmentObject );
+         mFragmentObject = 0;
+     }
+ #endif
+@@ -1017,55 +1017,6 @@ void OGLTransitionImpl::makeFadeSmoothly
+     mbUseMipMapLeaving = mbUseMipMapEntering = false;
+ }
+ 
+-static GLuint linkProgram( const char *vertexShader, const char *fragmentShader )
+-{
+-#ifdef GL_VERSION_2_0
+-    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;
+-#else
+-    return 0;
+-#endif
+-}
+-
+ static const char* basicVertexShader = "\n\
+ varying vec2 v_texturePosition;\n\
+ \n\
+@@ -1195,11 +1146,11 @@ void OGLTransitionImpl::preparePermShade
+ {
+ #ifdef GL_VERSION_2_0
+     if( mProgramObject ) {
+-        glUseProgram( mProgramObject );
++        OGLShaders::glUseProgram( mProgramObject );
+ 
+-        GLint location = glGetUniformLocation( mProgramObject, "leavingSlideTexture" );
++        GLint location = OGLShaders::glGetUniformLocation( mProgramObject, "leavingSlideTexture" );
+         if( location != -1 ) {
+-            glUniform1i( location, 0 );  // texture unit 0
++            OGLShaders::glUniform1i( location, 0 );  // texture unit 0
+         }
+ 
+         glActiveTexture(GL_TEXTURE1);
+@@ -1207,14 +1158,14 @@ void OGLTransitionImpl::preparePermShade
+             initPermTexture( &maHelperTexture );
+         glActiveTexture(GL_TEXTURE0);
+ 
+-        location = glGetUniformLocation( mProgramObject, "permTexture" );
++        location = OGLShaders::glGetUniformLocation( mProgramObject, "permTexture" );
+         if( location != -1 ) {
+-            glUniform1i( location, 1 );  // texture unit 1
++            OGLShaders::glUniform1i( location, 1 );  // texture unit 1
+         }
+ 
+-        location = glGetUniformLocation( mProgramObject, "enteringSlideTexture" );
++        location = OGLShaders::glGetUniformLocation( mProgramObject, "enteringSlideTexture" );
+         if( location != -1 ) {
+-            glUniform1i( location, 2 );  // texture unit 2
++            OGLShaders::glUniform1i( location, 2 );  // texture unit 2
+         }
+     }
+ #endif
+@@ -1222,7 +1173,7 @@ void OGLTransitionImpl::preparePermShade
+ 
+ void OGLTransitionImpl::prepareStatic( ::sal_Int32 /* glLeavingSlideTex */, ::sal_Int32 /* glEnteringSlideTex */ )
+ {
+-    mProgramObject = linkProgram( basicVertexShader, staticFragmentShader );
++    mProgramObject = OGLShaders::LinkProgram( basicVertexShader, staticFragmentShader );
+ 
+     preparePermShader();
+ }
+@@ -1234,9 +1185,9 @@ void OGLTransitionImpl::displaySlidesSha
+ 
+ #ifdef GL_VERSION_2_0
+     if( mProgramObject ) {
+-        GLint location = glGetUniformLocation( mProgramObject, "time" );
++        GLint location = OGLShaders::glGetUniformLocation( mProgramObject, "time" );
+         if( location != -1 ) {
+-            glUniform1f( location, nTime );
++            OGLShaders::glUniform1f( location, nTime );
+         }
+     }
+ #endif
+@@ -1266,7 +1217,7 @@ void OGLTransitionImpl::makeStatic()
+ 
+ void OGLTransitionImpl::prepareDissolve( ::sal_Int32 /* glLeavingSlideTex */, ::sal_Int32 /* glEnteringSlideTex */ )
+ {
+-    mProgramObject = linkProgram( basicVertexShader, dissolveFragmentShader );
++    mProgramObject = OGLShaders::LinkProgram( basicVertexShader, dissolveFragmentShader );
+ 
+     preparePermShader();
+ }
+diff -Nrup /net/rychlik/home/rodo/svn/ooo-build-1/build/ooh680-m9/slideshow/source/engine/OGLTrans/OGLTrans_TransitionShaders.cxx slideshow/source/engine/OGLTrans/OGLTrans_TransitionShaders.cxx
+--- /net/rychlik/home/rodo/svn/ooo-build-1/build/ooh680-m9/slideshow/source/engine/OGLTrans/OGLTrans_TransitionShaders.cxx	1970-01-01 01:00:00.000000000 +0100
++++ slideshow/source/engine/OGLTrans/OGLTrans_Shaders.cxx	2008-03-12 13:46:05.000000000 +0100
+@@ -0,0 +1,109 @@
++#include <osl/diagnose.hxx>
++
++#include "OGLTrans_Shaders.hxx"
++
++namespace unx
++{
++#include <GL/glx.h>
++#include <GL/glxext.h>
++}
++
++namespace OGLShaders {
++
++bool cbInitialized = false;
++
++PFNGLCREATESHADERPROC glCreateShader = NULL;
++PFNGLSHADERSOURCEPROC glShaderSource = NULL;
++PFNGLCOMPILESHADERPROC glCompileShader = NULL;
++PFNGLGETSHADERIVPROC glGetShaderiv = NULL;
++PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog = NULL;
++PFNGLDELETESHADERPROC glDeleteShader = NULL;
++PFNGLCREATEPROGRAMPROC glCreateProgram = NULL;
++PFNGLATTACHSHADERPROC glAttachShader = NULL;
++PFNGLLINKPROGRAMPROC glLinkProgram = NULL;
++PFNGLGETPROGRAMIVPROC glGetProgramiv = NULL;
++PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog = NULL;
++PFNGLUSEPROGRAMPROC glUseProgram = NULL;
++PFNGLDELETEPROGRAMPROC glDeleteProgram = NULL;
++PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation = NULL;
++PFNGLUNIFORM1IPROC glUniform1i = NULL;
++PFNGLUNIFORM1FPROC glUniform1f = NULL;
++
++bool Initialize()
++{
++    if( !cbInitialized ) {
++        glCreateShader = (PFNGLCREATESHADERPROC) unx::glXGetProcAddress( (unsigned char *) "glCreateShader" );
++        glShaderSource = (PFNGLSHADERSOURCEPROC) unx::glXGetProcAddress( (unsigned char *) "glShaderSource" );
++        glCompileShader = (PFNGLCOMPILESHADERPROC) unx::glXGetProcAddress( (unsigned char *) "glCompileShader" );
++        glGetShaderiv = (PFNGLGETSHADERIVPROC) unx::glXGetProcAddress( (unsigned char *) "glGetShaderiv" );
++        glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC) unx::glXGetProcAddress( (unsigned char *) "glGetShaderInfoLog" );
++        glDeleteShader = (PFNGLDELETESHADERPROC) unx::glXGetProcAddress( (unsigned char *) "glDeleteShader" );
++        glCreateProgram = (PFNGLCREATEPROGRAMPROC) unx::glXGetProcAddress( (unsigned char *) "glCreateProgram" );
++        glAttachShader = (PFNGLATTACHSHADERPROC) unx::glXGetProcAddress( (unsigned char *) "glAttachShader" );
++        glLinkProgram = (PFNGLLINKPROGRAMPROC) unx::glXGetProcAddress( (unsigned char *) "glLinkProgram" );
++        glGetProgramiv = (PFNGLGETPROGRAMIVPROC) unx::glXGetProcAddress( (unsigned char *) "glGetProgramiv" );
++        glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC) unx::glXGetProcAddress( (unsigned char *) "glGetProgramInfoLog" );
++        glUseProgram = (PFNGLUSEPROGRAMPROC) unx::glXGetProcAddress( (unsigned char *) "glUseProgram" );
++        glDeleteProgram = (PFNGLDELETEPROGRAMPROC) unx::glXGetProcAddress( (unsigned char *) "glDeleteProgram" );
++        glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC) unx::glXGetProcAddress( (unsigned char *) "glGetUniformLocation" );
++        glUniform1i = (PFNGLUNIFORM1IPROC) unx::glXGetProcAddress( (unsigned char *) "glUniform1i" );
++        glUniform1f = (PFNGLUNIFORM1FPROC) unx::glXGetProcAddress( (unsigned char *) "glUniform1f" );
++
++        cbInitialized = true;
++    }
++
++    return glCreateShader != NULL;
++}
++
++GLuint LinkProgram( const char *vertexShader, const char *fragmentShader )
++{
++#ifdef GL_VERSION_2_0
++    if( !Initialize() )
++        return 0;
++
++    GLhandleARB vertexObject, fragmentObject, programObject;
++    GLint vertexCompiled, fragmentCompiled, programLinked;
++    char log[1024];
++
++    vertexObject = glCreateShader( GL_VERTEX_SHADER );
++    fragmentObject = glCreateShader( GL_FRAGMENT_SHADER );
++    OSL_TRACE("checkpoint 1: shaders created (%d) vertex: %d fragment: %d", glGetError() == GL_NO_ERROR, vertexObject, fragmentObject );
++
++
++    glShaderSource( vertexObject, 1, &vertexShader, NULL );
++    glShaderSource( fragmentObject, 1, &fragmentShader, NULL );
++
++    glCompileShader( vertexObject );
++    glGetShaderInfoLog( vertexObject, sizeof( log ), NULL, log );
++    OSL_TRACE("vertex compile log: %s", log);
++    glGetShaderiv( vertexObject, GL_COMPILE_STATUS, &vertexCompiled );
++    glCompileShader( fragmentObject );
++    glGetShaderInfoLog( 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 );
++    glGetProgramInfoLog( 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;
++#else
++    return 0;
++#endif
++}
++}
+diff -Nrup /net/rychlik/home/rodo/svn/ooo-build-1/build/ooh680-m9/slideshow/source/engine/OGLTrans/OGLTrans_TransitionShaders.hxx slideshow/source/engine/OGLTrans/OGLTrans_TransitionShaders.hxx
+--- /net/rychlik/home/rodo/svn/ooo-build-1/build/ooh680-m9/slideshow/source/engine/OGLTrans/OGLTrans_TransitionShaders.hxx	1970-01-01 01:00:00.000000000 +0100
++++ slideshow/source/engine/OGLTrans/OGLTrans_Shaders.hxx	2008-03-12 13:46:17.000000000 +0100
+@@ -0,0 +1,40 @@
++#ifndef INCLUDED_OGLTRANS_SHADERS_HXX_
++#define INCLUDED_OGLTRANS_SHADERS_HXX_
++
++#include <GL/gl.h>
++#include <GL/glext.h>
++
++class OGLShaders {
++    static bool Initialize();
++    static bool cbInitialized;
++
++public:    
++
++    static GLuint LinkProgram( const char *vertexShader, const char *fragmentShader );
++
++    /** GL shader functions
++     */
++#ifdef GL_VERSION_2_0
++
++    static PFNGLCREATESHADERPROC glCreateShader;
++    static PFNGLSHADERSOURCEPROC glShaderSource;
++    static PFNGLCOMPILESHADERPROC glCompileShader;
++    static PFNGLGETSHADERIVPROC glGetShaderiv;
++    static PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
++    static PFNGLDELETESHADERPROC glDeleteShader;
++
++    static PFNGLCREATEPROGRAMPROC glCreateProgram;
++    static PFNGLATTACHSHADERPROC glAttachShader;
++    static PFNGLLINKPROGRAMPROC glLinkProgram;
++    static PFNGLGETPROGRAMIVPROC glGetProgramiv;
++    static PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
++    static PFNGLUSEPROGRAMPROC glUseProgram;
++    static PFNGLDELETEPROGRAMPROC glDeleteProgram;
++
++    static PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
++    static PFNGLUNIFORM1IPROC glUniform1i;
++    static PFNGLUNIFORM1FPROC glUniform1f;
++#endif
++};
++
++#endif



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]