canvas/Library_oglcanvas.mk                     |    1 
 canvas/source/opengl/ogl_canvascustomsprite.cxx |  127 +--------------------
 canvas/source/opengl/ogl_canvascustomsprite.hxx |   23 ---
 canvas/source/opengl/ogl_renderHelper.cxx       |  142 ++++++++++++++++++++++++
 canvas/source/opengl/ogl_renderHelper.hxx       |   35 +++++
 5 files changed, 189 insertions(+), 139 deletions(-)

New commits:
commit 5e7b0adfd78e8a636a4b8de809fc6ecbe8efe799
Author: Michael Jaumann <meta_...@yahoo.com>
Date:   Wed Oct 22 08:25:47 2014 +0000

    refactoring,shader input to renderHelper
    
    Change-Id: Ic695032e57374d1736004fa577cdc31d3e67a951

diff --git a/canvas/Library_oglcanvas.mk b/canvas/Library_oglcanvas.mk
index b5d3377..17edbb1 100644
--- a/canvas/Library_oglcanvas.mk
+++ b/canvas/Library_oglcanvas.mk
@@ -39,6 +39,7 @@ $(eval $(call gb_Library_add_exception_objects,oglcanvas,\
        canvas/source/opengl/ogl_spritedevicehelper \
        canvas/source/opengl/ogl_textlayout \
        canvas/source/opengl/ogl_texturecache \
+       canvas/source/opengl/ogl_renderHelper \
 ))
 
 $(eval $(call gb_Library_use_externals,oglcanvas,\
diff --git a/canvas/source/opengl/ogl_canvascustomsprite.cxx 
b/canvas/source/opengl/ogl_canvascustomsprite.cxx
index bf5f347..a9c127b 100644
--- a/canvas/source/opengl/ogl_canvascustomsprite.cxx
+++ b/canvas/source/opengl/ogl_canvascustomsprite.cxx
@@ -24,7 +24,6 @@
 #include <basegfx/polygon/b2dpolygonclipper.hxx>
 #include <basegfx/polygon/b2dpolygontriangulator.hxx>
 #include <basegfx/polygon/b2dpolypolygontools.hxx>
-#include <vcl/opengl/OpenGLHelper.hxx>
 #include <GL/glew.h>
 
 using namespace ::com::sun::star;
@@ -48,7 +47,7 @@ namespace oglcanvas
         ::canvas::tools::setIdentityAffineMatrix2D(maTransformation);
         maCanvasHelper.init( *rRefDevice.get(),
                              rDeviceHelper );
-        InitOpenGL();
+        mRenderHelper =  RenderHelper();
     }
 
     void CanvasCustomSprite::disposeThis()
@@ -56,11 +55,7 @@ namespace oglcanvas
         ::osl::MutexGuard aGuard( m_aMutex );
 
         mpSpriteCanvas.clear();
-        glDeleteBuffers(1, &m_vertexBuffer);
-        glDeleteBuffers(1, &m_uvBuffer);
-        glDeleteProgram( m_texManProgID);
-        glDeleteProgram( m_simpleProgID);
-        glDeleteProgram( m_texProgID);
+        mRenderHelper.dispose();
         // forward to parent
         CanvasCustomSpriteBaseT::disposeThis();
     }
@@ -131,27 +126,6 @@ namespace oglcanvas
         return this;
     }
 
