canvas/source/opengl/ogl_canvascustomsprite.cxx | 6 - canvas/source/opengl/ogl_canvashelper.cxx | 101 +++++++++++++----------- canvas/source/opengl/ogl_canvashelper.hxx | 3 canvas/source/opengl/ogl_canvastools.cxx | 28 +----- canvas/source/opengl/ogl_canvastools.hxx | 17 ++-- canvas/source/opengl/ogl_renderHelper.cxx | 14 +-- canvas/source/opengl/ogl_renderHelper.hxx | 14 ++- 7 files changed, 97 insertions(+), 86 deletions(-)
New commits: commit f8b451457fbbf80e42e3fdd41a2d3776920579f9 Author: Michael Jaumann <meta_...@yahoo.com> Date: Tue Oct 28 08:38:54 2014 +0000 renderHelper instead fixedPipeline part 1 Change-Id: Ic866a76be6a06ee259e25e2b1901693cd35562aa diff --git a/canvas/source/opengl/ogl_canvashelper.cxx b/canvas/source/opengl/ogl_canvashelper.cxx index 8c4969b..58e234f 100644 --- a/canvas/source/opengl/ogl_canvashelper.cxx +++ b/canvas/source/opengl/ogl_canvashelper.cxx @@ -98,15 +98,16 @@ namespace oglcanvas GLenum eSrcBlend, GLenum eDstBlend, const rendering::ARGBColor& rColor, - const geometry::RealPoint2D& rPoint ) + const geometry::RealPoint2D& rPoint, + RenderHelper& mRenderHelper) { - TransformationPreserver aPreserver; - setupState(rTransform, eSrcBlend, eDstBlend, rColor); - - glBegin(GL_POINTS); - glVertex2d(rPoint.X, rPoint.Y); - glEnd(); - + mRenderHelper.SetModelAndMVP(setupState(rTransform, eSrcBlend, eDstBlend)); + glm::vec4 color = glm::vec4( (float) rColor.Red, + (float) rColor.Green, + (float) rColor.Blue, + (float) rColor.Alpha); + GLfloat vertices[] = {(float) rPoint.X, (float) rPoint.Y}; + mRenderHelper.renderVertexConstColor(vertices, color, GL_POINTS); return true; } @@ -116,16 +117,17 @@ namespace oglcanvas GLenum eDstBlend, const rendering::ARGBColor& rColor, const geometry::RealPoint2D& rStartPoint, - const geometry::RealPoint2D& rEndPoint ) + const geometry::RealPoint2D& rEndPoint, + RenderHelper& mRenderHelper) { - TransformationPreserver aPreserver; - setupState(rTransform, eSrcBlend, eDstBlend, rColor); - - glBegin(GL_LINES); - glVertex2d(rStartPoint.X, rStartPoint.Y); - glVertex2d(rEndPoint.X, rEndPoint.Y); - glEnd(); - + mRenderHelper.SetModelAndMVP(setupState(rTransform, eSrcBlend, eDstBlend)); + glm::vec4 color = glm::vec4( (float) rColor.Red, + (float) rColor.Green, + (float) rColor.Blue, + (float) rColor.Alpha); + GLfloat vertices[] = {(float) rStartPoint.X, (float) rStartPoint.Y, + (float) rEndPoint.X, (float) rEndPoint.Y }; + mRenderHelper.renderVertexConstColor(vertices, color, GL_LINES); return true; } @@ -136,9 +138,12 @@ namespace oglcanvas const rendering::ARGBColor& rColor, const ::basegfx::B2DPolyPolygonVector& rPolyPolygons ) { - TransformationPreserver aPreserver; - setupState(rTransform, eSrcBlend, eDstBlend, rColor); - + //move renderPolyPolygon here? + // mRenderHelper.SetModelAndMVP(setupState(rTransform, eSrcBlend, eDstBlend)); + glm::vec4 color = glm::vec4( (float) rColor.Red, + (float) rColor.Green, + (float) rColor.Blue, + (float) rColor.Alpha); ::basegfx::B2DPolyPolygonVector::const_iterator aCurr=rPolyPolygons.begin(); const ::basegfx::B2DPolyPolygonVector::const_iterator aEnd=rPolyPolygons.end(); while( aCurr != aEnd ) @@ -154,8 +159,9 @@ namespace oglcanvas const rendering::ARGBColor& rColor, const ::basegfx::B2DPolyPolygonVector& rPolyPolygons ) { + //no texture bind ? TransformationPreserver aPreserver; - setupState(rTransform, eSrcBlend, eDstBlend, rColor); + setupState(rTransform, eSrcBlend, eDstBlend); ::basegfx::B2DPolyPolygonVector::const_iterator aCurr=rPolyPolygons.begin(); const ::basegfx::B2DPolyPolygonVector::const_iterator aEnd=rPolyPolygons.end(); @@ -177,8 +183,10 @@ namespace oglcanvas const rendering::Texture& rTexture, const ::basegfx::B2DPolyPolygonVector& rPolyPolygons ) { + //not complete TransformationPreserver aPreserver; - setupState(rTransform, eSrcBlend, eDstBlend, rendering::ARGBColor()); + // setupState(rTransform, eSrcBlend, eDstBlend, rendering::ARGBColor()); + setupState(rTransform, eSrcBlend, eDstBlend); // convert to weird canvas textur coordinate system (not // [0,1]^2, but path coordinate system) @@ -251,7 +259,7 @@ namespace oglcanvas const CanvasBitmap& rBitmap ) { TransformationPreserver aPreserver; - setupState(rTransform, eSrcBlend, eDstBlend, rColor); + setupState(rTransform, eSrcBlend, eDstBlend); return rBitmap.renderRecordedActions(); } @@ -263,14 +271,15 @@ namespace oglcanvas const rendering::ARGBColor& rColor, const geometry::IntegerSize2D& rPixelSize, const uno::Sequence<sal_Int8>& rPixelData, - sal_uInt32 nPixelCrc32 ) + sal_uInt32 nPixelCrc32, + RenderHelper& mRenderHelper) + { - TransformationPreserver aPreserver; - setupState(rTransform, eSrcBlend, eDstBlend, rColor); + mRenderHelper.SetModelAndMVP(setupState(rTransform, eSrcBlend, eDstBlend)); 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, @@ -284,17 +293,19 @@ namespace oglcanvas GL_ONE_MINUS_SRC_ALPHA); // blend against fixed vertex color; texture alpha is multiplied in - glColor4f(1,1,1,1); - - glBegin(GL_TRIANGLE_STRIP); - glTexCoord2f(0,0); glVertex2d(0,0); - glTexCoord2f(0,1); glVertex2d(0, rPixelSize.Height); - glTexCoord2f(1,0); glVertex2d(rPixelSize.Width,0); - glTexCoord2f(1,1); glVertex2d(rPixelSize.Width,rPixelSize.Height); - glEnd(); + 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 }; + mRenderHelper.renderVertexUVTex(vertices, uvCoordinates, color, GL_TRIANGLE_STRIP ); glBindTexture(GL_TEXTURE_2D, 0); - glDisable(GL_TEXTURE_2D); return true; } @@ -310,7 +321,8 @@ namespace oglcanvas const ::basegfx::B2DPolyPolygonVector& rPolyPolygons ) { TransformationPreserver aPreserver; - setupState(rTransform, eSrcBlend, eDstBlend, rendering::ARGBColor()); + // setupState(rTransform, eSrcBlend, eDstBlend, rendering::ARGBColor()); + setupState(rTransform, eSrcBlend, eDstBlend); const unsigned int nTexId=rHelper.getDeviceHelper()->getTextureCache().getTexture( rPixelSize, rPixelData.getConstArray(), nPixelCrc32); @@ -376,7 +388,9 @@ namespace oglcanvas mpDevice( NULL ), mpDeviceHelper( NULL ), mpRecordedActions() - {} + { + mRenderHelper.SetVP(1600, 900);//is this right? + } CanvasHelper::~CanvasHelper() {} @@ -422,7 +436,7 @@ namespace oglcanvas setupGraphicsState( rAct, viewState, renderState ); rAct.maFunction = ::boost::bind(&lcl_drawPoint, _1,_2,_3,_4,_5, - aPoint); + aPoint, boost::ref(mRenderHelper)); } } @@ -436,11 +450,11 @@ namespace oglcanvas { mpRecordedActions->push_back( Action() ); Action& rAct=mpRecordedActions->back(); - setupGraphicsState( rAct, viewState, renderState ); rAct.maFunction = ::boost::bind(&lcl_drawLine, _1,_2,_3,_4,_5, - aStartPoint,aEndPoint); + aStartPoint,aEndPoint, + boost::ref(mRenderHelper)); } } @@ -463,7 +477,7 @@ namespace oglcanvas geometry::RealPoint2D( aBezierSegment.Px, aBezierSegment.Py), - aEndPoint); + aEndPoint, boost::ref(mRenderHelper)); } } @@ -867,7 +881,8 @@ namespace oglcanvas aSize, aARGBBytes, rtl_crc32(0, aARGBBytes.getConstArray(), - aARGBBytes.getLength())); + aARGBBytes.getLength()), + boost::ref(mRenderHelper)); } // TODO(F1): handle non-integer case } diff --git a/canvas/source/opengl/ogl_canvashelper.hxx b/canvas/source/opengl/ogl_canvashelper.hxx index 0dc98e0..da2f7ab 100644 --- a/canvas/source/opengl/ogl_canvashelper.hxx +++ b/canvas/source/opengl/ogl_canvashelper.hxx @@ -17,6 +17,7 @@ #include <o3tl/cow_wrapper.hxx> #include <vector> +#include "ogl_renderHelper.hxx" namespace oglcanvas { @@ -230,6 +231,8 @@ namespace oglcanvas copied (used e.g. for CanvasBitmap) */ RecordVectorT mpRecordedActions; + + RenderHelper mRenderHelper; }; } diff --git a/canvas/source/opengl/ogl_canvastools.cxx b/canvas/source/opengl/ogl_canvastools.cxx index 8144e43..64f5dc4 100644 --- a/canvas/source/opengl/ogl_canvastools.cxx +++ b/canvas/source/opengl/ogl_canvastools.cxx @@ -21,6 +21,7 @@ #include <com/sun/star/rendering/ARGBColor.hpp> #include <GL/glew.h> +#include <glm/gtc/type_ptr.hpp> using namespace ::com::sun::star; @@ -75,34 +76,21 @@ namespace oglcanvas } } - void setupState( const ::basegfx::B2DHomMatrix& rTransform, + glm::mat4 setupState( const ::basegfx::B2DHomMatrix& rTransform, GLenum eSrcBlend, - GLenum eDstBlend, - const rendering::ARGBColor& rColor ) + GLenum eDstBlend) { - double aGLTransform[] = + float aGLTransform[] = { - rTransform.get(0,0), rTransform.get(1,0), 0, 0, - rTransform.get(0,1), rTransform.get(1,1), 0, 0, + (float) rTransform.get(0,0), (float) rTransform.get(1,0), 0, 0, + (float) rTransform.get(0,1), (float) rTransform.get(1,1), 0, 0, 0, 0, 1, 0, - rTransform.get(0,2), rTransform.get(1,2), 0, 1 + (float) rTransform.get(0,2), (float) rTransform.get(1,2), 0, 1 }; - glMultMatrixd(aGLTransform); glEnable(GL_BLEND); glBlendFunc(eSrcBlend, eDstBlend); - - glColor4d(rColor.Red, - rColor.Green, - rColor.Blue, - rColor.Alpha); - - // GL 1.2: - // glBlendEquation( GLenum mode ); - // glBlendColor( GLclampf red, GLclampf green,GLclampf blue, GLclampf alpha ); - // glConvolutionFilter1D - // glConvolutionFilter2D - // glSeparableFilter2D + return glm::make_mat4(aGLTransform); } void renderOSD( const std::vector<double>& rNumbers, double scale ) diff --git a/canvas/source/opengl/ogl_canvastools.hxx b/canvas/source/opengl/ogl_canvastools.hxx index 2cd727c..4ce9819 100644 --- a/canvas/source/opengl/ogl_canvastools.hxx +++ b/canvas/source/opengl/ogl_canvastools.hxx @@ -12,6 +12,7 @@ #include <sal/config.h> #include <vector> +#include <glm/glm.hpp> namespace com { namespace sun { namespace star { namespace rendering { struct ARGBColor; @@ -23,14 +24,14 @@ namespace basegfx { namespace oglcanvas { - void renderComplexPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly ); - void renderPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly ); - void setupState( const ::basegfx::B2DHomMatrix& rTransform, - unsigned int eSrcBlend, - unsigned int eDstBlend, - const ::com::sun::star::rendering::ARGBColor& rColor ); - - void renderOSD( const std::vector<double>& rNumbers, double scale ); + void renderComplexPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly ); + void renderPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly ); + glm::mat4 setupState( const ::basegfx::B2DHomMatrix& rTransform, + unsigned int eSrcBlend, + unsigned int eDstBlend ); + + void renderOSD( const std::vector<double>& rNumbers, double scale ); + } #endif commit 0f87c270637420a947aa2298ef494cdcb5277b45 Author: Michael Jaumann <meta_...@yahoo.com> Date: Tue Oct 28 08:00:18 2014 +0000 removed glDisable(GL_TEXTURE_2D) Change-Id: I6d816d7518c6e551fb1b0489154fa3b0bfe0ddc9 diff --git a/canvas/source/opengl/ogl_canvascustomsprite.cxx b/canvas/source/opengl/ogl_canvascustomsprite.cxx index 15eee9e..f6126f5 100644 --- a/canvas/source/opengl/ogl_canvascustomsprite.cxx +++ b/canvas/source/opengl/ogl_canvascustomsprite.cxx @@ -220,7 +220,6 @@ namespace oglcanvas } glBindTexture(GL_TEXTURE_2D, 0); - glDisable(GL_TEXTURE_2D); } // translate sprite to output position mRenderHelper.SetModelAndMVP(glm::translate(glm::vec3(maPosition.getX(), maPosition.getY(), 0))); commit 8e135605b4ab9a6b1efbe900454ea4e93d1850dc Author: Michael Jaumann <meta_...@yahoo.com> Date: Mon Oct 27 09:07:18 2014 +0000 use glm::vec4 instead of array for color Change-Id: I9649b5a0346ed6f4a8b6a169b2aab757b2587229 diff --git a/canvas/source/opengl/ogl_canvascustomsprite.cxx b/canvas/source/opengl/ogl_canvascustomsprite.cxx index 3f95107..15eee9e 100644 --- a/canvas/source/opengl/ogl_canvascustomsprite.cxx +++ b/canvas/source/opengl/ogl_canvascustomsprite.cxx @@ -173,7 +173,7 @@ namespace oglcanvas glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - GLfloat color[] = {1, 1, 1, (float)mfAlpha}; + glm::vec4 color = glm::vec4(1, 1, 1, (float)mfAlpha); if( mxClip.is() ) { @@ -230,9 +230,8 @@ namespace oglcanvas (float) maSize.Width+4, -2, -2, -2, (float) maSize.Width+4, (float) maSize.Height+4 }; - GLfloat color[] = {1, 0, 0, 1}; - mRenderHelper.renderVertexConstColor(vertices, color, GL_LINE_STRIP); + mRenderHelper.renderVertexConstColor(vertices, glm::vec4(1, 0, 0, 1), GL_LINE_STRIP); std::vector<double> aVec; aVec.push_back(mfAlpha); diff --git a/canvas/source/opengl/ogl_renderHelper.cxx b/canvas/source/opengl/ogl_renderHelper.cxx index 3bc934e..27cf96a 100644 --- a/canvas/source/opengl/ogl_renderHelper.cxx +++ b/canvas/source/opengl/ogl_renderHelper.cxx @@ -54,14 +54,14 @@ namespace oglcanvas m_Model = mat; m_MVP = m_Projection * m_View * m_Model; } - void RenderHelper::renderVertexConstColor(GLfloat vertices[], GLfloat color[4], GLenum mode) const + void RenderHelper::renderVertexConstColor(GLfloat vertices[], glm::vec4 color, 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]); + glUniform4fv(m_texColorUnf, 4, glm::value_ptr(color)); glEnableVertexAttribArray(m_texPosAttrb); //vertices glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer); @@ -82,7 +82,7 @@ namespace oglcanvas } //Renders a TriangleStrip, Texture has to be stored in TextureUnit0 - void RenderHelper::renderVertexUVTex(GLfloat vertices[], GLfloat uvCoordinates[], GLfloat color[4], GLenum mode) const + void RenderHelper::renderVertexUVTex(GLfloat vertices[], GLfloat uvCoordinates[], glm::vec4 color, GLenum mode) const { glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); @@ -93,7 +93,7 @@ namespace oglcanvas glUseProgram(m_simpleProgID); glUniform1i(m_simpleTexUnf, 0); //Use texture Unit 0 - glUniform4f(m_simpleColorUnf, color[0], color[1], color[2], color[3]); + glUniform4fv(m_simpleColorUnf, 4, glm::value_ptr(color)); glUniformMatrix4fv(m_simpleMVPUnf, 1, GL_FALSE, &m_MVP[0][0]); glEnableVertexAttribArray(m_simplePosAttrb); @@ -102,7 +102,7 @@ namespace oglcanvas m_simplePosAttrb, 2, // size GL_FLOAT, // type - GL_FALSE, // normalized? + GL_FALSE, // normalized?v 0, // stride (void*)0 // array buffer offset ); @@ -137,7 +137,7 @@ 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, GLfloat color[4], GLenum mode) const + void RenderHelper::renderVertexTex(GLfloat vertices[], 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); @@ -147,7 +147,7 @@ namespace oglcanvas //Set Uniforms glUniform1i(m_manTexUnf, 0); glUniform2f(m_manCordUnf,fWidth,fHeight); - glUniform4f(m_manColorUnf, color[0], color[1], color[2], color[3] ); + glUniform4fv(m_manColorUnf, 4, glm::value_ptr(color)); glUniformMatrix4fv(m_manMVPUnf, 1, GL_FALSE, &m_MVP[0][0]); glEnableVertexAttribArray(m_manPosAttrb); diff --git a/canvas/source/opengl/ogl_renderHelper.hxx b/canvas/source/opengl/ogl_renderHelper.hxx index 0a63ab1..a7e7a54 100644 --- a/canvas/source/opengl/ogl_renderHelper.hxx +++ b/canvas/source/opengl/ogl_renderHelper.hxx @@ -1,15 +1,18 @@ +#ifndef RENDER_HELPER +#define RENDER_HELPER #include <GL/glew.h> #include <glm/glm.hpp> #include "glm/gtx/transform.hpp" +#include <glm/gtc/type_ptr.hpp> namespace oglcanvas { class RenderHelper { public: - 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 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; RenderHelper(); @@ -59,4 +62,7 @@ namespace oglcanvas glm::mat4 m_MVP; }; -} \ No newline at end of file +} + + +#endif /* RENDER_HELPER */ \ No newline at end of file _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits