canvas/opengl/rectangularMultiColorGradientFragmentShader.glsl |    6 
 canvas/source/opengl/ogl_canvascustomsprite.cxx                |   30 +--
 canvas/source/opengl/ogl_canvascustomsprite.hxx                |    1 
 canvas/source/opengl/ogl_canvashelper.cxx                      |   78 
++++++----
 canvas/source/opengl/ogl_canvashelper.hxx                      |    2 
 canvas/source/opengl/ogl_renderHelper.cxx                      |    6 
 canvas/source/opengl/ogl_renderHelper.hxx                      |    3 
 canvas/source/opengl/ogl_spritedevicehelper.cxx                |    8 +
 canvas/source/opengl/ogl_spritedevicehelper.hxx                |    7 
 9 files changed, 86 insertions(+), 55 deletions(-)

New commits:
commit 56fb90618a731567bf44339bd4e0b8d0e4dd4dd9
Author: Michael Jaumann <meta_...@yahoo.com>
Date:   Fri Nov 7 11:22:32 2014 +0000

    mv renderHelper->Spritedevicehelper,init OglContxt
    
    Change-Id: I81e4035796e47bd845c8f211d30cc2655b9c09f0

diff --git a/canvas/source/opengl/ogl_canvascustomsprite.cxx 
b/canvas/source/opengl/ogl_canvascustomsprite.cxx
index f64e25c..58b2561 100644
--- a/canvas/source/opengl/ogl_canvascustomsprite.cxx
+++ b/canvas/source/opengl/ogl_canvascustomsprite.cxx
@@ -47,7 +47,6 @@ namespace oglcanvas
         ::canvas::tools::setIdentityAffineMatrix2D(maTransformation);
         maCanvasHelper.init( *rRefDevice.get(),
                              rDeviceHelper );
-        mRenderHelper.SetVP(1600, 900);//is this right?
     }
 
     void CanvasCustomSprite::disposeThis()
@@ -55,7 +54,6 @@ namespace oglcanvas
         ::osl::MutexGuard aGuard( m_aMutex );
 
         mpSpriteCanvas.clear();
-        mRenderHelper.dispose();
         // forward to parent
         CanvasCustomSpriteBaseT::disposeThis();
     }
@@ -132,10 +130,10 @@ namespace oglcanvas
         if( ::basegfx::fTools::equalZero( mfAlpha ) )
             return true;
 
-        const ::basegfx::B2IVector aSpriteSizePixel(
+        const glm::vec2 aSpriteSizePixel(
             ::canvas::tools::roundUp( maSize.Width ),
             ::canvas::tools::roundUp( maSize.Height ));
-
+        RenderHelper* pRenderHelper = 
maCanvasHelper.getDeviceHelper()->getRenderHelper();
             IBufferContextSharedPtr pBufferContext;
             if( mfAlpha != 1.0 || mxClip.is() )
             {
@@ -161,7 +159,7 @@ namespace oglcanvas
                         maTransformation.m02, maTransformation.m12, 0, 1
                     );
 
-                mRenderHelper.SetModelAndMVP(translate * aGLTransform);
+                pRenderHelper->SetModelAndMVP(translate * aGLTransform);
                 // content ended up in background buffer - compose to
                 // screen now. Calls below switches us back to window
                 // context, and binds to generated, dynamic texture
@@ -197,8 +195,8 @@ namespace oglcanvas
                             rTriangulatedPolygon,
                             basegfx::B2DRange(
                                 0,0,
-                                aSpriteSizePixel.getX(),
-                                aSpriteSizePixel.getY())));
+                                aSpriteSizePixel.x,
+                                aSpriteSizePixel.y)));
 
                     GLfloat vertices[rTriangulatedPolygon.count()*2];
                     for( sal_uInt32 i=0; i<rTriangulatedPolygon.count(); i++ )
@@ -207,29 +205,29 @@ namespace oglcanvas
                         vertices[i*2]= rPt.getX();
                         vertices[i*2+1]= rPt.getY();
                     }
