canvas/source/opengl/ogl_canvashelper.cxx | 14 +++++++------- canvas/source/opengl/ogl_canvastools.cxx | 14 +++++++++----- canvas/source/opengl/ogl_canvastools.hxx | 3 ++- canvas/source/opengl/ogl_renderHelper.cxx | 23 +++++++++++++++++++---- 4 files changed, 37 insertions(+), 17 deletions(-)
New commits: commit 2bd148c0210571981af047245a3be9e670e99312 Author: Michael Jaumann <meta_...@yahoo.com> Date: Fri Nov 28 09:23:37 2014 +0000 drawArrays with triangles, correct buffersize Change-Id: Ic2a7bff2b59e12ca4b455cbefb16ba692f81efc5 diff --git a/canvas/source/opengl/ogl_canvashelper.cxx b/canvas/source/opengl/ogl_canvashelper.cxx index 7d25491..7a8e47c 100644 --- a/canvas/source/opengl/ogl_canvashelper.cxx +++ b/canvas/source/opengl/ogl_canvashelper.cxx @@ -101,7 +101,7 @@ namespace oglcanvas const geometry::RealPoint2D& rPoint) { RenderHelper* pRenderHelper = rHelper.getDeviceHelper()->getRenderHelper(); - setupState(rTransform, eSrcBlend, eDstBlend); + // pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, eDstBlend)); glm::vec4 color = glm::vec4( (float) rColor.Red, (float) rColor.Green, (float) rColor.Blue, @@ -122,7 +122,7 @@ namespace oglcanvas const geometry::RealPoint2D& rEndPoint) { RenderHelper* pRenderHelper = rHelper.getDeviceHelper()->getRenderHelper(); - setupState(rTransform, eSrcBlend, eDstBlend); + // pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, eDstBlend)); glm::vec4 color = glm::vec4( (float) rColor.Red, (float) rColor.Green, (float) rColor.Blue, @@ -144,7 +144,7 @@ namespace oglcanvas const ::basegfx::B2DPolyPolygonVector& rPolyPolygons) { RenderHelper* pRenderHelper = rHelper.getDeviceHelper()->getRenderHelper(); - setupState(rTransform, eSrcBlend, eDstBlend); + // pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, eDstBlend)); glm::vec4 color = glm::vec4( (float) rColor.Red, (float) rColor.Green, (float) rColor.Blue, @@ -169,7 +169,7 @@ namespace oglcanvas { //no texture bind ? RenderHelper* pRenderHelper = rHelper.getDeviceHelper()->getRenderHelper(); - setupState(rTransform, eSrcBlend, eDstBlend); + // pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, eDstBlend)); glm::vec4 color = glm::vec4( (float) rColor.Red, (float) rColor.Green, (float) rColor.Blue, @@ -179,7 +179,7 @@ namespace oglcanvas const ::basegfx::B2DPolyPolygonVector::const_iterator aEnd=rPolyPolygons.end(); while( aCurr != aEnd ) { - renderPolyPolygon(*aCurr++, pRenderHelper, color); + renderComplexPolyPolygon(*aCurr++, pRenderHelper, color, false); } return true; @@ -251,7 +251,7 @@ namespace oglcanvas aCurr=rPolyPolygons.begin(); while( aCurr != aEnd ) { - renderComplexPolyPolygon(*aCurr++, pRenderHelper, color); + renderComplexPolyPolygon(*aCurr++, pRenderHelper, color, true); } glUseProgram(0); @@ -381,7 +381,7 @@ namespace oglcanvas aCurr=rPolyPolygons.begin(); while( aCurr != aEnd ) { - renderComplexPolyPolygon(*aCurr++, pRenderHelper, color); + renderComplexPolyPolygon(*aCurr++, pRenderHelper, color, true); } diff --git a/canvas/source/opengl/ogl_canvastools.cxx b/canvas/source/opengl/ogl_canvastools.cxx index 833c9eb..346d73a 100644 --- a/canvas/source/opengl/ogl_canvastools.cxx +++ b/canvas/source/opengl/ogl_canvastools.cxx @@ -29,8 +29,8 @@ using namespace ::com::sun::star; namespace oglcanvas { /// triangulates polygon before - //move to canvashelper, or take renderHelper as parameter? - void renderComplexPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly, RenderHelper *renderHelper, glm::vec4 color ) + void renderComplexPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly, RenderHelper *renderHelper, + glm::vec4 color, const bool hasTexture) { ::basegfx::B2DPolyPolygon aPolyPoly(rPolyPoly); if( aPolyPoly.areControlPointsUsed() ) @@ -47,7 +47,10 @@ namespace oglcanvas const ::basegfx::B2DPoint& rPt( rTriangulatedPolygon.getB2DPoint(i) ); vertices.push_back(glm::vec2(rPt.getX(),rPt.getY())); } - renderHelper->renderVertexTex( vertices, nWidth, nHeight, color, GL_TRIANGLES); + if(hasTexture) + renderHelper->renderVertexTex( vertices, nWidth, nHeight, color, GL_TRIANGLES); + else + renderHelper->renderVertexConstColor(vertices, color, GL_TRIANGLES); } /** only use this for line polygons. @@ -74,7 +77,8 @@ namespace oglcanvas const ::basegfx::B2DPoint& rPt( rPolygon.getB2DPoint( j % nPts ) ); vertices.push_back(glm::vec2(rPt.getX(),rPt.getY())); } - renderHelper->renderVertexConstColor(vertices, color, GL_LINE_STRIP); + if(nExtPts>0) + renderHelper->renderVertexConstColor(vertices, color, GL_LINE_STRIP); } } @@ -115,7 +119,7 @@ namespace oglcanvas aTmp=aTmp*aScaleShear; aPoly.transform(aTmp); // glColor4f(0,1,0,1); - glm::vec4 color = glm::vec4(0.5, 0, 0, 0.5); + glm::vec4 color = glm::vec4(1, 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 904b7f6..2ac7a4b 100644 --- a/canvas/source/opengl/ogl_canvastools.hxx +++ b/canvas/source/opengl/ogl_canvastools.hxx @@ -25,7 +25,8 @@ namespace basegfx { namespace oglcanvas { - void renderComplexPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly, RenderHelper *renderHelper, glm::vec4 color); + void renderComplexPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly, + RenderHelper *renderHelper, glm::vec4 color, const bool hasTexture); void renderPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly, RenderHelper *renderHelper, glm::vec4 color ); glm::mat4 setupState( const ::basegfx::B2DHomMatrix& rTransform, unsigned int eSrcBlend, diff --git a/canvas/source/opengl/ogl_renderHelper.cxx b/canvas/source/opengl/ogl_renderHelper.cxx index f53ab33..95d3b49 100644 --- a/canvas/source/opengl/ogl_renderHelper.cxx +++ b/canvas/source/opengl/ogl_renderHelper.cxx @@ -65,7 +65,7 @@ namespace oglcanvas glUseProgram(m_texProgID); - glBufferData(GL_ARRAY_BUFFER, rVertices.size()*sizeof(float), &rVertices[0].x, GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, testVertices.size()*sizeof(float)*2, &testVertices[0].x, GL_STATIC_DRAW); glUniform4fv(m_texColorUnf, 1, &color[0]); glUniformMatrix4fv(m_texMVPUnf, 1, GL_FALSE, &m_MVP[0][0]); glEnableVertexAttribArray(m_texPosAttrb); //vertices @@ -79,6 +79,12 @@ namespace oglcanvas 0, // stride (void*)0 // array buffer offset ); + glUseProgram(m_texProgID); + + glBufferData(GL_ARRAY_BUFFER, rVertices.size()*sizeof(float)*2, &rVertices[0].x, GL_STATIC_DRAW); + glUniform4fv(m_texColorUnf, 1, &color[0]); + glUniformMatrix4fv(m_texMVPUnf, 1, GL_FALSE, &m_MVP[0][0]); + glEnableVertexAttribArray(m_texPosAttrb); //vertices glDrawArrays(mode, 0, rVertices.size()); @@ -91,10 +97,10 @@ namespace oglcanvas 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, rVertices.size()*sizeof(float), &rVertices[0].x, GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, rVertices.size()*sizeof(float)*2, &rVertices[0].x, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, m_uvBuffer); - glBufferData(GL_ARRAY_BUFFER, rUVcoords.size()*sizeof(float), &rUVcoords[0].x, GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, rUVcoords.size()*sizeof(float)*2, &rUVcoords[0].x, GL_STATIC_DRAW); glUseProgram(m_simpleProgID); @@ -125,6 +131,15 @@ namespace oglcanvas (void*)0 // array buffer offset ); + glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer); + glVertexAttribPointer( + m_texPosAttrb, + 2, // size + GL_FLOAT, // type + GL_FALSE, // normalized? + 0, // stride + (void*)0 // array buffer offset + ); glDrawArrays(mode, 0, rVertices.size()); glDisableVertexAttribArray(m_simplePosAttrb); @@ -148,7 +163,7 @@ namespace oglcanvas 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, rVertices.size()*sizeof(float), &rVertices[0].x, GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, rVertices.size()*sizeof(float)*2, &rVertices[0].x, GL_STATIC_DRAW); glUseProgram(m_texManProgID); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits