[Libreoffice-commits] core.git: Branch 'feature/opengl-canvas-rework' - 8 commits - canvas/opengl canvas/source

Michael Jaumann meta_dev at yahoo.com
Tue Nov 25 06:47:21 PST 2014


 canvas/opengl/simpleVertexShader.glsl           |    5 -
 canvas/opengl/texVertexShader.glsl              |    5 -
 canvas/opengl/textManipulatingVertexShader.glsl |    3 
 canvas/source/opengl/ogl_canvascustomsprite.cxx |   48 +++++++------
 canvas/source/opengl/ogl_canvashelper.cxx       |   85 ++++++++++++------------
 canvas/source/opengl/ogl_canvastools.cxx        |   39 +++--------
 canvas/source/opengl/ogl_canvastools.hxx        |    2 
 canvas/source/opengl/ogl_renderHelper.cxx       |   66 ++++++++++--------
 canvas/source/opengl/ogl_renderHelper.hxx       |   29 +++++---
 canvas/source/opengl/ogl_spritedevicehelper.cxx |   67 +++++++++---------
 canvas/source/opengl/ogl_spritedevicehelper.hxx |    3 
 11 files changed, 182 insertions(+), 170 deletions(-)

New commits:
commit de9b174dede3bcb0575d42f134f6f112d507abc7
Author: Michael Jaumann <meta_dev at yahoo.com>
Date:   Tue Nov 25 14:45:08 2014 +0000

    compute gl_position in one line instead of two
    
    Change-Id: Id250c0092d533bf23de867ef7dfc51666fa4c1fd

diff --git a/canvas/opengl/simpleVertexShader.glsl b/canvas/opengl/simpleVertexShader.glsl
index 0aa110f..af3e9cc 100644
--- a/canvas/opengl/simpleVertexShader.glsl
+++ b/canvas/opengl/simpleVertexShader.glsl
@@ -12,9 +12,8 @@ varying vec2 textCoords;
 uniform mat4 MVP;
 
 void main(void)
-{
-    vec4 v =  vec4(vPosition,1,1);	
-    gl_Position = MVP * v;
+{	
+    gl_Position = MVP * vec4(vPosition,1,1);
     textCoords = UV;
 }
 
diff --git a/canvas/opengl/texVertexShader.glsl b/canvas/opengl/texVertexShader.glsl
index aadf0de..cce2420 100644
--- a/canvas/opengl/texVertexShader.glsl
+++ b/canvas/opengl/texVertexShader.glsl
@@ -8,14 +8,13 @@
  */
 
 #version 120
-
+	
 attribute vec2 vPosition;
 uniform mat4 MVP;
 
 void main(void)
 {
-     vec4 v =  vec4(vPosition,1,1);	
-     gl_Position = MVP * v;
+     gl_Position = MVP * vec4(vPosition,1,1);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/canvas/opengl/textManipulatingVertexShader.glsl b/canvas/opengl/textManipulatingVertexShader.glsl
index 172fc18..1637ff7 100644
--- a/canvas/opengl/textManipulatingVertexShader.glsl
+++ b/canvas/opengl/textManipulatingVertexShader.glsl
@@ -16,8 +16,7 @@ uniform mat4 MVP;
 
 void main(void)
 {
-     vec4 v =  vec4(vPosition,1,1);	
-     gl_Position = MVP * v;
+     gl_Position = MVP * vec4(vPosition,1,1);
      textCoords = vPosition/texCord;
 }
 
commit 0513a38ad267a57fee69fcef7a8099e23e9b3894
Author: Michael Jaumann <meta_dev at yahoo.com>
Date:   Tue Nov 25 14:11:29 2014 +0000

    use const refs and vectors instead of arrays
    
    Change-Id: Ie853e719528ef7f6f72935c8749a5cb8e97c3153

diff --git a/canvas/source/opengl/ogl_canvascustomsprite.cxx b/canvas/source/opengl/ogl_canvascustomsprite.cxx
index 6073e5a..9962eb4 100644
--- a/canvas/source/opengl/ogl_canvascustomsprite.cxx
+++ b/canvas/source/opengl/ogl_canvascustomsprite.cxx
@@ -161,7 +161,8 @@ namespace oglcanvas
                         maTransformation.m02, maTransformation.m12, 0, 1
                     );
 
-                pRenderHelper->SetModelAndMVP(translate * aGLTransform);
+                //pRenderHelper->SetModelAndMVP(translate * aGLTransform);
+                pRenderHelper->SetModelAndMVP( 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
@@ -200,12 +201,12 @@ namespace oglcanvas
                                 aSpriteSizePixel.x,
                                 aSpriteSizePixel.y)));
 
-                    GLfloat vertices[rTriangulatedPolygon.count()*2];
+                    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[i*2]= rPt.getX();
-                        vertices[i*2+1]= rPt.getY();
+                        vertices.push_back(glm::vec2(rPt.getX(), rPt.getY()));
                     }
                     pRenderHelper->renderVertexTex( vertices, fWidth, fHeight,  color, GL_TRIANGLES);
                 }
@@ -214,14 +215,19 @@ namespace oglcanvas
                     const double fWidth=maSize.Width/aSpriteSizePixel.x;
                     const double fHeight=maSize.Height/aSpriteSizePixel.y;
 
-                    GLfloat vertices[] = {0, 0,
-                                          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 };
+                    std::vector<glm::vec2> vertices;
+                    vertices.reserve(4);
+                    vertices.push_back(glm::vec2(0, 0));
+                    vertices.push_back(glm::vec2(0, (float) aSpriteSizePixel.y));
+                    vertices.push_back(glm::vec2((float) aSpriteSizePixel.x, 0));
+                    vertices.push_back(glm::vec2((float) aSpriteSizePixel.x, (float) aSpriteSizePixel.y));
+
+                    std::vector<glm::vec2> uvCoordinates;
+                    uvCoordinates.reserve(4);
+                    uvCoordinates.push_back(glm::vec2(0, 0));
+                    uvCoordinates.push_back(glm::vec2(0, (float) fHeight));
+                    uvCoordinates.push_back(glm::vec2((float) fWidth, 0));
+                    uvCoordinates.push_back(glm::vec2((float) fWidth, (float) fHeight));
 
                     pRenderHelper->renderVertexUVTex(vertices,  uvCoordinates, color, GL_TRIANGLE_STRIP );
                 }
@@ -230,23 +236,25 @@ namespace oglcanvas
 
             }
 
-        // translate sprite to output position
-        pRenderHelper->SetModelAndMVP(translate);
-        GLfloat vertices[] = {-2, -2,
-                              -2, (float) maSize.Height+4,
-                              (float) maSize.Width+4, (float) maSize.Height+4,
-                              (float) maSize.Width+4, -2,
-                              -2, -2,
-                              (float) maSize.Width+4, (float) maSize.Height+4 };
+        std::vector<glm::vec2> vertices;
+        vertices.reserve(6);
+        vertices.push_back(glm::vec2(-2, -2));
+        vertices.push_back(glm::vec2(-2, (float) maSize.Height+4));
+        vertices.push_back(glm::vec2((float) maSize.Width+4, (float) maSize.Height+4));
+        vertices.push_back(glm::vec2((float) maSize.Width+4, -2));
+        vertices.push_back(glm::vec2(-2, -2));
+        vertices.push_back(glm::vec2((float) maSize.Width+4, (float) maSize.Height+4));
 
         pRenderHelper->renderVertexConstColor(vertices, glm::vec4(1, 0, 0, 1), GL_LINE_STRIP);
 
+#ifdef DEBUG_RENDERING
         std::vector<double> aVec;
         aVec.push_back(mfAlpha);
         aVec.push_back(mfPriority);
         aVec.push_back(maCanvasHelper.getRecordedActionCount());
 
         renderOSD( aVec, 10, pRenderHelper);
+#endif
 
         return true;
     }
diff --git a/canvas/source/opengl/ogl_canvashelper.cxx b/canvas/source/opengl/ogl_canvashelper.cxx
index 74e2ee8..7d25491 100644
--- a/canvas/source/opengl/ogl_canvashelper.cxx
+++ b/canvas/source/opengl/ogl_canvashelper.cxx
@@ -101,12 +101,14 @@ namespace oglcanvas
                             const geometry::RealPoint2D&     rPoint)
         {
             RenderHelper* pRenderHelper = rHelper.getDeviceHelper()->getRenderHelper();
-            pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, eDstBlend));
+            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};
+            std::vector<glm::vec2> vertices;
+            vertices.reserve(1);
+            vertices.push_back(glm::vec2((float) rPoint.X, (float) rPoint.Y));
             pRenderHelper->renderVertexConstColor(vertices, color, GL_POINTS);
             return true;
         }
@@ -120,13 +122,16 @@ namespace oglcanvas
                            const geometry::RealPoint2D&     rEndPoint)
         {
             RenderHelper* pRenderHelper = rHelper.getDeviceHelper()->getRenderHelper();
-            pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, eDstBlend));
+            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 };
+
+            std::vector<glm::vec2> vertices;
+            vertices.reserve(2);
+            vertices.push_back(glm::vec2((float) rStartPoint.X, (float) rStartPoint.Y));
+            vertices.push_back(glm::vec2((float) rEndPoint.X, (float) rEndPoint.Y));
             pRenderHelper->renderVertexConstColor(vertices, color, GL_LINES);
             return true;
         }
@@ -139,7 +144,7 @@ namespace oglcanvas
                                   const ::basegfx::B2DPolyPolygonVector& rPolyPolygons)
         {
             RenderHelper* pRenderHelper = rHelper.getDeviceHelper()->getRenderHelper();
-            pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, eDstBlend));
+            setupState(rTransform, eSrcBlend, eDstBlend);
             glm::vec4 color  = glm::vec4( (float) rColor.Red,
                                 (float) rColor.Green,
                                 (float) rColor.Blue,
@@ -278,7 +283,7 @@ namespace oglcanvas
         {
 
             RenderHelper* pRenderHelper = rHelper.getDeviceHelper()->getRenderHelper();
-            pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, eDstBlend));
+            setupState(rTransform, eSrcBlend, eDstBlend);
 
             const unsigned int nTexId=rHelper.getDeviceHelper()->getTextureCache().getTexture(
                 rPixelSize, rPixelData.getConstArray(), nPixelCrc32);
@@ -297,14 +302,20 @@ namespace oglcanvas
 
             // blend against fixed vertex color; texture alpha is multiplied in
             glm::vec4 color  = glm::vec4(1, 1, 1, 1);
-            GLfloat vertices[] = {0, 0,
-                                  0, (float) rPixelSize.Height,
-                                  (float) rPixelSize.Width, 0,
-                                  (float) rPixelSize.Width, (float) rPixelSize.Height };
-            GLfloat uvCoordinates[] = {0, 0,
-                                       0, 1,
-                                       1, 0,
-                                       1, 1 };
+
+            std::vector<glm::vec2> vertices;
+            vertices.reserve(4);
+            vertices.push_back(glm::vec2(0, 0));
+            vertices.push_back(glm::vec2(0, (float) rPixelSize.Height));
+            vertices.push_back(glm::vec2((float) rPixelSize.Width, 0));
+            vertices.push_back(glm::vec2((float) rPixelSize.Width, (float) rPixelSize.Height));
+
+            std::vector<glm::vec2> uvCoordinates;
+            uvCoordinates.reserve(4);
+            uvCoordinates.push_back(glm::vec2(0, 0));
+            uvCoordinates.push_back(glm::vec2(0, 1));
+            uvCoordinates.push_back(glm::vec2(1, 0));
+            uvCoordinates.push_back(glm::vec2(1, 1));
             pRenderHelper->renderVertexUVTex(vertices, uvCoordinates, color, GL_TRIANGLE_STRIP );
 
             glBindTexture(GL_TEXTURE_2D, 0);
diff --git a/canvas/source/opengl/ogl_renderHelper.cxx b/canvas/source/opengl/ogl_renderHelper.cxx
index acd0a17..70f1769 100644
--- a/canvas/source/opengl/ogl_renderHelper.cxx
+++ b/canvas/source/opengl/ogl_renderHelper.cxx
@@ -10,13 +10,13 @@
 #include <GL/glew.h>
 #include "ogl_renderHelper.hxx"
 #include <vcl/opengl/OpenGLHelper.hxx>
+#include <vcl/opengl/GLMHelper.hxx>
 namespace oglcanvas
 {
-    RenderHelper::RenderHelper()
-    : m_iWidth(1600) //Why this dimensions?
-    , m_iHeight(900) //Whole window, see spritedevicehelper
-    , m_Model(glm::mat4(1.0f))
+    RenderHelper::RenderHelper():
+        m_Model(glm::mat4(1.0f))
     {
+
     }
     void RenderHelper::InitOpenGL()
     {
@@ -29,7 +29,7 @@ namespace oglcanvas
         m_simpleTexUnf = glGetUniformLocation(m_simpleProgID, "TextTex");
 
         m_manCordUnf = glGetUniformLocation(m_texManProgID, "texCord");
-        m_texColorUnf = glGetUniformLocation(m_texProgID, "constColor");
+        m_texColorUnf = glGetUniformLocation(m_texProgID, "constantColor");
 
         m_manColorUnf = glGetUniformLocation(m_texManProgID,"colorTex");
         m_simpleColorUnf = glGetUniformLocation(m_simpleProgID,"colorTex");
@@ -45,29 +45,24 @@ namespace oglcanvas
         m_simplePosAttrb = glGetAttribLocation(m_simpleProgID ,"vPosition");
         m_texPosAttrb = glGetAttribLocation(m_texProgID ,"vPosition");
 
-        //glViewport(0, 0, m_iWidth, m_iHeight);
     }
-    //Todo figgure out, which parameters i should use :)
-    void RenderHelper::SetVP(int width, int height)
+
+    void RenderHelper::SetVP(const float width, const float height)
     {
-        m_Projection = glm::ortho(0.f, float(m_iWidth), 0.f, float(m_iHeight), -4.f, 3.f);
-        m_Projection = m_Projection * glm::scale(glm::vec3((float)width / m_iWidth, -(float)height / m_iHeight, 1.0f));
+        m_VP = glm::ortho(0.0f, width, 0.0f, height);
 
-        m_View       = glm::lookAt(glm::vec3(0,m_iHeight,1),
-                                   glm::vec3(0,m_iHeight,0),
-                                   glm::vec3(0,1,0) );
     }
-    void RenderHelper::SetModelAndMVP(glm::mat4 mat)
+
+    void RenderHelper::SetModelAndMVP(const glm::mat4& mat)
     {
         m_Model = mat;
-        m_MVP = m_Projection * m_View * m_Model;
+        m_MVP = m_Model * m_VP;
     }
 
-
-    void RenderHelper::renderVertexConstColor(GLfloat vertices[], glm::vec4 color, GLenum mode) const
+    void RenderHelper::renderVertexConstColor(const std::vector<glm::vec2>& rVertices, glm::vec4 color, GLenum mode) const
     {
         glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
-        glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
+        glBufferData(GL_ARRAY_BUFFER, rVertices.size()*2, &rVertices[0].x, GL_STATIC_DRAW);
 
         glUseProgram(m_texProgID);
 
@@ -85,7 +80,7 @@ namespace oglcanvas
                         (void*)0                      // array buffer offset
         );
 
-        glDrawArrays(mode, 0, sizeof(vertices) / 2);
+        glDrawArrays(mode, 0, rVertices.size());
 
         glDisableVertexAttribArray(m_texPosAttrb);
         glBindBuffer(GL_ARRAY_BUFFER, 0);
@@ -93,13 +88,13 @@ namespace oglcanvas
 
     }
     //Renders a TriangleStrip, Texture has to be stored in TextureUnit0
-    void RenderHelper::renderVertexUVTex(GLfloat vertices[], GLfloat uvCoordinates[], glm::vec4 color, GLenum mode) const
+    void RenderHelper::renderVertexUVTex(const std::vector<glm::vec2>& rVertices, const std::vector<glm::vec2>& rUVcoords, glm::vec4 color, GLenum mode) const
     {
         glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
-        glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
+        glBufferData(GL_ARRAY_BUFFER, rVertices.size()*2, &rVertices[0].x, GL_STATIC_DRAW);
 
         glBindBuffer(GL_ARRAY_BUFFER, m_uvBuffer);
-        glBufferData(GL_ARRAY_BUFFER, sizeof(uvCoordinates), uvCoordinates, GL_STATIC_DRAW);
+        glBufferData(GL_ARRAY_BUFFER, rUVcoords.size()*2, &rUVcoords[0].x, GL_STATIC_DRAW);
 
         glUseProgram(m_simpleProgID);
 
@@ -130,7 +125,7 @@ namespace oglcanvas
             (void*)0                      // array buffer offset
         );
 
-        glDrawArrays(mode, 0, sizeof(vertices) / 2);
+        glDrawArrays(mode, 0, rVertices.size());
 
         glDisableVertexAttribArray(m_simplePosAttrb);
         glDisableVertexAttribArray(m_simpleUvAttrb);
@@ -150,10 +145,10 @@ namespace oglcanvas
 
     // Renders a Polygon, Texture has to be stored in TextureUnit0
     // Uses fWidth,fHeight to generate texture coordinates in vertex-shader.
-    void RenderHelper::renderVertexTex(GLfloat vertices[], GLfloat fWidth, GLfloat fHeight, glm::vec4 color, GLenum mode) const
+    void RenderHelper::renderVertexTex(const std::vector<glm::vec2>& rVertices, GLfloat fWidth, GLfloat fHeight, glm::vec4 color, GLenum mode) const
     {
         glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
-        glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
+        glBufferData(GL_ARRAY_BUFFER, rVertices.size()*2, &rVertices[0].x, GL_STATIC_DRAW);
 
         glUseProgram(m_texManProgID);
 
@@ -174,7 +169,7 @@ namespace oglcanvas
             (void*)0                      // array buffer offset
         );
 
-        glDrawArrays(mode, 0, sizeof(vertices) / 2);
+        glDrawArrays(mode, 0, rVertices.size());
 
         glDisableVertexAttribArray(m_manPosAttrb);
         glBindBuffer(GL_ARRAY_BUFFER, 0);
diff --git a/canvas/source/opengl/ogl_renderHelper.hxx b/canvas/source/opengl/ogl_renderHelper.hxx
index 803e198..504df4f 100644
--- a/canvas/source/opengl/ogl_renderHelper.hxx
+++ b/canvas/source/opengl/ogl_renderHelper.hxx
@@ -12,20 +12,21 @@
 #include <GL/glew.h>
 #include <glm/glm.hpp>
 #include "glm/gtx/transform.hpp"