-                    mRenderHelper.renderVertexTex( vertices, fWidth, fHeight,  
color, GL_TRIANGLES);
+                    pRenderHelper->renderVertexTex( vertices, fWidth, fHeight, 
 color, GL_TRIANGLES);
                 }
                 else
                 {
-                    const double fWidth=maSize.Width/aSpriteSizePixel.getX();
-                    const double fHeight=maSize.Height/aSpriteSizePixel.getY();
+                    const double fWidth=maSize.Width/aSpriteSizePixel.x;
+                    const double fHeight=maSize.Height/aSpriteSizePixel.y;
 
                     GLfloat vertices[] = {0, 0,
-                                          0, (float) aSpriteSizePixel.getY(),
-                                          (float) aSpriteSizePixel.getX(), 0,
-                                          (float) aSpriteSizePixel.getX(), 
(float) aSpriteSizePixel.getY() };
+                                          0, (float) aSpriteSizePixel.y,
+                                          (float) aSpriteSizePixel.x, 0,
+                                          (float) aSpriteSizePixel.x, (float) 
aSpriteSizePixel.y };
                     GLfloat uvCoordinates[] = {0, 0,
                                                0, (float) fHeight,
                                                (float) fWidth, 0,
                                                (float) fWidth, (float) fHeight 
};
 
-                    mRenderHelper.renderVertexUVTex(vertices,  uvCoordinates, 
color, GL_TRIANGLE_STRIP );
+                    pRenderHelper->renderVertexUVTex(vertices,  uvCoordinates, 
color, GL_TRIANGLE_STRIP );
                 }
 
                 glBindTexture(GL_TEXTURE_2D, 0);
             }
         // translate sprite to output position
-        mRenderHelper.SetModelAndMVP(translate);
+        pRenderHelper->SetModelAndMVP(translate);
         GLfloat vertices[] = {-2, -2,
                               -2, (float) maSize.Height+4,
                               (float) maSize.Width+4, (float) maSize.Height+4,
@@ -237,7 +235,7 @@ namespace oglcanvas
                               -2, -2,
                               (float) maSize.Width+4, (float) maSize.Height+4 
};
 
-        mRenderHelper.renderVertexConstColor(vertices, glm::vec4(1, 0, 0, 1), 
GL_LINE_STRIP);
+        pRenderHelper->renderVertexConstColor(vertices, glm::vec4(1, 0, 0, 1), 
GL_LINE_STRIP);
 
         std::vector<double> aVec;
         aVec.push_back(mfAlpha);
diff --git a/canvas/source/opengl/ogl_canvascustomsprite.hxx 
b/canvas/source/opengl/ogl_canvascustomsprite.hxx
index 6f78a72..730d600 100644
--- a/canvas/source/opengl/ogl_canvascustomsprite.hxx
+++ b/canvas/source/opengl/ogl_canvascustomsprite.hxx
@@ -92,7 +92,6 @@ namespace oglcanvas
         ::basegfx::B2DPoint                               maPosition;
         double                                            mfAlpha;
         double                                            mfPriority;
-        RenderHelper                                      mRenderHelper;
     };
 }
 