-    void CanvasCustomSprite::InitOpenGL()
-    {
-        //Load Shaders //
-        m_texManProgID = 
OpenGLHelper::LoadShaders("textManipulatingVertexShader", "textFragmentShader");
-        m_simpleProgID = OpenGLHelper::LoadShaders("simpleVertexShader", 
"textFragmentShader");
-        m_texProgID = OpenGLHelper::LoadShaders("texVertrexShader", 
"constantFragmentShader");
-        // Get a handle for uniforms
-        m_manTexUnf = glGetUniformLocation(m_texManProgID, "TextTex");
-        m_simpleTexUnf = glGetUniformLocation(m_simpleProgID, "TextTex");
-        m_manCordUnf = glGetUniformLocation(m_texManProgID, "texCord");
-        m_texColorUnf = glGetUniformLocation(m_texProgID, "constantColor");
-        m_manColorUnf = glGetUniformLocation(m_texManProgID,"colorTex");
-        m_simpleColorUnf = glGetUniformLocation(m_simpleProgID,"colorTex");
-        //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_simplePosAttrb = glGetAttribLocation(m_simpleProgID ,"vPosition");
-        m_texPosAttrb = glGetAttribLocation(m_texProgID ,"vPosition");
-    }
 
     bool CanvasCustomSprite::renderSprite() const
     {
@@ -213,7 +187,8 @@ namespace oglcanvas
                 glBlendFunc(GL_SRC_ALPHA,
                             GL_ONE_MINUS_SRC_ALPHA);
 
-                // blend against fixed vertex color; texture alpha is 
multiplied in
+                GLfloat color[] = {1, 1, 1, (float)mfAlpha};
+
                 if( mxClip.is() )
                 {
                     const double fWidth=maSize.Width;
@@ -239,33 +214,7 @@ namespace oglcanvas
                         vertices[i*2]= rPt.getX();
                         vertices[i*2+1]= rPt.getY();
                     }
-
-                    //Bind Buffers
-                    glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
-                    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, 
GL_STATIC_DRAW);
-
-                    glUseProgram(m_texManProgID);
-
-                    //Set Uniforms
-                    glUniform1i(m_manTexUnf, 0);
-                    glUniform2f(m_manCordUnf,fWidth,fHeight);
-                    glUniform4f(m_manColorUnf, 1, 1, 1, mfAlpha);
-
-                    glEnableVertexAttribArray(m_manPosAttrb);
-                    glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
-                    glVertexAttribPointer(
-                        m_manPosAttrb,
-                        2,                            // size
-                        GL_FLOAT,                     // type
-                        GL_FALSE,                     // normalized?
-                        0,                            // stride
-                        (void*)0                      // array buffer offset
-                    );
-
-                    glDrawArrays(GL_TRIANGLES, 0, 
rTriangulatedPolygon.count());
-
-                    glDisableVertexAttribArray(m_manPosAttrb);
-                    glUseProgram(0);
+                    mRenderHelper.renderVertexTex( vertices, fWidth, fHeight,  
color, GL_TRIANGLES);
                 }
                 else
                 {
@@ -281,44 +230,7 @@ namespace oglcanvas
                                                (float) fWidth, 0,
                                                (float) fWidth, (float) fHeight 
};
 
-                    glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
-                    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, 
GL_STATIC_DRAW);
-
-                    glBindBuffer(GL_ARRAY_BUFFER, m_uvBuffer);
-                    glBufferData(GL_ARRAY_BUFFER, sizeof(uvCoordinates), 
uvCoordinates, GL_STATIC_DRAW);
-
-                    glUseProgram(m_simpleProgID);
-
-                    glUniform1i(m_simpleTexUnf, 0);
-                    glUniform4f(m_simpleColorUnf, 1, 1, 1, mfAlpha);
-
-                    glEnableVertexAttribArray(m_simplePosAttrb); //richtige ID 
herausfinden
-                    glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
-                    glVertexAttribPointer(
-                        m_simplePosAttrb,
-                        2,                            // size
-                        GL_FLOAT,                     // type
-                        GL_FALSE,                     // normalized?
-                        0,                            // stride
-                        (void*)0                      // array buffer offset
-                    );
-
-                    glEnableVertexAttribArray(m_simpleUvAttrb);
-                    glBindBuffer(GL_ARRAY_BUFFER, m_uvBuffer);
-                    glVertexAttribPointer(
-                        m_simpleUvAttrb,
-                        2,                            // size
-                        GL_FLOAT,                     // type
-                        GL_FALSE,                     // normalized?
-                        0,                            // stride
-                        (void*)0                      // array buffer offset
-                    );
-
-                    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-
-                    glDisableVertexAttribArray(m_simplePosAttrb);
-                    glDisableVertexAttribArray(m_simpleUvAttrb);
-                    glUseProgram(0);
+                    mRenderHelper.renderVertexUVTex(vertices,  uvCoordinates, 
color, GL_TRIANGLE_STRIP );
                 }
 
                 glBindTexture(GL_TEXTURE_2D, 0);
@@ -331,31 +243,9 @@ namespace oglcanvas
                               (float) maSize.Width+4, -2,
                               -2, -2,
                               (float) maSize.Width+4, (float) maSize.Height+4 
};
+        GLfloat color[] = {1, 0, 0, 1};
 
-        glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
-        glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, 
GL_STATIC_DRAW);
-
-        glUseProgram(m_texProgID);
-
-        glUniform4f(m_texColorUnf, 1, 0, 0, 1);
-        glEnableVertexAttribArray(m_texPosAttrb); //richtige ID herausfinden
-
-        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(GL_LINE_STRIP, 0, 6);
-
-        glDisableVertexAttribArray(m_texPosAttrb);
-        glUseProgram(0);
-        glBindBuffer(GL_ARRAY_BUFFER, 0);
-
+        mRenderHelper.renderVertexConstColor(vertices, color, GL_LINE_STRIP);
 
         std::vector<double> aVec;
         aVec.push_back(mfAlpha);
@@ -366,6 +256,7 @@ namespace oglcanvas
         return true;
     }
 
