canvas/Package_opengl.mk                        |    1 
 canvas/opengl/transformationFragmentShader.glsl |   24 ++++++++
 canvas/source/opengl/ogl_canvashelper.cxx       |   42 +++++++-------
 canvas/source/opengl/ogl_canvastools.cxx        |   64 ++++++++++++++++------
 canvas/source/opengl/ogl_canvastools.hxx        |    2 
 canvas/source/opengl/ogl_renderHelper.cxx       |   68 +++++++++++++++++++-----
 canvas/source/opengl/ogl_renderHelper.hxx       |   10 +++
 canvas/source/opengl/ogl_spritedevicehelper.cxx |   26 ++-------
 include/vcl/opengl/OpenGLContext.hxx            |    3 +
 9 files changed, 170 insertions(+), 70 deletions(-)

New commits:
commit d81798535aba8c3f4686cb89eb2238d1df322c35
Author: Michael Jaumann <meta_...@yahoo.com>
Date:   Tue Dec 2 10:06:36 2014 +0000

    texture transformation shader
    
    New texture transformation shader.
    Renderhelper uses it.
    Draw texturedPolygon with it.
    
    Change-Id: I285bf9cce0f216fd382a933d53b786238005f74f

diff --git a/canvas/Package_opengl.mk b/canvas/Package_opengl.mk
index 13c6cb3..7948fda 100644
--- a/canvas/Package_opengl.mk
+++ b/canvas/Package_opengl.mk
@@ -22,6 +22,7 @@ $(eval $(call 
gb_Package_add_files,canvas_opengl_shader,$(LIBO_ETC_FOLDER)/openg
         textFragmentShader.glsl \
         textManipulatingVertexShader.glsl \
         texVertexShader.glsl \
+               transformationFragmentShader.glsl \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/canvas/opengl/transformationFragmentShader.glsl 
b/canvas/opengl/transformationFragmentShader.glsl
new file mode 100644
index 0000000..1a72b10
--- /dev/null
+++ b/canvas/opengl/transformationFragmentShader.glsl
@@ -0,0 +1,24 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#version 120
+
+uniform sampler2D TextTex;     
+uniform vec4 colorTex;
+uniform mat4 texTrans;
+//Texture Coordinates
+varying vec2 textCoords;
+
+void main()
+{
+               vec2 texCoord = (texTrans * vec4(textCoords, 0, 1)).xy;
+        gl_FragColor = texture2D( TextTex, texCoord )*colorTex;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/canvas/source/opengl/ogl_canvashelper.cxx 
b/canvas/source/opengl/ogl_canvashelper.cxx
index 5c9e916..34d1342 100644
--- a/canvas/source/opengl/ogl_canvashelper.cxx
+++ b/canvas/source/opengl/ogl_canvashelper.cxx
@@ -35,6 +35,7 @@
 #include "ogl_tools.hxx"
 
 #include <GL/glew.h>
+#include <glm/gtc/type_ptr.hpp>
 
 #include <boost/scoped_array.hpp>
 
@@ -336,14 +337,11 @@ namespace oglcanvas
             RenderHelper* pRenderHelper = 
rHelper.getDeviceHelper()->getRenderHelper();
             pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
 
-            glm::vec4 color  = glm::vec4( (float) rendering::ARGBColor().Red,
-                                (float) rendering::ARGBColor().Green,
-                                (float) rendering::ARGBColor().Blue,
-                                (float) rendering::ARGBColor().Alpha);
-
+            //blend against fixed color
+            glm::vec4 color  = glm::vec4(1,1,1,1);
             const unsigned int 
nTexId=rHelper.getDeviceHelper()->getTextureCache().getTexture(
                 rPixelSize, rPixelData.getConstArray(), nPixelCrc32);
-
+            glActiveTexture(GL_TEXTURE0);
             glBindTexture(GL_TEXTURE_2D, nTexId);
             glEnable(GL_TEXTURE_2D);
             glTexParameteri(GL_TEXTURE_2D,
@@ -364,24 +362,24 @@ namespace oglcanvas
             ::basegfx::B2DRange aBounds;
             ::basegfx::B2DPolyPolygonVector::const_iterator 
aCurr=rPolyPolygons.begin();
             const ::basegfx::B2DPolyPolygonVector::const_iterator 
aEnd=rPolyPolygons.end();
-         /*   while( aCurr != aEnd )
+            while( aCurr != aEnd )
                 aBounds.expand(::basegfx::tools::getRange(*aCurr++));
             aTextureTransform.translate(-aBounds.getMinX(), 
-aBounds.getMinY());
             aTextureTransform.scale(1/aBounds.getWidth(), 
1/aBounds.getHeight());
             aTextureTransform.invert();
 
-            double aTexTransform[] =
+            float aTexTransform[] =
                 {
-                    aTextureTransform.get(0,0), aTextureTransform.get(1,0), 0, 
0,
-                    aTextureTransform.get(0,1), aTextureTransform.get(1,1), 0, 
0,
+                    (float) aTextureTransform.get(0,0), (float) 
aTextureTransform.get(1,0), 0, 0,
+                    (float) aTextureTransform.get(0,1), (float) 
aTextureTransform.get(1,1), 0, 0,
                     0,                          0,                          1, 
0,
-                    aTextureTransform.get(0,2), aTextureTransform.get(1,2), 0, 
1
-                };*/
+                    (float) aTextureTransform.get(0,2), (float) 
aTextureTransform.get(1,2), 0, 1
+                };
 
             aCurr=rPolyPolygons.begin();
             while( aCurr != aEnd )
             {
-                renderComplexPolyPolygon(*aCurr++, pRenderHelper, color, true);
+                renderTransformComplexPolygon(*aCurr++, pRenderHelper, color, 
glm::make_mat4(aTexTransform));
             }
 
 
diff --git a/canvas/source/opengl/ogl_canvastools.cxx 
b/canvas/source/opengl/ogl_canvastools.cxx
index 4e5bb8a..0894853 100644
--- a/canvas/source/opengl/ogl_canvastools.cxx
+++ b/canvas/source/opengl/ogl_canvastools.cxx
@@ -28,7 +28,7 @@ using namespace ::com::sun::star;
 
 namespace oglcanvas
 {
-    /// triangulates polygon before
+    // triangulates polygon before
     void renderComplexPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly, 
RenderHelper *renderHelper,
         glm::vec4 color, const bool hasTexture)
     {
@@ -57,6 +57,30 @@ namespace oglcanvas
         }
     }
 
+    void renderTransformComplexPolygon( const ::basegfx::B2DPolyPolygon& 
rPolyPoly, RenderHelper *renderHelper,
+        glm::vec4 color, glm::mat4 transform)
+    {
+        ::basegfx::B2DPolyPolygon aPolyPoly(rPolyPoly);
+        if( aPolyPoly.areControlPointsUsed() )
+            aPolyPoly = rPolyPoly.getDefaultAdaptiveSubdivision();
+        const ::basegfx::B2DRange& rBounds(aPolyPoly.getB2DRange());
+        const double nWidth=rBounds.getWidth();
+        const double nHeight=rBounds.getHeight();
+        const ::basegfx::B2DPolygon& rTriangulatedPolygon(
+            ::basegfx::triangulator::triangulate(aPolyPoly));
+        if(rTriangulatedPolygon.count()>0)
+        {
+            std::vector<glm::vec2> vertices;
+            vertices.reserve(rTriangulatedPolygon.count());
+            for( sal_uInt32 i=0; i<rTriangulatedPolygon.count(); i++ )
+            {
+                const ::basegfx::B2DPoint& rPt( 
rTriangulatedPolygon.getB2DPoint(i) );
+                vertices.push_back(glm::vec2(rPt.getX(),rPt.getY()));
+            }
+            renderHelper->renderTextureTransform( vertices, nWidth, nHeight,  
color, GL_TRIANGLES, transform);
+        }
+    }
+
     /** only use this for line polygons.
 
         better not leave triangulation to OpenGL. also, ignores texturing
diff --git a/canvas/source/opengl/ogl_canvastools.hxx 
b/canvas/source/opengl/ogl_canvastools.hxx
index 2ac7a4b..5c7e1e6 100644
--- a/canvas/source/opengl/ogl_canvastools.hxx
+++ b/canvas/source/opengl/ogl_canvastools.hxx
@@ -28,6 +28,8 @@ namespace oglcanvas
         void renderComplexPolyPolygon( const ::basegfx::B2DPolyPolygon& 
rPolyPoly,
             RenderHelper *renderHelper, glm::vec4 color, const bool 
hasTexture);
         void renderPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly, 
RenderHelper *renderHelper, glm::vec4 color );
+        void renderTransformComplexPolygon( const ::basegfx::B2DPolyPolygon& 
rPolyPoly, RenderHelper *renderHelper,
+            glm::vec4 color, glm::mat4 transform);
         glm::mat4 setupState( const ::basegfx::B2DHomMatrix&                
rTransform,
                          unsigned int                                  
eSrcBlend,
                          unsigned int                                  
eDstBlend );
diff --git a/canvas/source/opengl/ogl_renderHelper.cxx 
b/canvas/source/opengl/ogl_renderHelper.cxx
index 17f7675..9d3c9cf 100644
--- a/canvas/source/opengl/ogl_renderHelper.cxx
+++ b/canvas/source/opengl/ogl_renderHelper.cxx
@@ -24,27 +24,35 @@ namespace oglcanvas
         m_texManProgID = 
OpenGLHelper::LoadShaders("textManipulatingVertexShader", "textFragmentShader");
         m_simpleProgID = OpenGLHelper::LoadShaders("simpleVertexShader", 
"textFragmentShader");
         m_texProgID = OpenGLHelper::LoadShaders("texVertexShader", 
"constantFragmentShader");
+        m_texTransProgID = 
OpenGLHelper::LoadShaders("textManipulatingVertexShader", 
"transformationFragmentShader");
         // Get a handle for uniforms
         m_manTexUnf = glGetUniformLocation(m_texManProgID, "TextTex");
         m_simpleTexUnf = glGetUniformLocation(m_simpleProgID, "TextTex");
+        m_transTexUnf = glGetUniformLocation(m_texTransProgID, "TextTex");
 
         m_manCordUnf = glGetUniformLocation(m_texManProgID, "texCord");
+        m_transCordUnf = glGetUniformLocation(m_texTransProgID, "texCord");
         m_texColorUnf = glGetUniformLocation(m_texProgID, "constantColor");
 
         m_manColorUnf = glGetUniformLocation(m_texManProgID,"colorTex");
         m_simpleColorUnf = glGetUniformLocation(m_simpleProgID,"colorTex");
+        m_transColorUnf = glGetUniformLocation(m_texTransProgID,"colorTex");
+        m_transTexTransform = 
glGetUniformLocation(m_texTransProgID,"texTrans");
 
         m_texMVPUnf = glGetUniformLocation(m_texProgID, "MVP");
         m_manMVPUnf = glGetUniformLocation(m_texManProgID, "MVP");
         m_simpleMVPUnf = glGetUniformLocation(m_simpleProgID, "MVP");
+        m_transMVPUnf = glGetUniformLocation(m_texTransProgID, "MVP");
         //Gen Buffers for texturecoordinates/vertices
         glGenBuffers(1, &m_vertexBuffer);
         glGenBuffers(1, &m_uvBuffer);
         m_manPosAttrb = glGetAttribLocation(m_texManProgID ,"vPosition");
-        m_simpleUvAttrb = glGetAttribLocation(m_simpleProgID ,"UV");
+        m_transPosAttrb = glGetAttribLocation(m_texTransProgID ,"vPosition");
         m_simplePosAttrb = glGetAttribLocation(m_simpleProgID ,"vPosition");
         m_texPosAttrb = glGetAttribLocation(m_texProgID ,"vPosition");
 
+        m_simpleUvAttrb = glGetAttribLocation(m_simpleProgID ,"UV");
+
     }
 
     void RenderHelper::SetVP(const float width, const float height)
@@ -85,19 +93,17 @@ namespace oglcanvas
         glBufferData(GL_ARRAY_BUFFER, rVertices.size()*sizeof(float)*2, 
&rVertices[0].x, GL_STATIC_DRAW);
         glUniform4fv(m_texColorUnf, 1, &color[0]);
         glUniformMatrix4fv(m_texMVPUnf, 1, GL_FALSE, &m_MVP[0][0]);
-
         glEnableVertexAttribArray(m_texPosAttrb); //vertices
         glVertexAttribPointer(
-                        m_texPosAttrb,
-                        2,                            // size
-                        GL_FLOAT,                     // type
-                        GL_FALSE,                     // normalized?
-                        0,                            // stride
-                        (void*)0                      // array buffer offset
+            m_texPosAttrb,
+            2,                            // size
+            GL_FLOAT,                     // type
+            GL_FALSE,                     // normalized?
+            0,                            // stride
+            (void*)0                      // array buffer offset
         );
-        glDrawArrays(mode, 0, rVertices.size());
-
 
+        glDrawArrays(mode, 0, rVertices.size());
 
         glDisableVertexAttribArray(m_texPosAttrb);
         glBindBuffer(GL_ARRAY_BUFFER, 0);
@@ -126,7 +132,7 @@ namespace oglcanvas
             m_simplePosAttrb,
             2,                            // size
             GL_FLOAT,                     // type
-            GL_FALSE,                     // normalized?v
+            GL_FALSE,                     // normalized?
             0,                            // stride
             (void*)0                      // array buffer offset
         );
@@ -178,7 +184,41 @@ namespace oglcanvas
         glEnableVertexAttribArray(m_manPosAttrb);
         glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
         glVertexAttribPointer(
-            m_manPosAttrb,
+                m_manPosAttrb,
+                2,                            // size
+                GL_FLOAT,                     // type
+                GL_FALSE,                     // normalized?
+                0,                            // stride
+                (void*)0                      // array buffer offset
+        );
+
+        glDrawArrays(mode, 0, rVertices.size());
+
+        glDisableVertexAttribArray(m_manPosAttrb);
+        glBindBuffer(GL_ARRAY_BUFFER, 0);
+        glUseProgram(0);
+    }
+
+        // Uses fWidth,fHeight to generate texture coordinates in 
vertex-shader.
+    void RenderHelper::renderTextureTransform(const std::vector<glm::vec2>& 
rVertices, GLfloat fWidth,
+     GLfloat fHeight, glm::vec4 color, GLenum mode, glm::mat4 transform) const
+    {
+        glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
+        glBufferData(GL_ARRAY_BUFFER, rVertices.size()*sizeof(float)*2, 
&rVertices[0].x, GL_STATIC_DRAW);
+
+        glUseProgram(m_texTransProgID);
+
+        //Set Uniforms
+        glUniform1i(m_transTexUnf, 0);
+        glUniform2f(m_transCordUnf,fWidth,fHeight);
+        glUniform4fv(m_transColorUnf, 1, &color[0]);
+        glUniformMatrix4fv(m_transTexTransform, 1, GL_FALSE, &transform[0][0]);
+        glUniformMatrix4fv(m_transMVPUnf, 1, GL_FALSE, &m_MVP[0][0]);
+
+        glEnableVertexAttribArray(m_transPosAttrb);
+        glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
+        glVertexAttribPointer(
+            m_transPosAttrb,
             2,                            // size
             GL_FLOAT,                     // type
             GL_FALSE,                     // normalized?
diff --git a/canvas/source/opengl/ogl_renderHelper.hxx 
b/canvas/source/opengl/ogl_renderHelper.hxx
index 504df4f..cca509b 100644
--- a/canvas/source/opengl/ogl_renderHelper.hxx
+++ b/canvas/source/opengl/ogl_renderHelper.hxx
@@ -22,6 +22,8 @@ namespace oglcanvas
         void renderVertexConstColor(const std::vector<glm::vec2>& rVertices, 
glm::vec4 color, GLenum mode) const;
         void renderVertexUVTex(const std::vector<glm::vec2>& rVertices, const 
std::vector<glm::vec2>& rUVcoords, glm::vec4 color, GLenum mode) const;
         void renderVertexTex(const std::vector<glm::vec2>& rVertices, GLfloat, 
GLfloat, glm::vec4 color, GLenum mode) const;
+        void renderTextureTransform(const std::vector<glm::vec2>& rVertices, 
GLfloat fWidth,
+     GLfloat fHeight, glm::vec4 color, GLenum mode, glm::mat4 transform) const;
 
         RenderHelper();
 
@@ -56,6 +58,14 @@ namespace oglcanvas
         GLuint                                            m_texManProgID;
         GLuint                                            m_texProgID;
         GLuint                                            m_texMVPUnf;
+
+        GLuint                                            m_texTransProgID;
+        GLuint                                            m_transPosAttrb;
+        GLuint                                            m_transCordUnf;
+        GLuint                                            m_transMVPUnf;
+        GLuint                                            m_transTexUnf;
+        GLuint                                            m_transColorUnf;
+        GLuint                                            m_transTexTransform;
         //dimension
         int                                               m_iWidth;
         int                                               m_iHeight;
commit 09d7907c1416c8f38387ca76a0928c285427e74b
Author: Michael Jaumann <meta_...@yahoo.com>
Date:   Mon Dec 1 12:33:07 2014 +0000

    cleanup
    
    Change-Id: Ide2746b3fc112642bc6e262689b710326166fd28

diff --git a/canvas/source/opengl/ogl_spritedevicehelper.cxx 
b/canvas/source/opengl/ogl_spritedevicehelper.cxx
index 0d171d6..ba49896 100644
--- a/canvas/source/opengl/ogl_spritedevicehelper.cxx
+++ b/canvas/source/opengl/ogl_spritedevicehelper.cxx
@@ -100,6 +100,7 @@ namespace oglcanvas
         initContext();
         mRenderHelper.InitOpenGL();
 
+
         mnLinearMultiColorGradientProgram =
             OpenGLHelper::LoadShaders("dummyVertexShader", 
"linearMultiColorGradientFragmentShader");
 
@@ -301,16 +302,6 @@ namespace oglcanvas
         const ::Size& rOutputSize = pChildWindow->GetSizePixel();
         initTransformation(rOutputSize);
 
-        glm::mat4 ViewTranslate = glm::translate(
-        glm::mat4(1.0f),
-        glm::vec3(-1.0,  1.0, 0.0));
-        glm::mat4 ViewScaled = glm::scale(
-        ViewTranslate,
-        glm::vec3(2.0  / rOutputSize.Width(),
-              -2.0/ rOutputSize.Height(),
-              1.0 ));
-        mRenderHelper.SetModelAndMVP(ViewScaled);
-
         // render the actual spritecanvas content
         mpSpriteCanvas->renderRecordedActions();
 
@@ -334,17 +325,16 @@ namespace oglcanvas
 
         const double fps(denominator == 0.0 ? 100.0 : 1.0/denominator);
 
-        mRenderHelper.SetModelAndMVP(ViewScaled);
+#ifdef DEBUG_RENDERING
+        std::vector<double> aVec;
+        aVec.push_back(mfAlpha);
+        aVec.push_back(mfPriority);
+        aVec.push_back(maCanvasHelper.getRecordedActionCount());
 
-#ifdef  RENDER_DEBUG
-        std::vector<double> aVec; aVec.push_back(fps);
-        aVec.push_back(maActiveSprites.size());
-        aVec.push_back(mpTextureCache->getCacheSize());
-        aVec.push_back(mpTextureCache->getCacheMissCount());
-        aVec.push_back(mpTextureCache->getCacheHitCount());
-        renderOSD( aVec, 20 , getRenderHelper());
+        renderOSD( aVec, 20, pRenderHelper);
 #endif
 
+
         /*
          * TODO: moggi: fix it!
         // switch buffer, sync etc.
commit 72b7e7371b9cbfa7df294cb390aaf0ba5945ad4a
Author: Michael Jaumann <meta_...@yahoo.com>
Date:   Mon Dec 1 12:28:47 2014 +0000

    make copy constructor private
    
    Change-Id: Ic6a36ecfbf24652d9e0a998d35ce1bfe3920eb6e

diff --git a/include/vcl/opengl/OpenGLContext.hxx 
b/include/vcl/opengl/OpenGLContext.hxx
index 4017923..175c663 100644
--- a/include/vcl/opengl/OpenGLContext.hxx
+++ b/include/vcl/opengl/OpenGLContext.hxx
@@ -149,6 +149,9 @@ struct GLWindow
 
 class VCLOPENGL_DLLPUBLIC OpenGLContext
 {
+private:
+    OpenGLContext(const OpenGLContext&);
+    OpenGLContext& operator=(const OpenGLContext&);
 public:
     OpenGLContext();
     ~OpenGLContext();
commit 3f559f788798cfffaf1e313b8c4d89a0701bcb26
Author: Michael Jaumann <meta_...@yahoo.com>
Date:   Mon Dec 1 10:47:10 2014 +0000

    set transformation matrix before rendering
    
    Change-Id: Ib90a5af88659bba4e6f14f17c767c8fc0892702a

diff --git a/canvas/source/opengl/ogl_canvashelper.cxx 
b/canvas/source/opengl/ogl_canvashelper.cxx
index 0d5b087..5c9e916 100644
--- a/canvas/source/opengl/ogl_canvashelper.cxx
+++ b/canvas/source/opengl/ogl_canvashelper.cxx
@@ -101,7 +101,7 @@ namespace oglcanvas
                             const geometry::RealPoint2D&     rPoint)
         {
             RenderHelper* pRenderHelper = 
rHelper.getDeviceHelper()->getRenderHelper();
-        //  pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
+            pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
             glm::vec4 color  = glm::vec4( (float) rColor.Red,
                                 (float) rColor.Green,
                                 (float) rColor.Blue,
@@ -122,7 +122,7 @@ namespace oglcanvas
                            const geometry::RealPoint2D&     rEndPoint)
         {
             RenderHelper* pRenderHelper = 
rHelper.getDeviceHelper()->getRenderHelper();
-          //  pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
+            pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
             glm::vec4 color  = glm::vec4( (float) rColor.Red,
                                 (float) rColor.Green,
                                 (float) rColor.Blue,
@@ -144,7 +144,7 @@ namespace oglcanvas
                                   const ::basegfx::B2DPolyPolygonVector& 
rPolyPolygons)
         {
             RenderHelper* pRenderHelper = 
rHelper.getDeviceHelper()->getRenderHelper();
-           // pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
+            pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
             glm::vec4 color  = glm::vec4( (float) rColor.Red,
                                 (float) rColor.Green,
                                 (float) rColor.Blue,
@@ -169,7 +169,7 @@ namespace oglcanvas
         {
             //no texture bind ?
             RenderHelper* pRenderHelper = 
rHelper.getDeviceHelper()->getRenderHelper();
-         //   pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
+            pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
             glm::vec4 color  = glm::vec4( (float) rColor.Red,
                                           (float) rColor.Green,
                                           (float) rColor.Blue,
@@ -194,7 +194,7 @@ namespace oglcanvas
                                           const 
::basegfx::B2DPolyPolygonVector&         rPolyPolygons )
         {
             RenderHelper* pRenderHelper = 
rHelper.getDeviceHelper()->getRenderHelper();
-            setupState(rTransform, eSrcBlend, eDstBlend);
+            pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
             glm::vec4 color  = glm::vec4( (float) rendering::ARGBColor().Red,
                                 (float) rendering::ARGBColor().Green,
                                 (float) rendering::ARGBColor().Blue,
@@ -259,15 +259,15 @@ namespace oglcanvas
             return true;
         }
 
-        bool lcl_drawOwnBitmap( const CanvasHelper&              /*rHelper*/,
+        bool lcl_drawOwnBitmap( const CanvasHelper&              rHelper,
                                 const ::basegfx::B2DHomMatrix&   rTransform,
                                 GLenum                           eSrcBlend,
                                 GLenum                           eDstBlend,
                                 const rendering::ARGBColor&      rColor,
                                 const CanvasBitmap&              rBitmap )
         {
-            setupState(rTransform, eSrcBlend, eDstBlend);
-
+            RenderHelper* pRenderHelper = 
rHelper.getDeviceHelper()->getRenderHelper();
+            pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
             return rBitmap.renderRecordedActions();
         }
 
@@ -283,7 +283,7 @@ namespace oglcanvas
         {
 
             RenderHelper* pRenderHelper = 
rHelper.getDeviceHelper()->getRenderHelper();
-            setupState(rTransform, eSrcBlend, eDstBlend);
+            pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
 
             const unsigned int 
nTexId=rHelper.getDeviceHelper()->getTextureCache().getTexture(
                 rPixelSize, rPixelData.getConstArray(), nPixelCrc32);
@@ -333,9 +333,9 @@ namespace oglcanvas
                                           sal_uInt32                           
  nPixelCrc32,
                                           const 
::basegfx::B2DPolyPolygonVector& rPolyPolygons )
         {
-         //   setupState(rTransform, eSrcBlend, eDstBlend, 
rendering::ARGBColor());
             RenderHelper* pRenderHelper = 
rHelper.getDeviceHelper()->getRenderHelper();
-            setupState(rTransform, eSrcBlend, eDstBlend);
+            pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, 
eDstBlend));
+
             glm::vec4 color  = glm::vec4( (float) rendering::ARGBColor().Red,
                                 (float) rendering::ARGBColor().Green,
                                 (float) rendering::ARGBColor().Blue,
@@ -364,7 +364,7 @@ namespace oglcanvas
             ::basegfx::B2DRange aBounds;
             ::basegfx::B2DPolyPolygonVector::const_iterator 
aCurr=rPolyPolygons.begin();
             const ::basegfx::B2DPolyPolygonVector::const_iterator 
aEnd=rPolyPolygons.end();
-            while( aCurr != aEnd )
+         /*   while( aCurr != aEnd )
                 aBounds.expand(::basegfx::tools::getRange(*aCurr++));
             aTextureTransform.translate(-aBounds.getMinX(), 
-aBounds.getMinY());
             aTextureTransform.scale(1/aBounds.getWidth(), 
1/aBounds.getHeight());
@@ -376,7 +376,7 @@ namespace oglcanvas
                     aTextureTransform.get(0,1), aTextureTransform.get(1,1), 0, 
0,
                     0,                          0,                          1, 
0,
                     aTextureTransform.get(0,2), aTextureTransform.get(1,2), 0, 
1
-                };
+                };*/
 
             aCurr=rPolyPolygons.begin();
             while( aCurr != aEnd )
commit 94c98376d2a4c90d995432872fe481db2dd195f8
Author: Michael Jaumann <meta_...@yahoo.com>
Date:   Mon Dec 1 10:41:24 2014 +0000

    compute mvp matrix in the right order
    
    Change-Id: If167d80218a1a2b230d3ee8bad6a3b24676fe8c0

diff --git a/canvas/source/opengl/ogl_renderHelper.cxx 
b/canvas/source/opengl/ogl_renderHelper.cxx
index 40fa5ce..17f7675 100644
--- a/canvas/source/opengl/ogl_renderHelper.cxx
+++ b/canvas/source/opengl/ogl_renderHelper.cxx
@@ -56,7 +56,7 @@ namespace oglcanvas
     void RenderHelper::SetModelAndMVP(const glm::mat4& mat)
     {
         m_Model = mat;
-        m_MVP = m_Model * m_VP;
+        m_MVP = m_VP*m_Model ;
     }
 
     void RenderHelper::renderVertexConstColor(const std::vector<glm::vec2>& 
rVertices, glm::vec4 color, GLenum mode) const
commit 9157fe18b22778c19a594f70804a643b6c0e814d
Author: Michael Jaumann <meta_...@yahoo.com>
Date:   Mon Dec 1 10:32:29 2014 +0000

    use vertex attribute in the correspending program
    
    Change-Id: I1a16ec97a1733fa0d2e24a578d84bd4cf9cfa847

diff --git a/canvas/source/opengl/ogl_renderHelper.cxx 
b/canvas/source/opengl/ogl_renderHelper.cxx
index 95d3b49..40fa5ce 100644
--- a/canvas/source/opengl/ogl_renderHelper.cxx
+++ b/canvas/source/opengl/ogl_renderHelper.cxx
@@ -81,13 +81,24 @@ namespace oglcanvas
         );
         glUseProgram(m_texProgID);
 
