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