+
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/canvas/source/opengl/ogl_canvascustomsprite.hxx 
b/canvas/source/opengl/ogl_canvascustomsprite.hxx
index 46b59fe..b678f1a 100644
--- a/canvas/source/opengl/ogl_canvascustomsprite.hxx
+++ b/canvas/source/opengl/ogl_canvascustomsprite.hxx
@@ -26,6 +26,7 @@
 #include "ogl_spritecanvas.hxx"
 #include "ogl_canvashelper.hxx"
 #include <GL/glew.h>
+#include "ogl_renderHelper.hxx"
 
 namespace oglcanvas
 {
@@ -85,33 +86,13 @@ namespace oglcanvas
         */
         SpriteCanvasRef                              mpSpriteCanvas;
         const ::com::sun::star::geometry::RealSize2D maSize;
-        void  InitOpenGL();
         ::com::sun::star::uno::Reference<
             ::com::sun::star::rendering::XPolyPolygon2D > mxClip;
         ::com::sun::star::geometry::AffineMatrix2D        maTransformation;
         ::basegfx::B2DPoint                               maPosition;
         double                                            mfAlpha;
         double                                            mfPriority;
-
-        GLuint                                            m_vertexBuffer;
-        GLuint                                            m_uvBuffer;
-
-
-        GLuint                                            m_simpleProgID;
-        GLuint                                            m_simpleUvAttrb;
-        GLuint                                            m_simplePosAttrb;
-        GLuint                                            m_simpleTexUnf;
-        GLuint                                            m_simpleColorUnf;
-
-        GLuint                                            m_manTexUnf;
-        GLuint                                            m_manPosAttrb;
-        GLuint                                            m_manCordUnf;
-        GLuint                                            m_manColorUnf;
-
-        GLuint                                            m_texPosAttrb;
-        GLuint                                            m_texColorUnf;
-        GLuint                                            m_texManProgID;
-        GLuint                                            m_texProgID;
+        RenderHelper                                      mRenderHelper;
     };
 }
 
diff --git a/canvas/source/opengl/ogl_renderHelper.cxx 
b/canvas/source/opengl/ogl_renderHelper.cxx
new file mode 100644
index 0000000..c3d6a87
--- /dev/null
+++ b/canvas/source/opengl/ogl_renderHelper.cxx
@@ -0,0 +1,142 @@
+#include <GL/glew.h>
+#include "ogl_renderHelper.hxx"
+namespace oglcanvas
+{
+    RenderHelper::RenderHelper()
+    {
+        InitOpenGL();
+    }
+
+    void RenderHelper::InitOpenGL()
+    {
+        //Load Shaders //
+        m_texManProgID = 
OpenGLHelper::LoadShaders("textManipulatingVertexShader", "textFragmentShader");
+        m_simpleProgID = OpenGLHelper::LoadShaders("simpleVertexShader", 
"textFragmentShader");
+        m_texProgID = OpenGLHelper::LoadShaders("texVertrexShader", 
"constantFragmentShader");
+        // Get a handle for uniforms
+        m_manTexUnf = glGetUniformLocation(m_texManProgID, "TextTex");
+        m_simpleTexUnf = glGetUniformLocation(m_simpleProgID, "TextTex");
+        m_manCordUnf = glGetUniformLocation(m_texManProgID, "texCord");
+        m_texColorUnf = glGetUniformLocation(m_texProgID, "constantColor");
+        m_manColorUnf = glGetUniformLocation(m_texManProgID,"colorTex");
+        m_simpleColorUnf = glGetUniformLocation(m_simpleProgID,"colorTex");
+        //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_simplePosAttrb = glGetAttribLocation(m_simpleProgID ,"vPosition");
+        m_texPosAttrb = glGetAttribLocation(m_texProgID ,"vPosition");
+    }
+
+    void RenderHelper::renderVertexConstColor(GLfloat vertices[], GLfloat 
color[4], GLenum mode) const
+    {
+        glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
+        glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, 
GL_STATIC_DRAW);
+
+        glUseProgram(m_texProgID);
+
+        glUniform4f(m_texColorUnf,color[0], color[1], color[2], color[3]);
+        glEnableVertexAttribArray(m_texPosAttrb); //vertices
+
+        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, sizeof(vertices) / sizeof(vertices[0]) /2);
+
+        glDisableVertexAttribArray(m_texPosAttrb);
+        glUseProgram(0);
+        glBindBuffer(GL_ARRAY_BUFFER, 0);
+
+    }
+    //Renders a TriangleStrip, Texture has to be stored in TextureUnit0
+    void RenderHelper::renderVertexUVTex(GLfloat vertices[], GLfloat 
uvCoordinates[], GLfloat color[4], GLenum mode) const
+    {
+        glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
+        glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, 
GL_STATIC_DRAW);
+
+        glBindBuffer(GL_ARRAY_BUFFER, m_uvBuffer);
+        glBufferData(GL_ARRAY_BUFFER, sizeof(uvCoordinates), uvCoordinates, 
GL_STATIC_DRAW);
+
+        glUseProgram(m_simpleProgID);
+
+        glUniform1i(m_simpleTexUnf, 0); //Use texture Unit 0
+        glUniform4f(m_simpleColorUnf, color[0], color[1], color[2], color[3]);
+
+        glEnableVertexAttribArray(m_simplePosAttrb);
+        glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
+        glVertexAttribPointer(
+            m_simplePosAttrb,
+            2,                            // size
+            GL_FLOAT,                     // type
+            GL_FALSE,                     // normalized?
+            0,                            // stride
+            (void*)0                      // array buffer offset
+        );
+
+        glEnableVertexAttribArray(m_simpleUvAttrb);
+        glBindBuffer(GL_ARRAY_BUFFER, m_uvBuffer);
+        glVertexAttribPointer(
+            m_simpleUvAttrb,
+            2,                            // size
+            GL_FLOAT,                     // type
+            GL_FALSE,                     // normalized?
+            0,                            // stride
+            (void*)0                      // array buffer offset
+        );
+
+        glDrawArrays(mode, 0, sizeof(vertices) / sizeof(vertices[0]) /2);
+
+        glDisableVertexAttribArray(m_simplePosAttrb);
+        glDisableVertexAttribArray(m_simpleUvAttrb);
+        glUseProgram(0);
+    }
+
+    //Clean up
+    void RenderHelper::dispose()
+    {
+        glDeleteBuffers(1, &m_vertexBuffer);
+        glDeleteBuffers(1, &m_uvBuffer);
+        glDeleteProgram( m_texManProgID);
+        glDeleteProgram( m_simpleProgID);
+        glDeleteProgram( m_texProgID);
+    }
+
+    // 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, GLfloat color[4], GLenum mode) const
+    {
+        glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
+        glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, 
GL_STATIC_DRAW);
+
+        glUseProgram(m_texManProgID);
+
+        //Set Uniforms
+        glUniform1i(m_manTexUnf, 0);
+        glUniform2f(m_manCordUnf,fWidth,fHeight);
+        glUniform4f(m_manColorUnf, color[0], color[1], color[2], color[3] );
+
+        glEnableVertexAttribArray(m_manPosAttrb);
+        glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
+        glVertexAttribPointer(
+            m_manPosAttrb,
+            2,                            // size
+            GL_FLOAT,                     // type
+            GL_FALSE,                     // normalized?
+            0,                            // stride
+            (void*)0                      // array buffer offset
+        );
+
+        glDrawArrays(mode, 0, sizeof(vertices) / sizeof(vertices[0]) /2);
+
+        glDisableVertexAttribArray(m_manPosAttrb);
+        glUseProgram(0);
+    }
+}
\ No newline at end of file
diff --git a/canvas/source/opengl/ogl_renderHelper.hxx 
b/canvas/source/opengl/ogl_renderHelper.hxx
new file mode 100644
index 0000000..ea368a7
--- /dev/null
+++ b/canvas/source/opengl/ogl_renderHelper.hxx
@@ -0,0 +1,35 @@
+#include <GL/glew.h>
+#include <vcl/opengl/OpenGLHelper.hxx>
+namespace oglcanvas
+{
+    class RenderHelper
+    {
+    public:
+        RenderHelper();
+        void renderVertexConstColor(GLfloat vertices[] , GLfloat color[4], 
GLenum mode) const ;
+        void renderVertexUVTex(GLfloat vertices[], GLfloat uvCoordinates[], 
GLfloat color[4], GLenum mode) const ;
+        void renderVertexTex(GLfloat vertices[], GLfloat, GLfloat, GLfloat 
color[4], GLenum mode) const;
+        void dispose();
+    private:
+        void  InitOpenGL();
+        GLuint                                            m_vertexBuffer;
+        GLuint                                            m_uvBuffer;
+
+
+        GLuint                                            m_simpleProgID;
+        GLuint                                            m_simpleUvAttrb;
+        GLuint                                            m_simplePosAttrb;
+        GLuint                                            m_simpleTexUnf;
+        GLuint                                            m_simpleColorUnf;
+
+        GLuint                                            m_manTexUnf;
+        GLuint                                            m_manPosAttrb;
+        GLuint                                            m_manCordUnf;
+        GLuint                                            m_manColorUnf;
+
+        GLuint                                            m_texPosAttrb;
+        GLuint                                            m_texColorUnf;
+        GLuint                                            m_texManProgID;
+        GLuint                                            m_texProgID;
+    };
+}
\ No newline at end of file
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to