+        glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
         glBufferData(GL_ARRAY_BUFFER, rVertices.size()*sizeof(float)*2, 
&rVertices[0].x, GL_STATIC_DRAW);
         glUniform4fv(m_texColorUnf, 1, &color[0]);
         glUniformMatrix4fv(m_texMVPUnf, 1, GL_FALSE, &m_MVP[0][0]);
-        glEnableVertexAttribArray(m_texPosAttrb); //vertices
 
+        glEnableVertexAttribArray(m_texPosAttrb); //vertices
+        glVertexAttribPointer(
+                        m_texPosAttrb,
+                        2,                            // size
+                        GL_FLOAT,                     // type
+                        GL_FALSE,                     // normalized?
+                        0,                            // stride
+                        (void*)0                      // array buffer offset
+        );
         glDrawArrays(mode, 0, rVertices.size());
 
+
+
         glDisableVertexAttribArray(m_texPosAttrb);
         glBindBuffer(GL_ARRAY_BUFFER, 0);
         glUseProgram(0);
@@ -131,15 +142,6 @@ namespace oglcanvas
             (void*)0                      // array buffer offset
         );
 
-        glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
-        glVertexAttribPointer(
-                        m_texPosAttrb,
-                        2,                            // size
-                        GL_FLOAT,                     // type
-                        GL_FALSE,                     // normalized?
-                        0,                            // stride
-                        (void*)0                      // array buffer offset
-        );
         glDrawArrays(mode, 0, rVertices.size());
 
         glDisableVertexAttribArray(m_simplePosAttrb);