+#include <vector>
 namespace oglcanvas
 {
     class RenderHelper
     {
     public:
 
-        void renderVertexConstColor(GLfloat vertices[], glm::vec4 color, GLenum mode) const;
-        void renderVertexUVTex(GLfloat vertices[], GLfloat uvCoordinates[], glm::vec4 color, GLenum mode) const;
-        void renderVertexTex(GLfloat vertices[], GLfloat, GLfloat, glm::vec4 color, GLenum mode) const;
+        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;
 
         RenderHelper();
 
-        void SetVP(int width, int height);
-        void SetModelAndMVP(glm::mat4 mat);
+        void SetVP(const float width, const float height);
+        void SetModelAndMVP(const glm::mat4& mat);
         void dispose();
         void  InitOpenGL();
 
@@ -59,10 +60,7 @@ namespace oglcanvas
         int                                               m_iWidth;
         int                                               m_iHeight;
 
-        // Projection matrix : default 45 degree Field of View, 4:3 ratio, display range : 0.1 unit <-> 100 units
-        glm::mat4                                         m_Projection;
-        // Camera matrix
-        glm::mat4                                         m_View;
+        glm::mat4                                         m_VP;
         // Model matrix : an identity matrix (model will be at the origin
         glm::mat4                                         m_Model;
         // Our ModelViewProjection : multiplication of our 3 matrices
diff --git a/canvas/source/opengl/ogl_spritedevicehelper.cxx b/canvas/source/opengl/ogl_spritedevicehelper.cxx
index 63eeef3..0d171d6 100644
--- a/canvas/source/opengl/ogl_spritedevicehelper.cxx
+++ b/canvas/source/opengl/ogl_spritedevicehelper.cxx
@@ -300,6 +300,17 @@ namespace oglcanvas
         SystemChildWindow* pChildWindow = mpContext->getChildWindow();
         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();
 
@@ -318,33 +329,21 @@ namespace oglcanvas
 
 
         // frame counter, other info
-        glMatrixMode(GL_MODELVIEW);
-        glLoadIdentity();
-        glTranslated(-1.0, 1.0, 0.0);
-        glScaled( 2.0  / rOutputSize.Width(),
-                  -2.0 / rOutputSize.Height(),
-                  1.0 );
-
         const double denominator( maLastUpdate.getElapsedTime() );
         maLastUpdate.reset();
 
         const double fps(denominator == 0.0 ? 100.0 : 1.0/denominator);
+
+        mRenderHelper.SetModelAndMVP(ViewScaled);
+
+#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());
-
-        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);
         renderOSD( aVec, 20 , getRenderHelper());
+#endif
 
         /*
          * TODO: moggi: fix it!
@@ -404,6 +403,7 @@ namespace oglcanvas
             SystemChildWindow* pChildWindow = mpContext->getChildWindow();
             pChildWindow->setPosSizePixel(
                 0,0,rBounds.Width,rBounds.Height);
+            mRenderHelper.SetVP(rBounds.Width, rBounds.Height);
         }
     }
 
commit 958574962ee8e575d5d6a95cb328545d12bfda3d
Author: Michael Jaumann <meta_dev at yahoo.com>
Date:   Mon Nov 24 13:40:08 2014 +0000

    renderComplexPolyPolygon -> openGl 2.1
    
    Change-Id: If173ab655526c86069ce770a725faa54f6856b31

diff --git a/canvas/source/opengl/ogl_canvashelper.cxx b/canvas/source/opengl/ogl_canvashelper.cxx
index 6c30e90..74e2ee8 100644
--- a/canvas/source/opengl/ogl_canvashelper.cxx
+++ b/canvas/source/opengl/ogl_canvashelper.cxx
@@ -165,14 +165,16 @@ namespace oglcanvas
             //no texture bind ?
             RenderHelper* pRenderHelper = rHelper.getDeviceHelper()->getRenderHelper();
             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 )
             {
-                glBegin(GL_TRIANGLES);
-                renderComplexPolyPolygon(*aCurr++);
-                glEnd();
+                renderPolyPolygon(*aCurr++, pRenderHelper, color);
             }
 
             return true;
@@ -188,6 +190,10 @@ namespace oglcanvas
         {
             RenderHelper* pRenderHelper = rHelper.getDeviceHelper()->getRenderHelper();
             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);
 
             // convert to weird canvas textur coordinate system (not
             // [0,1]^2, but path coordinate system)
@@ -240,14 +246,10 @@ namespace oglcanvas
             aCurr=rPolyPolygons.begin();
             while( aCurr != aEnd )
             {
-                glBegin(GL_TRIANGLES);
-                renderComplexPolyPolygon(*aCurr++);
-                glEnd();
+                renderComplexPolyPolygon(*aCurr++, pRenderHelper, color);
             }
 
             glUseProgram(0);
-            glLoadIdentity();
-            glMatrixMode(GL_MODELVIEW);
 
             return true;
         }
@@ -321,7 +323,12 @@ namespace oglcanvas
                                           const ::basegfx::B2DPolyPolygonVector& rPolyPolygons )
         {
          //   setupState(rTransform, eSrcBlend, eDstBlend, rendering::ARGBColor());
+            RenderHelper* pRenderHelper = rHelper.getDeviceHelper()->getRenderHelper();
             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);
 
             const unsigned int nTexId=rHelper.getDeviceHelper()->getTextureCache().getTexture(
                 rPixelSize, rPixelData.getConstArray(), nPixelCrc32);
@@ -363,9 +370,7 @@ namespace oglcanvas
             aCurr=rPolyPolygons.begin();
             while( aCurr != aEnd )
             {
-                glBegin(GL_TRIANGLES);
-                renderComplexPolyPolygon(*aCurr++);
-                glEnd();
+                renderComplexPolyPolygon(*aCurr++, pRenderHelper, color);
             }
 
 
diff --git a/canvas/source/opengl/ogl_canvastools.cxx b/canvas/source/opengl/ogl_canvastools.cxx
index dc751b9..833c9eb 100644
--- a/canvas/source/opengl/ogl_canvastools.cxx
+++ b/canvas/source/opengl/ogl_canvastools.cxx
@@ -17,7 +17,7 @@
 #include <basegfx/polygon/b2dpolypolygon.hxx>
 #include <basegfx/polygon/b2dpolygontriangulator.hxx>
 #include <basegfx/polygon/b2dpolypolygontools.hxx>
-
+#include <vector>
 #include <com/sun/star/rendering/ARGBColor.hpp>
 
 #include <GL/glew.h>
@@ -30,7 +30,7 @@ namespace oglcanvas
 {
     /// triangulates polygon before
     //move to canvashelper, or take renderHelper as parameter?
-    void renderComplexPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly )
+    void renderComplexPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly, RenderHelper *renderHelper, glm::vec4 color )
     {
         ::basegfx::B2DPolyPolygon aPolyPoly(rPolyPoly);
         if( aPolyPoly.areControlPointsUsed() )
@@ -40,14 +40,14 @@ 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++ )
         {
             const ::basegfx::B2DPoint& rPt( rTriangulatedPolygon.getB2DPoint(i) );
-            const double s(rPt.getX()/nWidth);
-            const double t(rPt.getY()/nHeight);
-            glTexCoord2f(s,t); glVertex2d(rPt.getX(), rPt.getY());
+            vertices.push_back(glm::vec2(rPt.getX(),rPt.getY()));
         }
+        renderHelper->renderVertexTex( vertices, nWidth, nHeight,  color, GL_TRIANGLES);
     }
 
     /** only use this for line polygons.
@@ -67,30 +67,14 @@ namespace oglcanvas
 
             const sal_uInt32 nPts=rPolygon.count();
             const sal_uInt32 nExtPts=nPts + int(rPolygon.isClosed());
-            GLfloat vertices[nExtPts*2];
+            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[j*2] = rPt.getX();
-                vertices[j*2+1] = rPt.getY();
+                vertices.push_back(glm::vec2(rPt.getX(),rPt.getY()));
             }
             renderHelper->renderVertexConstColor(vertices, color, GL_LINE_STRIP);
-            /*
-            glBegin(GL_LINE_STRIP);
-
-            const ::basegfx::B2DPolygon& rPolygon( aPolyPoly.getB2DPolygon(i) );
-
-            const sal_uInt32 nPts=rPolygon.count();
-            const sal_uInt32 nExtPts=nPts + int(rPolygon.isClosed());
-            for( sal_uInt32 j=0; j<nExtPts; j++ )
-            {
-                const ::basegfx::B2DPoint& rPt( rPolygon.getB2DPoint( j % nPts ) );
-                glVertex2d(rPt.getX(), rPt.getY());
-            }
-
-            glEnd();
-            */
-
         }
 
     }
@@ -106,7 +90,6 @@ namespace oglcanvas
                 0,                   0,                   1, 0,
                 (float) rTransform.get(0,2), (float) rTransform.get(1,2), 0, 1
             };
-
         glEnable(GL_BLEND);
         glBlendFunc(eSrcBlend, eDstBlend);
         return glm::make_mat4(aGLTransform);
@@ -131,8 +114,8 @@ namespace oglcanvas
 
             aTmp=aTmp*aScaleShear;
             aPoly.transform(aTmp);
-            glColor4f(0,1,0,1);
-            glm::vec4 color  = glm::vec4(1, 0, 0, 1);
+            // glColor4f(0,1,0,1);
+            glm::vec4 color  = glm::vec4(0.5, 0, 0, 0.5);
             renderPolyPolygon(aPoly, renderHelper, color);
         }
     }
diff --git a/canvas/source/opengl/ogl_canvastools.hxx b/canvas/source/opengl/ogl_canvastools.hxx
index 1f6679d..904b7f6 100644
--- a/canvas/source/opengl/ogl_canvastools.hxx
+++ b/canvas/source/opengl/ogl_canvastools.hxx
@@ -25,7 +25,7 @@ namespace basegfx {
 
 namespace oglcanvas
 {
-        void renderComplexPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly );
+        void renderComplexPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly, RenderHelper *renderHelper, glm::vec4 color);
         void renderPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly, RenderHelper *renderHelper, glm::vec4 color );
         glm::mat4 setupState( const ::basegfx::B2DHomMatrix&                rTransform,
                          unsigned int                                  eSrcBlend,
commit cb680e9f37ff03e34fc4473414308f22c7ea02b3
Author: Michael Jaumann <meta_dev at yahoo.com>
Date:   Mon Nov 24 13:15:30 2014 +0000

    remove glMatrixStack from ogl_canvas
    
    Change-Id: I00fc5ab54fea444d03e5050e0c80b51180028ee4

diff --git a/canvas/source/opengl/ogl_canvashelper.cxx b/canvas/source/opengl/ogl_canvashelper.cxx
index cd9823d..6c30e90 100644
--- a/canvas/source/opengl/ogl_canvashelper.cxx
+++ b/canvas/source/opengl/ogl_canvashelper.cxx
@@ -155,7 +155,7 @@ namespace oglcanvas
             return true;
         }
 
-        bool lcl_fillPolyPolygon( const CanvasHelper&                    /*rHelper*/,
+        bool lcl_fillPolyPolygon( const CanvasHelper&                    rHelper,
                                   const ::basegfx::B2DHomMatrix&         rTransform,
                                   GLenum                                 eSrcBlend,
                                   GLenum                                 eDstBlend,
@@ -163,7 +163,7 @@ namespace oglcanvas
                                   const ::basegfx::B2DPolyPolygonVector& rPolyPolygons )
         {
             //no texture bind ?
-            TransformationPreserver aPreserver;
+            RenderHelper* pRenderHelper = rHelper.getDeviceHelper()->getRenderHelper();
             setupState(rTransform, eSrcBlend, eDstBlend);
 
             ::basegfx::B2DPolyPolygonVector::const_iterator aCurr=rPolyPolygons.begin();
@@ -186,9 +186,7 @@ namespace oglcanvas
                                           const rendering::Texture&                      rTexture,
                                           const ::basegfx::B2DPolyPolygonVector&         rPolyPolygons )
         {
-          //not complete
-            TransformationPreserver aPreserver;
-          //  setupState(rTransform, eSrcBlend, eDstBlend, rendering::ARGBColor());
+            RenderHelper* pRenderHelper = rHelper.getDeviceHelper()->getRenderHelper();
             setupState(rTransform, eSrcBlend, eDstBlend);
 
             // convert to weird canvas textur coordinate system (not
@@ -261,7 +259,6 @@ namespace oglcanvas
                                 const rendering::ARGBColor&      rColor,
                                 const CanvasBitmap&              rBitmap )
         {
-            TransformationPreserver aPreserver;
             setupState(rTransform, eSrcBlend, eDstBlend);
 
             return rBitmap.renderRecordedActions();
@@ -323,7 +320,6 @@ namespace oglcanvas
                                           sal_uInt32                             nPixelCrc32,
                                           const ::basegfx::B2DPolyPolygonVector& rPolyPolygons )
         {
-            TransformationPreserver aPreserver;
          //   setupState(rTransform, eSrcBlend, eDstBlend, rendering::ARGBColor());
             setupState(rTransform, eSrcBlend, eDstBlend);
 
@@ -356,7 +352,6 @@ namespace oglcanvas
             aTextureTransform.scale(1/aBounds.getWidth(), 1/aBounds.getHeight());
             aTextureTransform.invert();
 
-            glMatrixMode(GL_TEXTURE);
             double aTexTransform[] =
                 {
                     aTextureTransform.get(0,0), aTextureTransform.get(1,0), 0, 0,
@@ -364,10 +359,6 @@ namespace oglcanvas
                     0,                          0,                          1, 0,
                     aTextureTransform.get(0,2), aTextureTransform.get(1,2), 0, 1
                 };
-            glLoadMatrixd(aTexTransform);
-
-            // blend against fixed vertex color; texture alpha is multiplied in
-            glColor4f(1,1,1,rTexture.Alpha);
 
             aCurr=rPolyPolygons.begin();
             while( aCurr != aEnd )
@@ -377,8 +368,6 @@ namespace oglcanvas
                 glEnd();
             }
 
-            glLoadIdentity();
-            glMatrixMode(GL_MODELVIEW);
 
             glBindTexture(GL_TEXTURE_2D, 0);
             glDisable(GL_TEXTURE_2D);
diff --git a/canvas/source/opengl/ogl_spritedevicehelper.cxx b/canvas/source/opengl/ogl_spritedevicehelper.cxx
index 9fe8380..63eeef3 100644
--- a/canvas/source/opengl/ogl_spritedevicehelper.cxx
+++ b/canvas/source/opengl/ogl_spritedevicehelper.cxx
@@ -39,9 +39,6 @@ static void initContext()
     // need the backside for mirror effects
     glDisable(GL_CULL_FACE);
 
-    // no perspective, we're 2D
-    glMatrixMode(GL_PROJECTION);
-    glLoadIdentity();
 
     // misc preferences
     glEnable(GL_POINT_SMOOTH);
@@ -60,13 +57,6 @@ static void initTransformation(const ::Size& rSize, bool bMirror=false)
                 (GLsizei)rSize.Width(),
                 (GLsizei)rSize.Height() );
     // model coordinate system is already in device pixel
-    glMatrixMode(GL_MODELVIEW);
-    glLoadIdentity();
-    glTranslated(-1.0, (bMirror ? -1.0 : 1.0), 0.0);
-    glScaled( 2.0  / rSize.Width(),
-              (bMirror ? 2.0 : -2.0) / rSize.Height(),
-              1.0 );
-
     // clear to black
     glClearColor(0,0,0,0);
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
@@ -109,7 +99,6 @@ namespace oglcanvas
         // init window context
         initContext();
         mRenderHelper.InitOpenGL();
-        mRenderHelper.SetVP(1200, 600);//is this right?
 
         mnLinearMultiColorGradientProgram =
             OpenGLHelper::LoadShaders("dummyVertexShader", "linearMultiColorGradientFragmentShader");
commit ce48b22c93163e54df01cc68e2fa966c36df1ed0
Author: Michael Jaumann <meta_dev at yahoo.com>
Date:   Fri Nov 21 19:41:28 2014 +0000

    cleanup oglContext
    
    use a scopedpointer to avoid undelet oglContext Childwindow.
    
    Change-Id: I850346ce3d9649038d678e37cf75ead72c4c6c7e

diff --git a/canvas/source/opengl/ogl_spritedevicehelper.cxx b/canvas/source/opengl/ogl_spritedevicehelper.cxx
index a2576c3..9fe8380 100644
--- a/canvas/source/opengl/ogl_spritedevicehelper.cxx
+++ b/canvas/source/opengl/ogl_spritedevicehelper.cxx
@@ -103,8 +103,9 @@ namespace oglcanvas
                 VCLUnoHelper::GetInterface(&rWindow),
                 uno::UNO_QUERY_THROW) );
 
-        maContext.requestLegacyContext();
-        maContext.init(&rWindow);
+        mpContext.reset(new OpenGLContext);
+        mpContext->requestLegacyContext();
+        mpContext->init(&rWindow);
         // init window context
         initContext();
         mRenderHelper.InitOpenGL();
@@ -128,7 +129,7 @@ namespace oglcanvas
         mnRectangularTwoColorGradientProgram =
             OpenGLHelper::LoadShaders("dummyVertexShader", "rectangularTwoColorGradientFragmentShader");
 
-        maContext.makeCurrent();
+        mpContext->makeCurrent();
 
         notifySizeUpdate(rViewArea);
         // TODO(E3): check for GL_ARB_imaging extension
@@ -141,7 +142,7 @@ namespace oglcanvas
         mpDevice = NULL;
         mpTextureCache.reset();
 
-        if( maContext.isInitialized() )
+        if( mpContext->isInitialized() )
         {
             glDeleteProgram( mnRectangularTwoColorGradientProgram );
             glDeleteProgram( mnRectangularMultiColorGradientProgram );
@@ -150,16 +151,17 @@ namespace oglcanvas
             glDeleteProgram( mnLinearTwoColorGradientProgram );
             glDeleteProgram( mnLinearMultiColorGradientProgram );
         }