diff --git a/canvas/source/opengl/ogl_canvashelper.cxx 
b/canvas/source/opengl/ogl_canvashelper.cxx
index 58e234f..60216ec 100644
--- a/canvas/source/opengl/ogl_canvashelper.cxx
+++ b/canvas/source/opengl/ogl_canvashelper.cxx
@@ -93,61 +93,86 @@ namespace oglcanvas
 
     namespace
     {
-        bool lcl_drawPoint( const CanvasHelper&              /*rHelper*/,
+        bool lcl_drawPoint( const CanvasHelper&              rHelper,
                             const ::basegfx::B2DHomMatrix&   rTransform,
                             GLenum                           eSrcBlend,
                             GLenum                           eDstBlend,
                             const rendering::ARGBColor&      rColor,
-                            const geometry::RealPoint2D&     rPoint,
-                            RenderHelper& mRenderHelper)
+                            const geometry::RealPoint2D&     rPoint)
         {
-            mRenderHelper.SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
+            RenderHelper* pRenderHelper = 
rHelper.getDeviceHelper()->getRenderHelper();
+            pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
             glm::vec4 color  = glm::vec4( (float) rColor.Red,
                                 (float) rColor.Green,
                                 (float) rColor.Blue,
                                 (float) rColor.Alpha);
             GLfloat vertices[] = {(float) rPoint.X, (float) rPoint.Y};
-            mRenderHelper.renderVertexConstColor(vertices, color, GL_POINTS);
+            pRenderHelper->renderVertexConstColor(vertices, color, GL_POINTS);
             return true;
         }
 
-        bool lcl_drawLine( const CanvasHelper&              /*rHelper*/,
+        bool lcl_drawLine( const CanvasHelper&              rHelper,
                            const ::basegfx::B2DHomMatrix&   rTransform,
                            GLenum                           eSrcBlend,
                            GLenum                           eDstBlend,
                            const rendering::ARGBColor&      rColor,
                            const geometry::RealPoint2D&     rStartPoint,
-                           const geometry::RealPoint2D&     rEndPoint,
-                           RenderHelper& mRenderHelper)
+                           const geometry::RealPoint2D&     rEndPoint)
         {
-            mRenderHelper.SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
+            RenderHelper* pRenderHelper = 
rHelper.getDeviceHelper()->getRenderHelper();
+            pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
             glm::vec4 color  = glm::vec4( (float) rColor.Red,
                                 (float) rColor.Green,
                                 (float) rColor.Blue,
                                 (float) rColor.Alpha);
             GLfloat vertices[] = {(float) rStartPoint.X, (float) rStartPoint.Y,
                                   (float) rEndPoint.X, (float) rEndPoint.Y };
-            mRenderHelper.renderVertexConstColor(vertices, color, GL_LINES);
+            pRenderHelper->renderVertexConstColor(vertices, color, GL_LINES);
             return true;
         }
 
-        bool lcl_drawPolyPolygon( const CanvasHelper&                    
/*rHelper*/,
+        bool lcl_drawPolyPolygon( const CanvasHelper&                    
rHelper,
                                   const ::basegfx::B2DHomMatrix&         
rTransform,
                                   GLenum                                 
eSrcBlend,
                                   GLenum                                 
eDstBlend,
                                   const rendering::ARGBColor&            
rColor,
-                                  const ::basegfx::B2DPolyPolygonVector& 
rPolyPolygons )
+                                  const ::basegfx::B2DPolyPolygonVector& 
rPolyPolygons)
         {
-            //move renderPolyPolygon here?
-         //   mRenderHelper.SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
+            RenderHelper* pRenderHelper = 
rHelper.getDeviceHelper()->getRenderHelper();
+            pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
             glm::vec4 color  = glm::vec4( (float) rColor.Red,
                                 (float) rColor.Green,
                                 (float) rColor.Blue,
                                 (float) rColor.Alpha);
+
             ::basegfx::B2DPolyPolygonVector::const_iterator 
aCurr=rPolyPolygons.begin();
             const ::basegfx::B2DPolyPolygonVector::const_iterator 
aEnd=rPolyPolygons.end();
             while( aCurr != aEnd )
-                renderPolyPolygon(*aCurr++);
+            {
+               // renderPolyPolygon(*aCurr++);
+               const ::basegfx::B2DPolyPolygon& rPolyPoly= *aCurr++;
+                ::basegfx::B2DPolyPolygon aPolyPoly(rPolyPoly);
+                if( aPolyPoly.areControlPointsUsed() )
+                    aPolyPoly = rPolyPoly.getDefaultAdaptiveSubdivision();
+
+                for( sal_uInt32 i=0; i<aPolyPoly.count(); i++ )
+                {
+
+
+                    const ::basegfx::B2DPolygon& rPolygon( 
aPolyPoly.getB2DPolygon(i) );
+
+                    const sal_uInt32 nPts=rPolygon.count();
+                    const sal_uInt32 nExtPts=nPts + int(rPolygon.isClosed());
+                    GLfloat vertices[nExtPts*2];
+                    for( sal_uInt32 j=0; j<nExtPts; j++ )
+                    {
+                        const ::basegfx::B2DPoint& rPt( rPolygon.getB2DPoint( 
j % nPts ) );
+                        vertices[j*2] = rPt.getX();
+                        vertices[j*2+1] = rPt.getY();
+                    }
+                    pRenderHelper->renderVertexConstColor(vertices, color, 
GL_LINE_STRIP);
+                }
+            }
 
             return true;
         }
@@ -271,11 +296,11 @@ namespace oglcanvas
                                     const rendering::ARGBColor&      rColor,
                                     const geometry::IntegerSize2D&   
rPixelSize,
                                     const uno::Sequence<sal_Int8>&   
rPixelData,
-                                    sal_uInt32                       
nPixelCrc32,
-                                    RenderHelper&                    
mRenderHelper)
+                                    sal_uInt32                       
nPixelCrc32)
 
         {
-            mRenderHelper.SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
+            RenderHelper* pRenderHelper = 
rHelper.getDeviceHelper()->getRenderHelper();
+            pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
 
             const unsigned int 
nTexId=rHelper.getDeviceHelper()->getTextureCache().getTexture(
                 rPixelSize, rPixelData.getConstArray(), nPixelCrc32);
@@ -303,7 +328,7 @@ namespace oglcanvas
                                        0, 1,
                                        1, 0,
                                        1, 1 };