commit 0d94d3cc0ee1545dc5d153137cc0b1ac6611956d
Author: Michael Jaumann <meta_...@yahoo.com>
Date:   Fri Nov 28 14:02:01 2014 +0000

    avoid rendering polygons with 0 vertices
    
    Change-Id: I73d5671770bdad8a3b3b52d769d02f2819a16604

diff --git a/canvas/source/opengl/ogl_canvastools.cxx 
b/canvas/source/opengl/ogl_canvastools.cxx
index 346d73a..4e5bb8a 100644
--- a/canvas/source/opengl/ogl_canvastools.cxx
+++ b/canvas/source/opengl/ogl_canvastools.cxx
@@ -40,17 +40,21 @@ namespace oglcanvas
         const double nHeight=rBounds.getHeight();
         const ::basegfx::B2DPolygon& rTriangulatedPolygon(
             ::basegfx::triangulator::triangulate(aPolyPoly));
-        std::vector<glm::vec2> vertices;
-        vertices.reserve(rTriangulatedPolygon.count());
-        for( sal_uInt32 i=0; i<rTriangulatedPolygon.count(); i++ )
+        if(rTriangulatedPolygon.count()>0)
         {
-            const ::basegfx::B2DPoint& rPt( 
rTriangulatedPolygon.getB2DPoint(i) );
-            vertices.push_back(glm::vec2(rPt.getX(),rPt.getY()));
+            std::vector<glm::vec2> vertices;
+            vertices.reserve(rTriangulatedPolygon.count());
+            for( sal_uInt32 i=0; i<rTriangulatedPolygon.count(); i++ )
+            {
+                const ::basegfx::B2DPoint& rPt( 
rTriangulatedPolygon.getB2DPoint(i) );
+                vertices.push_back(glm::vec2(rPt.getX(),rPt.getY()));
+            }
+
+            if(hasTexture)
+                renderHelper->renderVertexTex( vertices, nWidth, nHeight,  
color, GL_TRIANGLES);
+            else
+                renderHelper->renderVertexConstColor(vertices, color, 
GL_TRIANGLES);
         }