+        mpContext.reset();
         mRenderHelper.dispose();
     }
 
     geometry::RealSize2D SpriteDeviceHelper::getPhysicalResolution()
     {
-        if( !maContext.isInitialized() )
+        if( !mpContext->isInitialized() )
             return ::canvas::tools::createInfiniteSize2D(); // we're disposed
 
         // Map a one-by-one millimeter box to pixel
-        SystemChildWindow* pChildWindow = maContext.getChildWindow();
+        SystemChildWindow* pChildWindow = mpContext->getChildWindow();
         const MapMode aOldMapMode( pChildWindow->GetMapMode() );
         pChildWindow->SetMapMode( MapMode(MAP_MM) );
         const Size aPixelSize( pChildWindow->LogicToPixel(Size(1,1)) );
@@ -170,11 +172,11 @@ namespace oglcanvas
 
     geometry::RealSize2D SpriteDeviceHelper::getPhysicalSize()
     {
-        if( !maContext.isInitialized() )
+        if( !mpContext->isInitialized() )
             return ::canvas::tools::createInfiniteSize2D(); // we're disposed
 
         // Map the pixel dimensions of the output window to millimeter
-        SystemChildWindow* pChildWindow = maContext.getChildWindow();
+        SystemChildWindow* pChildWindow = mpContext->getChildWindow();
         const MapMode aOldMapMode( pChildWindow->GetMapMode() );
         pChildWindow->SetMapMode( MapMode(MAP_MM) );
         const Size aLogSize( pChildWindow->PixelToLogic(pChildWindow->GetOutputSizePixel()) );
@@ -300,13 +302,13 @@ namespace oglcanvas
     bool SpriteDeviceHelper::showBuffer( bool bIsVisible, bool /*bUpdateAll*/ )
     {
         // hidden or disposed?
-        if( !bIsVisible || !maContext.isInitialized() || !mpSpriteCanvas )
+        if( !bIsVisible || !mpContext->isInitialized() || !mpSpriteCanvas )
             return false;
 
         if( !activateWindowContext() )
             return false;
 
-        SystemChildWindow* pChildWindow = maContext.getChildWindow();
+        SystemChildWindow* pChildWindow = mpContext->getChildWindow();
         const ::Size& rOutputSize = pChildWindow->GetSizePixel();
         initTransformation(rOutputSize);
         // render the actual spritecanvas content
@@ -343,6 +345,16 @@ namespace oglcanvas
         aVec.push_back(mpTextureCache->getCacheSize());
         aVec.push_back(mpTextureCache->getCacheMissCount());
         aVec.push_back(mpTextureCache->getCacheHitCount());
+
+        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);
         renderOSD( aVec, 20 , getRenderHelper());
 
         /*
@@ -355,7 +367,7 @@ namespace oglcanvas
         unx::glXWaitGL();
         XSync( reinterpret_cast<unx::Display*>(mpDisplay), false );
         */
-        maContext.swapBuffers();
+        mpContext->swapBuffers();
 
         // flush texture cache, such that it does not build up
         // indefinitely.
@@ -379,7 +391,7 @@ namespace oglcanvas
 
     uno::Any SpriteDeviceHelper::getDeviceHandle() const
     {
-        const SystemChildWindow* pChildWindow = maContext.getChildWindow();
+        const SystemChildWindow* pChildWindow = mpContext->getChildWindow();
         return uno::makeAny( reinterpret_cast< sal_Int64 >(pChildWindow) );
     }
 
@@ -398,9 +410,9 @@ namespace oglcanvas
 
     void SpriteDeviceHelper::notifySizeUpdate( const awt::Rectangle& rBounds )
     {
-        if( maContext.isInitialized() )
+        if( mpContext->isInitialized() )
         {
-            SystemChildWindow* pChildWindow = maContext.getChildWindow();
+            SystemChildWindow* pChildWindow = mpContext->getChildWindow();
             pChildWindow->setPosSizePixel(
                 0,0,rBounds.Width,rBounds.Height);
         }
@@ -535,7 +547,7 @@ namespace oglcanvas
 
     bool SpriteDeviceHelper::activateWindowContext()
     {
-        maContext.makeCurrent();
+        mpContext->makeCurrent();
         return true;
     }
 
diff --git a/canvas/source/opengl/ogl_spritedevicehelper.hxx b/canvas/source/opengl/ogl_spritedevicehelper.hxx
index 8bda43b..5e2cbca 100644
--- a/canvas/source/opengl/ogl_spritedevicehelper.hxx
+++ b/canvas/source/opengl/ogl_spritedevicehelper.hxx
@@ -17,6 +17,7 @@
 #include <com/sun/star/rendering/XGraphicDevice.hpp>
 #include <boost/utility.hpp>
 #include <boost/shared_ptr.hpp>
+#include <boost/scoped_ptr.hpp>
 
 #include "ogl_buffercontext.hxx"
 #include "ogl_renderHelper.hxx"
@@ -152,7 +153,7 @@ namespace oglcanvas
         unsigned int                                       mnRectangularTwoColorGradientProgram;
         unsigned int                                       mnRectangularMultiColorGradientProgram;
 
-        OpenGLContext maContext;
+        boost::scoped_ptr<OpenGLContext> mpContext;
         RenderHelper                                      mRenderHelper;
     };
 }
commit 79070b14731990b65d3d248f62b590b4891e922e
Author: Michael Jaumann <meta_dev at yahoo.com>
Date:   Thu Nov 20 15:11:19 2014 +0000

    feed glDrawArrays with right vertexcount
    
    Change-Id: I8aa835cc1b2f0f41d5c1051ae2a005928d625746

diff --git a/canvas/source/opengl/ogl_renderHelper.cxx b/canvas/source/opengl/ogl_renderHelper.cxx
index b192df2..acd0a17 100644
--- a/canvas/source/opengl/ogl_renderHelper.cxx
+++ b/canvas/source/opengl/ogl_renderHelper.cxx
@@ -29,7 +29,7 @@ namespace oglcanvas
         m_simpleTexUnf = glGetUniformLocation(m_simpleProgID, "TextTex");
 
         m_manCordUnf = glGetUniformLocation(m_texManProgID, "texCord");
-        m_texColorUnf = glGetUniformLocation(m_texProgID, "constantColor");
+        m_texColorUnf = glGetUniformLocation(m_texProgID, "constColor");
 
         m_manColorUnf = glGetUniformLocation(m_texManProgID,"colorTex");
         m_simpleColorUnf = glGetUniformLocation(m_simpleProgID,"colorTex");
@@ -45,7 +45,7 @@ namespace oglcanvas
         m_simplePosAttrb = glGetAttribLocation(m_simpleProgID ,"vPosition");
         m_texPosAttrb = glGetAttribLocation(m_texProgID ,"vPosition");
 
-        glViewport(0, 0, m_iWidth, m_iHeight);
+        //glViewport(0, 0, m_iWidth, m_iHeight);
     }
     //Todo figgure out, which parameters i should use :)
     void RenderHelper::SetVP(int width, int height)
@@ -62,6 +62,8 @@ namespace oglcanvas
         m_Model = mat;
         m_MVP = m_Projection * m_View * m_Model;
     }
+
+
     void RenderHelper::renderVertexConstColor(GLfloat vertices[], glm::vec4 color, GLenum mode) const
     {
         glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
@@ -69,7 +71,7 @@ namespace oglcanvas
 
         glUseProgram(m_texProgID);
 
-        glUniform4fv(m_texColorUnf, 1, glm::value_ptr(color));
+        glUniform4fv(m_texColorUnf, 1, &color[0]);
         glUniformMatrix4fv(m_texMVPUnf, 1, GL_FALSE, &m_MVP[0][0]);
         glEnableVertexAttribArray(m_texPosAttrb); //vertices
 
@@ -83,7 +85,7 @@ namespace oglcanvas
                         (void*)0                      // array buffer offset
         );
 
-        glDrawArrays(mode, 0, sizeof(vertices) / sizeof(vertices[0]) /2);
+        glDrawArrays(mode, 0, sizeof(vertices) / 2);
 
         glDisableVertexAttribArray(m_texPosAttrb);
         glBindBuffer(GL_ARRAY_BUFFER, 0);
@@ -102,7 +104,8 @@ namespace oglcanvas
         glUseProgram(m_simpleProgID);
 
         glUniform1i(m_simpleTexUnf, 0); //Use texture Unit 0
-        glUniform4fv(m_simpleColorUnf, 1, glm::value_ptr(color));
+
+        glUniform4fv(m_simpleColorUnf, 1, &color[0]);
         glUniformMatrix4fv(m_simpleMVPUnf, 1, GL_FALSE, &m_MVP[0][0]);
 
         glEnableVertexAttribArray(m_simplePosAttrb);
@@ -127,7 +130,7 @@ namespace oglcanvas
             (void*)0                      // array buffer offset
         );
 
-        glDrawArrays(mode, 0, sizeof(vertices) / sizeof(vertices[0]) /2);
+        glDrawArrays(mode, 0, sizeof(vertices) / 2);
 
         glDisableVertexAttribArray(m_simplePosAttrb);
         glDisableVertexAttribArray(m_simpleUvAttrb);
@@ -157,7 +160,7 @@ namespace oglcanvas
         //Set Uniforms
         glUniform1i(m_manTexUnf, 0);
         glUniform2f(m_manCordUnf,fWidth,fHeight);
-        glUniform4fv(m_manColorUnf, 1,  glm::value_ptr(color));
+        glUniform4fv(m_manColorUnf, 1, &color[0]);
         glUniformMatrix4fv(m_manMVPUnf, 1, GL_FALSE, &m_MVP[0][0]);
 
         glEnableVertexAttribArray(m_manPosAttrb);
@@ -171,7 +174,7 @@ namespace oglcanvas
             (void*)0                      // array buffer offset
         );
 
-        glDrawArrays(mode, 0, sizeof(vertices) / sizeof(vertices[0]) /2);
+        glDrawArrays(mode, 0, sizeof(vertices) / 2);
 
         glDisableVertexAttribArray(m_manPosAttrb);
         glBindBuffer(GL_ARRAY_BUFFER, 0);
diff --git a/canvas/source/opengl/ogl_renderHelper.hxx b/canvas/source/opengl/ogl_renderHelper.hxx
index 66d4e5e..803e198 100644
--- a/canvas/source/opengl/ogl_renderHelper.hxx
+++ b/canvas/source/opengl/ogl_renderHelper.hxx
@@ -12,7 +12,6 @@
 #include <GL/glew.h>
 #include <glm/glm.hpp>
 #include "glm/gtx/transform.hpp"
-#include <glm/gtc/type_ptr.hpp>
 namespace oglcanvas
 {
     class RenderHelper
commit 07cafcd76c532dd0214da94294631ee86fe82634
Author: Michael Jaumann <meta_dev at yahoo.com>
Date:   Wed Nov 19 13:17:21 2014 +0000

    added licence statement, vim modeline
    
    Change-Id: Ibc9dd608b9b49df17a13513f2c0b2ed2076b4b6c

diff --git a/canvas/source/opengl/ogl_renderHelper.cxx b/canvas/source/opengl/ogl_renderHelper.cxx
index 2c4fe6c..b192df2 100644
--- a/canvas/source/opengl/ogl_renderHelper.cxx
+++ b/canvas/source/opengl/ogl_renderHelper.cxx
@@ -1,3 +1,12 @@
+/* -*- 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/.
+ */
+
 #include <GL/glew.h>
 #include "ogl_renderHelper.hxx"
 #include <vcl/opengl/OpenGLHelper.hxx>
@@ -168,4 +177,6 @@ namespace oglcanvas
         glBindBuffer(GL_ARRAY_BUFFER, 0);
         glUseProgram(0);
     }
-}
\ No newline at end of file
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/canvas/source/opengl/ogl_renderHelper.hxx b/canvas/source/opengl/ogl_renderHelper.hxx
index 7c717a6..66d4e5e 100644
--- a/canvas/source/opengl/ogl_renderHelper.hxx
+++ b/canvas/source/opengl/ogl_renderHelper.hxx
@@ -1,3 +1,12 @@
+/* -*- 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/.
+ */
+
 #ifndef RENDER_HELPER
 #define RENDER_HELPER
 #include <GL/glew.h>
@@ -63,5 +72,6 @@ namespace oglcanvas
     };
 }
 
+#endif /* RENDER_HELPER */
 
-#endif /* RENDER_HELPER */
\ No newline at end of file
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 2744af98407f0419d0b4a0da6237c206bf5a2a2d
Author: Michael Jaumann <meta_dev at yahoo.com>
Date:   Wed Nov 19 10:30:43 2014 +0000

    renderVertexConstCol uses now MVP matrix
    
    Change-Id: I6f145984596c8d1b739a7dd561d1bffb35bb2957

diff --git a/canvas/source/opengl/ogl_renderHelper.cxx b/canvas/source/opengl/ogl_renderHelper.cxx
index 1d1379b..2c4fe6c 100644
--- a/canvas/source/opengl/ogl_renderHelper.cxx
+++ b/canvas/source/opengl/ogl_renderHelper.cxx
@@ -61,6 +61,7 @@ namespace oglcanvas
         glUseProgram(m_texProgID);
 
         glUniform4fv(m_texColorUnf, 1, glm::value_ptr(color));
+        glUniformMatrix4fv(m_texMVPUnf, 1, GL_FALSE, &m_MVP[0][0]);
         glEnableVertexAttribArray(m_texPosAttrb); //vertices
 
         glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);


More information about the Libreoffice-commits mailing list