-            mRenderHelper.renderVertexUVTex(vertices,  uvCoordinates, color, 
GL_TRIANGLE_STRIP );
+            pRenderHelper->renderVertexUVTex(vertices,  uvCoordinates, color, 
GL_TRIANGLE_STRIP );
 
             glBindTexture(GL_TEXTURE_2D, 0);
 
@@ -389,7 +414,6 @@ namespace oglcanvas
         mpDeviceHelper( NULL ),
         mpRecordedActions()
     {
-       mRenderHelper.SetVP(1600, 900);//is this right?
     }
 
     CanvasHelper::~CanvasHelper()
@@ -436,7 +460,7 @@ namespace oglcanvas
             setupGraphicsState( rAct, viewState, renderState );
             rAct.maFunction = ::boost::bind(&lcl_drawPoint,
                                             _1,_2,_3,_4,_5,
-                                            aPoint, boost::ref(mRenderHelper));
+                                            aPoint);
         }
     }
 
@@ -453,8 +477,7 @@ namespace oglcanvas
             setupGraphicsState( rAct, viewState, renderState );
             rAct.maFunction = ::boost::bind(&lcl_drawLine,
                                             _1,_2,_3,_4,_5,
-                                            aStartPoint,aEndPoint,
-                                            boost::ref(mRenderHelper));
+                                            aStartPoint,aEndPoint);
         }
     }
 
@@ -477,7 +500,7 @@ namespace oglcanvas
                                             geometry::RealPoint2D(
                                                 aBezierSegment.Px,
                                                 aBezierSegment.Py),
-                                            aEndPoint, 
boost::ref(mRenderHelper));
+                                            aEndPoint);
         }
     }
 
@@ -499,7 +522,7 @@ namespace oglcanvas
                 
::basegfx::unotools::b2DPolyPolygonFromXPolyPolygon2D(xPolyPolygon));
             rAct.maPolyPolys.back().makeUnique(); // own copy, for thread 
safety
 
-            rAct.maFunction = &lcl_drawPolyPolygon;
+          //  rAct.maFunction = &lcl_drawPolyPolygon;
         }
 
         // TODO(P1): Provide caching here.
@@ -526,7 +549,7 @@ namespace oglcanvas
             rAct.maPolyPolys.back().makeUnique(); // own copy, for thread 
safety
 
             // TODO(F3): fallback to drawPolyPolygon currently
-            rAct.maFunction = &lcl_drawPolyPolygon;
+          //  rAct.maFunction = &lcl_drawPolyPolygon;
         }
 
         // TODO(P1): Provide caching here.
@@ -881,8 +904,7 @@ namespace oglcanvas
                                                     aSize, aARGBBytes,
                                                     rtl_crc32(0,
                                                               
aARGBBytes.getConstArray(),
-                                                              
aARGBBytes.getLength()),
-                                                    boost::ref(mRenderHelper));
+                                                              
aARGBBytes.getLength()));
                 }
                 // TODO(F1): handle non-integer case
             }
diff --git a/canvas/source/opengl/ogl_canvashelper.hxx 
b/canvas/source/opengl/ogl_canvashelper.hxx
index da2f7ab..71b7f2c 100644
--- a/canvas/source/opengl/ogl_canvashelper.hxx
+++ b/canvas/source/opengl/ogl_canvashelper.hxx
@@ -231,8 +231,6 @@ namespace oglcanvas
             copied (used e.g. for CanvasBitmap)
          */
         RecordVectorT                                mpRecordedActions;
-
-        RenderHelper                                 mRenderHelper;
     };
 }
 
diff --git a/canvas/source/opengl/ogl_renderHelper.cxx 
b/canvas/source/opengl/ogl_renderHelper.cxx
index 27cf96a..36a1306 100644
--- a/canvas/source/opengl/ogl_renderHelper.cxx
+++ b/canvas/source/opengl/ogl_renderHelper.cxx
@@ -5,17 +5,17 @@ namespace oglcanvas
 {
     RenderHelper::RenderHelper()
     : m_iWidth(1600) //Why this dimensions?
-    , m_iHeight(900)
+    , m_iHeight(900) //Whole window, see spritedevicehelper
     , m_Model(glm::mat4(1.0f))
     {
-        InitOpenGL();
     }
     void RenderHelper::InitOpenGL()
     {
+        GLenum err = glewInit();
         //Load Shaders //
         m_texManProgID = 
OpenGLHelper::LoadShaders("textManipulatingVertexShader", "textFragmentShader");
         m_simpleProgID = OpenGLHelper::LoadShaders("simpleVertexShader", 
"textFragmentShader");
-        m_texProgID = OpenGLHelper::LoadShaders("texVertrexShader", 
"constantFragmentShader");
+        m_texProgID = OpenGLHelper::LoadShaders("texVertexShader", 
"constantFragmentShader");
         // Get a handle for uniforms
         m_manTexUnf = glGetUniformLocation(m_texManProgID, "TextTex");
         m_simpleTexUnf = glGetUniformLocation(m_simpleProgID, "TextTex");
diff --git a/canvas/source/opengl/ogl_renderHelper.hxx 
b/canvas/source/opengl/ogl_renderHelper.hxx
index a7e7a54..7c717a6 100644
--- a/canvas/source/opengl/ogl_renderHelper.hxx
+++ b/canvas/source/opengl/ogl_renderHelper.hxx
@@ -19,13 +19,12 @@ namespace oglcanvas
         void SetVP(int width, int height);
         void SetModelAndMVP(glm::mat4 mat);
         void dispose();
+        void  InitOpenGL();
 
     private:
         RenderHelper&  operator = (const RenderHelper& other);
         RenderHelper(const RenderHelper& other);
 
-        void  InitOpenGL();
-
         GLuint                                            m_vertexBuffer;
         GLuint                                            m_uvBuffer;
 
diff --git a/canvas/source/opengl/ogl_spritedevicehelper.cxx 
b/canvas/source/opengl/ogl_spritedevicehelper.cxx
index 70c9507..5d8ed44 100644
--- a/canvas/source/opengl/ogl_spritedevicehelper.cxx
+++ b/canvas/source/opengl/ogl_spritedevicehelper.cxx
@@ -108,6 +108,8 @@ namespace oglcanvas
         maContext.init(&rWindow);
         // init window context
         initContext();
+        mRenderHelper.InitOpenGL();
+        mRenderHelper.SetVP(1600, 900);//is this right?
 
         mnLinearMultiColorGradientProgram =
             OpenGLHelper::LoadShaders("dummyVertexShader", 
"linearMultiColorGradientFragmentShader");
@@ -149,6 +151,7 @@ namespace oglcanvas
             glDeleteProgram( mnLinearTwoColorGradientProgram );
             glDeleteProgram( mnLinearMultiColorGradientProgram );
         }
+        mRenderHelper.dispose();
     }
 
     geometry::RealSize2D SpriteDeviceHelper::getPhysicalResolution()
@@ -594,6 +597,11 @@ namespace oglcanvas
     {
         return *mpTextureCache;
     }
+
+    RenderHelper* SpriteDeviceHelper::getRenderHelper()
+    {
+        return &    mRenderHelper;
+    }
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/canvas/source/opengl/ogl_spritedevicehelper.hxx 
b/canvas/source/opengl/ogl_spritedevicehelper.hxx
index e9ecdc2..8bda43b 100644
--- a/canvas/source/opengl/ogl_spritedevicehelper.hxx
+++ b/canvas/source/opengl/ogl_spritedevicehelper.hxx
@@ -19,6 +19,7 @@
 #include <boost/shared_ptr.hpp>
 
 #include "ogl_buffercontext.hxx"
+#include "ogl_renderHelper.hxx"
 
 #include <glm/glm.hpp>
 #include <set>
@@ -116,8 +117,13 @@ namespace oglcanvas
         /// Get instance of internal texture cache
         TextureCache& getTextureCache() const;
 
+        ///Get instance of internal RenderHelper;
+        RenderHelper* getRenderHelper();
+
         bool activateWindowContext();
 
+
+
     private:
         void resize( const ::basegfx::B2IVector& rNewSize );
 
@@ -147,6 +153,7 @@ namespace oglcanvas
         unsigned int                                       
mnRectangularMultiColorGradientProgram;
 
         OpenGLContext maContext;
+        RenderHelper                                      mRenderHelper;
     };
 }
 
commit 565aef93a02aa444573ca9c26b55e1056c6c2f7f
Author: Michael Jaumann <meta_...@yahoo.com>
Date:   Fri Nov 7 09:48:02 2014 +0000

    take the correct max function in shader
    
    Change-Id: Ib0f4de5e75120b86a107e885e672066d582240b0

diff --git a/canvas/opengl/rectangularMultiColorGradientFragmentShader.glsl 
b/canvas/opengl/rectangularMultiColorGradientFragmentShader.glsl
index ea17565..331e57a 100644
--- a/canvas/opengl/rectangularMultiColorGradientFragmentShader.glsl
+++ b/canvas/opengl/rectangularMultiColorGradientFragmentShader.glsl
@@ -15,7 +15,7 @@ uniform sampler1D t_stopArray1d;
 uniform mat3x2    m_transform;
 varying vec2      v_textureCoords2d;
 
-int max(int x, int y)
+int maxInt(int x, int y)
 {
     if(x > y)
         return x;
@@ -28,13 +28,13 @@ int findBucket(float t)
     while( nMinBucket < i_nColors &&
             texture1D(t_stopArray1d, nMinBucket).s < t )
         ++nMinBucket;
-    return max(nMinBucket-1,0);
+    return maxInt(nMinBucket-1,0);
 }
 
 void main(void)
 {
     vec2  v = abs( vec2(m_transform * vec3(v_textureCoords2d,1)) );
-    float fAlpha = 1 - max(v.x, v.y);
+    float fAlpha = 1.0 - max(v.x, v.y);
 
     int nMinBucket=findBucket( fAlpha );
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to