-        if(hasTexture)
-            renderHelper->renderVertexTex( vertices, nWidth, nHeight,  color, 
GL_TRIANGLES);
-        else
-            renderHelper->renderVertexConstColor(vertices, color, 
GL_TRIANGLES);
     }
 
     /** only use this for line polygons.
@@ -70,15 +74,17 @@ namespace oglcanvas
 
             const sal_uInt32 nPts=rPolygon.count();
             const sal_uInt32 nExtPts=nPts + int(rPolygon.isClosed());
-            std::vector<glm::vec2> vertices;
-            vertices.reserve(nExtPts);
-            for( sal_uInt32 j=0; j<nExtPts; j++ )
-            {
-                const ::basegfx::B2DPoint& rPt( rPolygon.getB2DPoint( j % nPts 
) );
-                vertices.push_back(glm::vec2(rPt.getX(),rPt.getY()));
-            }
             if(nExtPts>0)
+            {
+                std::vector<glm::vec2> vertices;
+                vertices.reserve(nExtPts);
+                for( sal_uInt32 j=0; j<nExtPts; j++ )
+                {
+                    const ::basegfx::B2DPoint& rPt( rPolygon.getB2DPoint( j % 
nPts ) );
+                    vertices.push_back(glm::vec2(rPt.getX(),rPt.getY()));
+                }
                 renderHelper->renderVertexConstColor(vertices, color, 
GL_LINE_STRIP);
+            }
         }
 
     }
commit 9e8905c0fc176cbff56bb763218c1796f1595aed
Author: Michael Jaumann <meta_...@yahoo.com>
Date:   Fri Nov 28 12:38:48 2014 +0000

    bind lcl_drawPolyPolygon
    
    Change-Id: I7926fd3c68d497f92093a284f415e773904f7e9b

diff --git a/canvas/source/opengl/ogl_canvashelper.cxx 
b/canvas/source/opengl/ogl_canvashelper.cxx
index 7a8e47c..0d5b087 100644
--- a/canvas/source/opengl/ogl_canvashelper.cxx
+++ b/canvas/source/opengl/ogl_canvashelper.cxx
@@ -532,7 +532,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.
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to