chart2/Package_opengl.mk | 2 chart2/opengl/pickingFragmentShader.glsl | 5 chart2/opengl/pickingVertexShader.glsl | 7 chart2/opengl/shape3DFragmentShaderBatchScroll.glsl | 111 ++++++++++++ chart2/opengl/shape3DFragmentShaderV300.glsl | 7 chart2/opengl/shape3DVertexShader.glsl | 4 chart2/opengl/shape3DVertexShaderBatchScroll.glsl | 39 ++++ chart2/opengl/shape3DVertexShaderV300.glsl | 8 chart2/source/view/charttypes/GL3DBarChart.cxx | 123 ++++++++++++- chart2/source/view/inc/GL3DBarChart.hxx | 2 chart2/source/view/inc/GL3DRenderer.hxx | 36 +++ chart2/source/view/main/GL3DRenderer.cxx | 183 +++++++++++++++++--- 12 files changed, 493 insertions(+), 34 deletions(-)
New commits: commit ac6fabdc02fdcba8a502153099512946d2b7effd Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Wed Aug 6 12:26:11 2014 +0200 fix Wreorder Change-Id: Icc9d9587ddf5610d6adaca9b2ea5eb32e2534947 diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 1eed3cb..b9af4266 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -180,8 +180,8 @@ public: RenderBenchMarkThread(GL3DBarChart * pChart): RenderThread(pChart), mbExecuting(false), - miFrameCount(0), - mbNeedFlyBack(false) + mbNeedFlyBack(false), + miFrameCount(0) { osl_getSystemTime(&mafpsRenderStartTime); osl_getSystemTime(&mafpsRenderEndTime); diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index c993ecd..f4b4b67 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -464,9 +464,9 @@ private: sal_uInt32 m_uiSelectID; float m_fScrollSpeed; float m_fScrollDistance; - float m_fCurDistance; float m_fMinCoordX; float m_fMaxCoordX; + float m_fCurDistance; glm::mat4 m_ScrollMoveMatrix; bool m_bUndrawFlag; }; diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 57f016b..48d7da7 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -114,8 +114,8 @@ OpenGL3DRenderer::OpenGL3DRenderer(): , m_fMinCoordX(0.0f) , m_fMaxCoordX(0.0f) , m_fCurDistance(0.0f) - , m_bUndrawFlag(false) , m_ScrollMoveMatrix(glm::mat4(1.0)) + , m_bUndrawFlag(false) { m_Polygon3DInfo.lineOnly = false; m_Polygon3DInfo.twoSidesLighting = false; @@ -162,6 +162,7 @@ OpenGL3DRenderer::~OpenGL3DRenderer() OpenGL3DRenderer::ShaderResources::ShaderResources() : m_b330Support(false) + , m_bScrollFlag(false) , m_3DProID(0) , m_3DProjectionID(0) , m_3DViewID(0) @@ -207,7 +208,6 @@ OpenGL3DRenderer::ShaderResources::ShaderResources() , m_BatchTextVertexID(0) , m_BatchTextTexCoordID(0) , m_BatchTextTexID(0) - , m_bScrollFlag(false) { } commit 8f38b9e11eef43fbc47827eff432b3620aeee2d4 Author: weigao <wei...@multicorewareinc.com> Date: Thu Aug 7 14:25:50 2014 +0800 remove test code of screen text Change-Id: Ibcda49dc561b2778d17c03edaaaf2b8e2fff4a0a diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 186bbac..1eed3cb 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -377,16 +377,7 @@ void RenderBenchMarkThread::UpdateFPS() osl_getSystemTime(&mafpsRenderStartTime); } osl_getSystemTime(&mafpsRenderEndTime); -#if 1 - opengl3D::ScreenText tFPS(mpChart->mpRenderer.get(), *(mpChart->mpTextCache), mpChart->mTestString, 0); - opengl3D::TextCacheItem tmpTextCache = mpChart->mpTextCache->getText(mpChart->mTestString); -#else - opengl3D::ScreenText tFPS(mpChart->mpRenderer.get(), *(mpChart->mpTextCache), maFPS, 0); - opengl3D::TextCacheItem tmpTextCache = mpChart->mpTextCache->getText(maFPS); -#endif - float rectWidth = (float)tmpTextCache.maSize.Width() / (float)tmpTextCache.maSize.Height() * 0.05; - tFPS.setPosition(glm::vec2(-0.99f, 0.99f), glm::vec2(-0.99f + rectWidth, 0.89f)); - tFPS.render(); + //will add the fps render code here later } void RenderBenchMarkThread::UpdateScreenText() @@ -648,7 +639,6 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer maShapes.push_back(new opengl3D::Text(mpRenderer.get(), *mpTextCache, aCats[i], nId)); - mTestString = aCats[i]; nId += ID_STEP; p = static_cast<opengl3D::Text*>(&maShapes.back()); aTopLeft.x = nXPos + TEXT_HEIGHT + 0.5 * BAR_SIZE_X; diff --git a/chart2/source/view/inc/GL3DBarChart.hxx b/chart2/source/view/inc/GL3DBarChart.hxx index a4a92a4..7b1e7b6 100644 --- a/chart2/source/view/inc/GL3DBarChart.hxx +++ b/chart2/source/view/inc/GL3DBarChart.hxx @@ -137,7 +137,6 @@ private: RenderEventType maRenderEvent; sal_uInt32 mSelectBarId; Point maClickPos; - OUString mTestString; sal_uInt32 miScrollRate; bool mbScrollFlg; }; commit b2b57d51b17704e1f7d031bda7d1549368838652 Author: weigao <wei...@multicorewareinc.com> Date: Tue Aug 5 17:03:28 2014 +0800 add click fly back code Change-Id: Ib4d5ce06f50ab7413fe8ecb5b61397b41e4fedd2 diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 3e27e98..186bbac 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -180,12 +180,15 @@ public: RenderBenchMarkThread(GL3DBarChart * pChart): RenderThread(pChart), mbExecuting(false), - miFrameCount(0) + miFrameCount(0), + mbNeedFlyBack(false) { osl_getSystemTime(&mafpsRenderStartTime); osl_getSystemTime(&mafpsRenderEndTime); osl_getSystemTime(&maScreenTextUpdateStartTime); osl_getSystemTime(&maScreenTextUpdateEndTime); + osl_getSystemTime(&maClickFlyBackStartTime); + osl_getSystemTime(&maClickFlyBackEndTime); } protected: virtual void execute() SAL_OVERRIDE; @@ -198,12 +201,14 @@ private: void ProcessScroll(); void UpdateScreenText(); void UpdateFPS(); - int calcTimeInterval(TimeValue &startTime, TimeValue &endTime); + int CalcTimeInterval(TimeValue &startTime, TimeValue &endTime); + void ProcessClickFlyBack(); private: glm::vec3 maStartPos; glm::vec3 maEndPos; sal_Int32 mnSteps; bool mbExecuting; + bool mbNeedFlyBack; glm::vec3 maStep; glm::vec3 maStepDirection; size_t mnStep; @@ -212,6 +217,8 @@ private: TimeValue mafpsRenderEndTime; TimeValue maScreenTextUpdateStartTime; TimeValue maScreenTextUpdateEndTime; + TimeValue maClickFlyBackStartTime; + TimeValue maClickFlyBackEndTime; int miFrameCount; OUString maFPS; }; @@ -231,7 +238,14 @@ void RenderBenchMarkThread::MoveCamera() mnStep = 0; mbExecuting = false; if (mpChart->maRenderEvent == EVENT_CLICK) + { mpChart->mpRenderer->EndClick(); + mbNeedFlyBack = true; + osl_getSystemTime(&maClickFlyBackStartTime); + osl_getSystemTime(&maClickFlyBackEndTime); + } + else + mbNeedFlyBack = false; mpChart->maRenderEvent = EVENT_NONE; } } @@ -307,8 +321,21 @@ void RenderBenchMarkThread::ProcessScroll() mpChart->maRenderEvent = EVENT_NONE; } +void RenderBenchMarkThread::ProcessClickFlyBack() +{ + if (!mbNeedFlyBack) + return; + osl_getSystemTime(&maClickFlyBackEndTime); + int aDeltaMs = CalcTimeInterval(maClickFlyBackStartTime, maClickFlyBackEndTime); + if(aDeltaMs >= 10000) + { + mpChart->maRenderEvent = EVENT_MOVE_TO_DEFAULT; + } +} + void RenderBenchMarkThread::ProcessMouseEvent() { + ProcessClickFlyBack(); if (mpChart->maRenderEvent == EVENT_CLICK) { MoveToBar(); @@ -327,7 +354,7 @@ void RenderBenchMarkThread::ProcessMouseEvent() } } -int RenderBenchMarkThread::calcTimeInterval(TimeValue &startTime, TimeValue &endTime) +int RenderBenchMarkThread::CalcTimeInterval(TimeValue &startTime, TimeValue &endTime) { TimeValue aTime; aTime.Seconds = endTime.Seconds - startTime.Seconds - 1; @@ -339,11 +366,11 @@ int RenderBenchMarkThread::calcTimeInterval(TimeValue &startTime, TimeValue &end void RenderBenchMarkThread::UpdateFPS() { - int aDeltaMs = calcTimeInterval(mafpsRenderStartTime, mafpsRenderEndTime); + int aDeltaMs = CalcTimeInterval(mafpsRenderStartTime, mafpsRenderEndTime); if(aDeltaMs >= 500) { osl_getSystemTime(&mafpsRenderEndTime); - aDeltaMs = calcTimeInterval(mafpsRenderStartTime, mafpsRenderEndTime); + aDeltaMs = CalcTimeInterval(mafpsRenderStartTime, mafpsRenderEndTime); int iFPS = miFrameCount * 1000 / aDeltaMs; maFPS = OUString("Render FPS: ") + OUString::number(iFPS); miFrameCount = 0; @@ -364,7 +391,7 @@ void RenderBenchMarkThread::UpdateFPS() void RenderBenchMarkThread::UpdateScreenText() { - int aDeltaMs = calcTimeInterval(maScreenTextUpdateStartTime, maScreenTextUpdateEndTime); + int aDeltaMs = CalcTimeInterval(maScreenTextUpdateStartTime, maScreenTextUpdateEndTime); if (aDeltaMs >= 20) { mpChart->mpRenderer->ReleaseScreenTextShapes(); commit e3d4a488a0c3eab68d4c77139f8d9b203e1ddafc Author: weigao <wei...@multicorewareinc.com> Date: Sun Aug 3 18:55:54 2014 +0800 make GL 3.0 support bars scroll Change-Id: I71d8d94f410e6c67d0e188ea2e0f79eb151758e0 diff --git a/chart2/opengl/shape3DFragmentShaderV300.glsl b/chart2/opengl/shape3DFragmentShaderV300.glsl index fee81d4..05e2770 100644 --- a/chart2/opengl/shape3DFragmentShaderV300.glsl +++ b/chart2/opengl/shape3DFragmentShaderV300.glsl @@ -23,9 +23,13 @@ uniform vec4 lightPosWorldspace[MAX_LIGHT_NUM]; uniform float lightPower[MAX_LIGHT_NUM]; uniform int lightNum; uniform vec4 lightAmbient; +uniform int undraw; +uniform float minCoordX; void main() { + if ((positionWorldspace.x <= minCoordX) && (undraw == 1)) + discard; vec3 colorTotal = vec3(0.0f, 0.0f, 0.0f); vec3 vertexPositionCameraspace = (V * vec4(positionWorldspace,1)).xyz; diff --git a/chart2/opengl/shape3DVertexShaderV300.glsl b/chart2/opengl/shape3DVertexShaderV300.glsl index 6737004..a8da294 100644 --- a/chart2/opengl/shape3DVertexShaderV300.glsl +++ b/chart2/opengl/shape3DVertexShaderV300.glsl @@ -16,12 +16,16 @@ uniform mat4 P; uniform mat4 M; uniform mat4 V; uniform mat3 normalMatrix; +uniform float minCoordX; +uniform float maxCoordX; void main() { - gl_Position = P * V * M * vec4(vertexPositionModelspace,1); + positionWorldspace = (M * vec4(vertexPositionModelspace,1)).xyz; - positionWorldspace = (M * vec4(vertexPositionModelspace,1)).xyz; + positionWorldspace.x = clamp(positionWorldspace.x, minCoordX, maxCoordX); + + gl_Position = P * V * vec4(positionWorldspace,1); normalCameraspace = normalize(mat3(V) * normalMatrix * vertexNormalModelspace); } diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index 5a8b6ec..c993ecd 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -289,6 +289,9 @@ private: GLint m_3DNormalMatrixID; GLint m_3DVertexID; GLint m_3DNormalID; + GLint m_3DMinCoordXID; + GLint m_3DMaxCoordXID; + GLint m_3DUndrawID; //300 verson; GLint m_3DMaterialAmbientID; GLint m_3DMaterialDiffuseID; diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index b09238d..57f016b 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -286,6 +286,9 @@ void OpenGL3DRenderer::ShaderResources::LoadShaders() m_3DLightPowerID = glGetUniformLocation(m_3DProID, "lightPower"); m_3DLightNumID = glGetUniformLocation(m_3DProID, "lightNum"); m_3DLightAmbientID = glGetUniformLocation(m_3DProID, "lightAmbient"); + m_3DMinCoordXID = glGetUniformLocation(m_3DProID, "minCoordX"); + m_3DMaxCoordXID = glGetUniformLocation(m_3DProID, "maxCoordX"); + m_3DUndrawID = glGetUniformLocation(m_3DProID, "undraw"); m_3DVertexID = glGetAttribLocation(m_3DProID, "vertexPositionModelspace"); m_3DNormalID = glGetAttribLocation(m_3DProID, "vertexNormalModelspace"); } @@ -911,6 +914,11 @@ void OpenGL3DRenderer::RenderPolygon3D(const Polygon3DInfo& polygon) } else { + float minCoordX = 0.0f; + float maxCoordX = m_fMinCoordX + m_fMaxCoordX; + glUniform1fv(maResources.m_3DMinCoordXID, 1, &minCoordX); + glUniform1fv(maResources.m_3DMaxCoordXID, 1, &maxCoordX); + glUniform1i(maResources.m_3DUndrawID, m_bUndrawFlag); //update light information glUniform4fv(maResources.m_3DLightColorID, m_iLightNum, (GLfloat*)m_LightColor); glUniform4fv(maResources.m_3DLightPosID, m_iLightNum, (GLfloat*)m_PositionWorldspace); @@ -1568,6 +1576,9 @@ void OpenGL3DRenderer::RenderExtrude3DObject() } else { + glUniform1fv(maResources.m_3DMinCoordXID, 1, &m_fMinCoordX); + glUniform1fv(maResources.m_3DMaxCoordXID, 1, &m_fMaxCoordX); + glUniform1i(maResources.m_3DUndrawID, m_bUndrawFlag); //update light information glUniform4fv(maResources.m_3DLightColorID, m_iLightNum, (GLfloat*)m_LightColor); glUniform4fv(maResources.m_3DLightPosID, m_iLightNum, (GLfloat*)m_PositionWorldspace); commit 495d53b1dc0f3c32e0b76344775b9fc728e09fe5 Author: weigao <wei...@multicorewareinc.com> Date: Sun Aug 3 18:36:56 2014 +0800 make pick shader work when bars scroll Change-Id: I9a3e0e36b212ff49ad22ac0ff267d04476b4c307 diff --git a/chart2/opengl/pickingFragmentShader.glsl b/chart2/opengl/pickingFragmentShader.glsl index 805789e..e2fba03 100644 --- a/chart2/opengl/pickingFragmentShader.glsl +++ b/chart2/opengl/pickingFragmentShader.glsl @@ -6,11 +6,14 @@ * 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/. */ - +uniform float minCoordX; +varying vec3 positionWorldspace; varying vec4 fragmentColor; void main() { + if (positionWorldspace.x <= minCoordX) + discard; gl_FragColor = fragmentColor; } diff --git a/chart2/opengl/pickingVertexShader.glsl b/chart2/opengl/pickingVertexShader.glsl index f32e3fd..df71ae1 100644 --- a/chart2/opengl/pickingVertexShader.glsl +++ b/chart2/opengl/pickingVertexShader.glsl @@ -9,11 +9,16 @@ attribute vec3 vPosition; uniform mat4 MVP; +uniform mat4 M; uniform vec4 vColor; +uniform float minCoordX; +uniform float maxCoordX; varying vec4 fragmentColor; - +varying vec3 positionWorldspace; void main() { + positionWorldspace = (M * vec4(vPosition,1)).xyz; + positionWorldspace.x = clamp(positionWorldspace.x, minCoordX, maxCoordX); gl_Position = MVP * vec4(vPosition, 1); fragmentColor = vColor; } diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index 8b879a5..5a8b6ec 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -356,7 +356,9 @@ private: GLint m_2DVertexID; GLint m_2DColorID; GLint m_MatrixID; - + GLint m_ModelID; + GLint m_MinCoordXID; + GLint m_MaxCoordXID; PickingShaderResources(); ~PickingShaderResources(); diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 51f3a1e..b09238d 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -115,6 +115,7 @@ OpenGL3DRenderer::OpenGL3DRenderer(): , m_fMaxCoordX(0.0f) , m_fCurDistance(0.0f) , m_bUndrawFlag(false) + , m_ScrollMoveMatrix(glm::mat4(1.0)) { m_Polygon3DInfo.lineOnly = false; m_Polygon3DInfo.twoSidesLighting = false; @@ -315,6 +316,9 @@ OpenGL3DRenderer::PickingShaderResources::PickingShaderResources() , m_2DVertexID(0) , m_2DColorID(0) , m_MatrixID(0) + , m_ModelID(0) + , m_MinCoordXID(0) + , m_MaxCoordXID(0) { } @@ -329,6 +333,9 @@ void OpenGL3DRenderer::PickingShaderResources::LoadShaders() m_MatrixID = glGetUniformLocation(m_CommonProID, "MVP"); m_2DVertexID = glGetAttribLocation(m_CommonProID, "vPosition"); m_2DColorID = glGetUniformLocation(m_CommonProID, "vColor"); + m_ModelID = glGetUniformLocation(m_CommonProID, "M"); + m_MinCoordXID = glGetUniformLocation(m_CommonProID, "minCoordX"); + m_MaxCoordXID = glGetUniformLocation(m_CommonProID, "maxCoordX"); } void OpenGL3DRenderer::SetCameraInfo(const glm::vec3& pos, const glm::vec3& direction, const glm::vec3& up) @@ -884,6 +891,10 @@ void OpenGL3DRenderer::RenderPolygon3D(const Polygon3DInfo& polygon) if(mbPickingMode) { glUseProgram(maPickingResources.m_CommonProID); + float minCoordX = 0.0f; + float maxCoordX = m_fMinCoordX + m_fMaxCoordX; + glUniform1fv(maPickingResources.m_MinCoordXID, 1, &minCoordX); + glUniform1fv(maPickingResources.m_MaxCoordXID, 1, &maxCoordX); } else { @@ -1327,7 +1338,7 @@ void OpenGL3DRenderer::RenderExtrudeFlatSurface(const Extrude3DInfo& extrude3D, extrude3D.zTransform}; glm::mat4 aTranslationMatrix = glm::translate(glm::vec3(trans.x, trans.y, trans.z)); glm::mat4 flatScale = glm::scale(glm::vec3(xyScale, xyScale, xyScale)); - m_Model = m_GlobalScaleMatrix * aTranslationMatrix * extrude3D.rotation * flatScale; + m_Model = m_ScrollMoveMatrix * m_GlobalScaleMatrix * aTranslationMatrix * extrude3D.rotation * flatScale; if(!mbPickingMode) { glm::mat3 normalMatrix(m_Model); @@ -1338,6 +1349,7 @@ void OpenGL3DRenderer::RenderExtrudeFlatSurface(const Extrude3DInfo& extrude3D, else { glm::mat4 aMVP = m_3DProjection * m_3DView * m_Model; + glUniformMatrix4fv(maPickingResources.m_ModelID, 1, GL_FALSE, &m_Model[0][0]); glUniformMatrix4fv(maPickingResources.m_MatrixID, 1, GL_FALSE, &aMVP[0][0]); glUniform4fv(maPickingResources.m_2DColorID, 1, &extrude3D.id[0]); } @@ -1371,7 +1383,7 @@ void OpenGL3DRenderer::RenderExtrudeBottomSurface(const Extrude3DInfo& extrude3D glm::mat4 aTranslationMatrix = glm::translate(glm::vec3(trans.x, trans.y, trans.z)); m_Model = aTranslationMatrix * extrude3D.rotation * topTrans * topScale; } - m_Model = m_GlobalScaleMatrix * m_Model; + m_Model = m_ScrollMoveMatrix * m_GlobalScaleMatrix * m_Model; if(!mbPickingMode) { glm::mat3 normalMatrix(m_Model); @@ -1382,6 +1394,7 @@ void OpenGL3DRenderer::RenderExtrudeBottomSurface(const Extrude3DInfo& extrude3D else { glm::mat4 aMVP = m_3DProjection * m_3DView * m_Model; + glUniformMatrix4fv(maPickingResources.m_ModelID, 1, GL_FALSE, &m_Model[0][0]); glUniformMatrix4fv(maPickingResources.m_MatrixID, 1, GL_FALSE, &aMVP[0][0]); glUniform4fv(maPickingResources.m_2DColorID, 1, &extrude3D.id[0]); } @@ -1416,7 +1429,7 @@ void OpenGL3DRenderer::RenderExtrudeMiddleSurface(const Extrude3DInfo& extrude3D glm::mat4 reverseMatrix = glm::translate(glm::vec3(0.0, 0.0, -1.0)); m_Model = m_Model * reverseMatrix; } - m_Model = m_GlobalScaleMatrix * m_Model; + m_Model = m_ScrollMoveMatrix * m_GlobalScaleMatrix * m_Model; if(!mbPickingMode) { glm::mat3 normalMatrix(m_Model); @@ -1427,6 +1440,7 @@ void OpenGL3DRenderer::RenderExtrudeMiddleSurface(const Extrude3DInfo& extrude3D else { glm::mat4 aMVP = m_3DProjection * m_3DView * m_Model; + glUniformMatrix4fv(maPickingResources.m_ModelID, 1, GL_FALSE, &m_Model[0][0]); glUniformMatrix4fv(maPickingResources.m_MatrixID, 1, GL_FALSE, &aMVP[0][0]); glUniform4fv(maPickingResources.m_2DColorID, 1, &extrude3D.id[0]); } @@ -1461,7 +1475,7 @@ void OpenGL3DRenderer::RenderExtrudeTopSurface(const Extrude3DInfo& extrude3D) glm::mat4 aTranslationMatrix = glm::translate(glm::vec3(trans.x, trans.y, trans.z)); m_Model = aTranslationMatrix * extrude3D.rotation * topTrans * topScale * orgTrans; } - m_Model = m_GlobalScaleMatrix * m_Model; + m_Model = m_ScrollMoveMatrix * m_GlobalScaleMatrix * m_Model; if(!mbPickingMode) { glm::mat3 normalMatrix(m_Model); @@ -1472,6 +1486,7 @@ void OpenGL3DRenderer::RenderExtrudeTopSurface(const Extrude3DInfo& extrude3D) else { glm::mat4 aMVP = m_3DProjection * m_3DView * m_Model; + glUniformMatrix4fv(maPickingResources.m_ModelID, 1, GL_FALSE, &m_Model[0][0]); glUniformMatrix4fv(maPickingResources.m_MatrixID, 1, GL_FALSE, &aMVP[0][0]); glUniform4fv(maPickingResources.m_2DColorID, 1, &extrude3D.id[0]); } @@ -1491,7 +1506,7 @@ void OpenGL3DRenderer::RenderNonRoundedBar(const Extrude3DInfo& extrude3D) glm::mat4 reverseMatrix = glm::translate(glm::vec3(0.0, 0.0, -1.0)); m_Model = m_Model * reverseMatrix; } - m_Model = m_GlobalScaleMatrix * m_Model; + m_Model = m_ScrollMoveMatrix * m_GlobalScaleMatrix * m_Model; if(!mbPickingMode) { glm::mat3 normalMatrix(m_Model); @@ -1502,6 +1517,7 @@ void OpenGL3DRenderer::RenderNonRoundedBar(const Extrude3DInfo& extrude3D) else { glm::mat4 aMVP = m_3DProjection * m_3DView * m_Model; + glUniformMatrix4fv(maPickingResources.m_ModelID, 1, GL_FALSE, &m_Model[0][0]); glUniformMatrix4fv(maPickingResources.m_MatrixID, 1, GL_FALSE, &aMVP[0][0]); glUniform4fv(maPickingResources.m_2DColorID, 1, &extrude3D.id[0]); } @@ -1536,6 +1552,8 @@ void OpenGL3DRenderer::RenderExtrude3DObject() if(mbPickingMode) { glUseProgram(maPickingResources.m_CommonProID); + glUniform1fv(maPickingResources.m_MinCoordXID, 1, &m_fMinCoordX); + glUniform1fv(maPickingResources.m_MaxCoordXID, 1, &m_fMaxCoordX); } else { commit b819026e1994287dd6a27848981aebca805c4e09 Author: weigao <wei...@multicorewareinc.com> Date: Sun Aug 3 17:37:38 2014 +0800 add scroll matrix and bars can scroll Change-Id: Ic821faaa9dc02fd965f46a77136edaf7a87cf6fe diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index 856d079..8b879a5 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -274,6 +274,7 @@ private: sal_uInt32 nUniqueId); void SetHighLightBar(BatchBarInfo &barInfo); void DisableHighLightBar(BatchBarInfo &barInfo); + void CalcScrollMoveMatrix(bool bNewScene); private: struct ShaderResources @@ -458,8 +459,11 @@ private: sal_uInt32 m_uiSelectID; float m_fScrollSpeed; float m_fScrollDistance; + float m_fCurDistance; float m_fMinCoordX; float m_fMaxCoordX; + glm::mat4 m_ScrollMoveMatrix; + bool m_bUndrawFlag; }; } diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 74318e2..51f3a1e 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -113,6 +113,8 @@ OpenGL3DRenderer::OpenGL3DRenderer(): , m_fScrollDistance(0.0f) , m_fMinCoordX(0.0f) , m_fMaxCoordX(0.0f) + , m_fCurDistance(0.0f) + , m_bUndrawFlag(false) { m_Polygon3DInfo.lineOnly = false; m_Polygon3DInfo.twoSidesLighting = false; @@ -2049,6 +2051,7 @@ void OpenGL3DRenderer::ProcessUnrenderedShape(bool bNewScene) glViewport(0, 0, m_iWidth, m_iHeight); ClearBuffer(); CreateSceneBoxView(); + CalcScrollMoveMatrix(bNewScene); //Polygon RenderPolygon3DObject(); //Shape3DExtrudeObject @@ -2300,6 +2303,17 @@ void OpenGL3DRenderer::SetSceneEdge(float minCoordX, float maxCoordX) m_fMaxCoordX = maxCoordX * 0.01; } +void OpenGL3DRenderer::CalcScrollMoveMatrix(bool bNewScene) +{ + if (!maResources.m_bScrollFlag) + return; + if (bNewScene) + m_fCurDistance = -m_fScrollSpeed; + m_fCurDistance += m_fCurDistance >= m_fScrollDistance ? 0.0f : m_fScrollSpeed; + m_ScrollMoveMatrix = glm::translate(glm::vec3(-m_fCurDistance * 0.01, 0.0f, 0.0f)); + m_bUndrawFlag = m_fCurDistance >= m_fScrollDistance ? true : false; +} + void OpenGL3DRenderer::RenderBatchBars(bool bNewScene) { if(bNewScene) @@ -2323,6 +2337,13 @@ void OpenGL3DRenderer::RenderBatchBars(bool bNewScene) glBufferSubData(GL_UNIFORM_BUFFER, m_Batch3DActualSizeLight, sizeof(MaterialParameters), &m_Batchmaterial); CHECK_GL_ERROR(); glBindBuffer(GL_UNIFORM_BUFFER, 0); + if (maResources.m_bScrollFlag) + { + glUniform1fv(maResources.m_3DBatchMinCoordXID, 1, &m_fMinCoordX); + glUniform1fv(maResources.m_3DBatchMaxCoordXID, 1, &m_fMaxCoordX); + glUniform1i(maResources.m_3DBatchUndrawID, m_bUndrawFlag); + glUniformMatrix4fv(maResources.m_3DBatchTransMatrixID, 1, GL_FALSE, &m_ScrollMoveMatrix[0][0]); + } glUniformMatrix4fv(maResources.m_3DBatchViewID, 1, GL_FALSE, &m_3DView[0][0]); glUniformMatrix4fv(maResources.m_3DBatchProjectionID, 1, GL_FALSE, &m_3DProjection[0][0]); CHECK_GL_ERROR(); commit f7fef1c333971ff92e390834df1d0eae8ffadec2 Author: weigao <wei...@multicorewareinc.com> Date: Sun Aug 3 14:38:06 2014 +0800 add scene limit code for scroll mode Change-Id: Id6ce3aa55b286a300476f3609d1e1994ce2c2768 diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 69003e2..3e27e98 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -563,7 +563,7 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer glm::vec3 aBegin; aBegin.y = nYPos; glm::vec3 aEnd = aBegin; - aEnd.x = nXEnd; + aEnd.x = BENCH_MARK_MODE ? (mbScrollFlg ? nXEnd - BAR_SIZE_X : nXEnd) : nXEnd; pAxis->setPosition(aBegin, aEnd); pAxis->setLineColor(COL_BLUE); @@ -583,7 +583,7 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer opengl3D::Rectangle* pRect = static_cast<opengl3D::Rectangle*>(&maShapes.back()); glm::vec3 aTopLeft; glm::vec3 aTopRight = aTopLeft; - aTopRight.x = nXEnd + 2 * BAR_DISTANCE_X; + aTopRight.x = BENCH_MARK_MODE ? (mbScrollFlg ? nXEnd - BAR_SIZE_X : nXEnd + 2 * BAR_DISTANCE_X) : (nXEnd + 2 * BAR_DISTANCE_X); glm::vec3 aBottomRight = aTopRight; aBottomRight.y = nYPos; pRect->setPosition(aTopLeft, aTopRight, aBottomRight); @@ -597,6 +597,8 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer uno::Sequence<OUString> aCats = rCatProvider.getSimpleCategories(); for (sal_Int32 i = 0; i < aCats.getLength(); ++i) { + if (BENCH_MARK_MODE && mbScrollFlg && (i + 1 == aCats.getLength())) + break; maCategories.push_back(aCats[i]); if(aCats[i].isEmpty()) continue; commit af01f14c8752c38b900f3536cd6791778dd2d209 Author: weigao <wei...@multicorewareinc.com> Date: Sun Aug 3 14:03:48 2014 +0800 add scene edge function Change-Id: Id64e3dc06d0d853bc7cece2337dcc927e15a49b6 diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 0e6057b..69003e2 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -589,7 +589,10 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer pRect->setPosition(aTopLeft, aTopRight, aBottomRight); pRect->setFillColor(COL_BLACK); pRect->setLineColor(COL_BLUE); - + if (mbScrollFlg) + mpRenderer->SetSceneEdge(BAR_DISTANCE_X - 0.001f, aTopRight.x - BAR_DISTANCE_X); + else + mpRenderer->SetSceneEdge(-0.001f, aTopRight.x); // Create category texts along X-axis at the bottom. uno::Sequence<OUString> aCats = rCatProvider.getSimpleCategories(); for (sal_Int32 i = 0; i < aCats.getLength(); ++i) diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index 3698b71..856d079 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -212,6 +212,7 @@ public: void SetScroll(); void SetScrollSpeed(float scrollSpeed); void SetScrollDistance(float scrollDistance); + void SetSceneEdge(float minCoordX, float maxCoordX); private: void MoveModelf( const PosVecf3& trans, const PosVecf3& angle, const PosVecf3& scale); @@ -457,6 +458,8 @@ private: sal_uInt32 m_uiSelectID; float m_fScrollSpeed; float m_fScrollDistance; + float m_fMinCoordX; + float m_fMaxCoordX; }; } diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index a3a9edf..74318e2 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -111,6 +111,8 @@ OpenGL3DRenderer::OpenGL3DRenderer(): , m_uiSelectID(0) , m_fScrollSpeed(0.0f) , m_fScrollDistance(0.0f) + , m_fMinCoordX(0.0f) + , m_fMaxCoordX(0.0f) { m_Polygon3DInfo.lineOnly = false; m_Polygon3DInfo.twoSidesLighting = false; @@ -2292,6 +2294,12 @@ void OpenGL3DRenderer::SetScrollDistance(float scrollDistance) m_fScrollDistance = scrollDistance; } +void OpenGL3DRenderer::SetSceneEdge(float minCoordX, float maxCoordX) +{ + m_fMinCoordX = minCoordX * 0.01; + m_fMaxCoordX = maxCoordX * 0.01; +} + void OpenGL3DRenderer::RenderBatchBars(bool bNewScene) { if(bNewScene) commit 2597da2de74620162a9931860ac8b96529f94204 Author: weigao <wei...@multicorewareinc.com> Date: Sun Aug 3 13:32:36 2014 +0800 add functions of setting the speed and distance of bars Change-Id: Id44adf11d445b9c30467e220465528a80ee31b18 diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 47706ae..0e6057b 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -654,6 +654,12 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer } if (BENCH_MARK_MODE && (!mpRenderThread.is())) { + //if scroll the bars, set the speed and distance first + if (mbScrollFlg) + { + mpRenderer->SetScrollSpeed((float)(BAR_SIZE_X + BAR_DISTANCE_X) / (float)miScrollRate); + mpRenderer->SetScrollDistance((float)(BAR_SIZE_X + BAR_DISTANCE_X)); + } Size aSize = mrWindow.GetSizePixel(); mrWindow.getContext().setWinSize(aSize); mpRenderThread = rtl::Reference<RenderThread>(new RenderBenchMarkThread(this)); diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index a82b1bf..3698b71 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -210,6 +210,8 @@ public: void StartClick(sal_uInt32 &selectID); void EndClick(); void SetScroll(); + void SetScrollSpeed(float scrollSpeed); + void SetScrollDistance(float scrollDistance); private: void MoveModelf( const PosVecf3& trans, const PosVecf3& angle, const PosVecf3& scale); @@ -453,6 +455,8 @@ private: std::vector<GLuint> m_Texturelist; bool m_bHighLighting; sal_uInt32 m_uiSelectID; + float m_fScrollSpeed; + float m_fScrollDistance; }; } diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 20b88a7..a3a9edf 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -109,6 +109,8 @@ OpenGL3DRenderer::OpenGL3DRenderer(): , m_iLightNum(0) , m_bHighLighting(false) , m_uiSelectID(0) + , m_fScrollSpeed(0.0f) + , m_fScrollDistance(0.0f) { m_Polygon3DInfo.lineOnly = false; m_Polygon3DInfo.twoSidesLighting = false; @@ -2281,6 +2283,15 @@ void OpenGL3DRenderer::SetScroll() maResources.m_bScrollFlag = true; } +void OpenGL3DRenderer::SetScrollSpeed(float scrollSpeed) +{ + m_fScrollSpeed = scrollSpeed; +} +void OpenGL3DRenderer::SetScrollDistance(float scrollDistance) +{ + m_fScrollDistance = scrollDistance; +} + void OpenGL3DRenderer::RenderBatchBars(bool bNewScene) { if(bNewScene) commit cc20cedcbcad2fd08d48b6ce687de7e3471a7ba3 Author: weigao <wei...@multicorewareinc.com> Date: Sat Aug 2 19:18:11 2014 +0800 add codes to compile the scroll shaders Change-Id: Ib69dbdb012e983e194b7ada04b455c80cf0abbaa diff --git a/chart2/Package_opengl.mk b/chart2/Package_opengl.mk index 6e1e298..820cf35 100644 --- a/chart2/Package_opengl.mk +++ b/chart2/Package_opengl.mk @@ -34,6 +34,8 @@ $(eval $(call gb_Package_add_files,chart2_opengl_shader,$(LIBO_BIN_FOLDER)/openg shape3DVertexShaderV300.glsl \ textFragmentShaderBatch.glsl \ textVertexShaderBatch.glsl \ + shape3DFragmentShaderBatchScroll.glsl \ + shape3DVertexShaderBatchScroll.glsl \ )) # vim: set noet sw=4 ts=4: diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 5cba517..47706ae 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -350,7 +350,7 @@ void RenderBenchMarkThread::UpdateFPS() osl_getSystemTime(&mafpsRenderStartTime); } osl_getSystemTime(&mafpsRenderEndTime); -#if 0 +#if 1 opengl3D::ScreenText tFPS(mpChart->mpRenderer.get(), *(mpChart->mpTextCache), mpChart->mTestString, 0); opengl3D::TextCacheItem tmpTextCache = mpChart->mpTextCache->getText(mpChart->mTestString); #else @@ -414,8 +414,23 @@ GL3DBarChart::GL3DBarChart( mbNeedsNewRender(true), mbCameraInit(false), mbRenderDie(false), - maRenderEvent(EVENT_NONE) + maRenderEvent(EVENT_NONE), + miScrollRate(0), + mbScrollFlg(false) { + if (BENCH_MARK_MODE) + { + char *scrollFrame = getenv("SCROLL_RATE"); + if (scrollFrame) + { + miScrollRate = atoi(scrollFrame); + if (miScrollRate > 0) + { + mbScrollFlg = true; + mpRenderer->SetScroll(); + } + } + } Size aSize = mrWindow.GetSizePixel(); mpRenderer->SetSize(aSize); mrWindow.setRenderer(this); diff --git a/chart2/source/view/inc/GL3DBarChart.hxx b/chart2/source/view/inc/GL3DBarChart.hxx index 38be7bd..a4a92a4 100644 --- a/chart2/source/view/inc/GL3DBarChart.hxx +++ b/chart2/source/view/inc/GL3DBarChart.hxx @@ -138,6 +138,8 @@ private: sal_uInt32 mSelectBarId; Point maClickPos; OUString mTestString; + sal_uInt32 miScrollRate; + bool mbScrollFlg; }; } diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index 9ada8f8..a82b1bf 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -209,6 +209,7 @@ public: void ReleaseTextTexture(); void StartClick(sal_uInt32 &selectID); void EndClick(); + void SetScroll(); private: void MoveModelf( const PosVecf3& trans, const PosVecf3& angle, const PosVecf3& scale); @@ -275,6 +276,7 @@ private: struct ShaderResources { bool m_b330Support; + bool m_bScrollFlag; // 3DProID GLint m_3DProID; GLint m_3DProjectionID; @@ -324,6 +326,10 @@ private: GLint m_3DBatchVertexID; GLint m_3DBatchNormalID; GLint m_3DBatchColorID; + GLint m_3DBatchTransMatrixID; + GLint m_3DBatchMinCoordXID; + GLint m_3DBatchMaxCoordXID; + GLint m_3DBatchUndrawID; //Batch render text bool mbTexBatchSupport; diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index e6f5e95..20b88a7 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -200,6 +200,7 @@ OpenGL3DRenderer::ShaderResources::ShaderResources() , m_BatchTextVertexID(0) , m_BatchTextTexCoordID(0) , m_BatchTextTexID(0) + , m_bScrollFlag(false) { } @@ -230,8 +231,16 @@ void OpenGL3DRenderer::ShaderResources::LoadShaders() m_3DNormalMatrixID = glGetUniformLocation(m_3DProID, "normalMatrix"); m_3DVertexID = glGetAttribLocation(m_3DProID, "vertexPositionModelspace"); m_3DNormalID = glGetAttribLocation(m_3DProID, "vertexNormalModelspace"); - - m_3DBatchProID = OpenGLHelper::LoadShaders("shape3DVertexShaderBatch", "shape3DFragmentShaderBatch"); + if (m_bScrollFlag) + { + m_3DBatchProID = OpenGLHelper::LoadShaders("shape3DVertexShaderBatchScroll", "shape3DFragmentShaderBatchScroll"); + m_3DBatchTransMatrixID = glGetUniformLocation(m_3DBatchProID, "transMatrix"); + m_3DBatchMinCoordXID = glGetUniformLocation(m_3DBatchProID, "minCoordX"); + m_3DBatchMaxCoordXID = glGetUniformLocation(m_3DBatchProID, "maxCoordX"); + m_3DBatchUndrawID = glGetUniformLocation(m_3DBatchProID, "undraw"); + } + else + m_3DBatchProID = OpenGLHelper::LoadShaders("shape3DVertexShaderBatch", "shape3DFragmentShaderBatch"); m_3DBatchProjectionID = glGetUniformLocation(m_3DBatchProID, "P"); m_3DBatchViewID = glGetUniformLocation(m_3DBatchProID, "V"); m_3DBatchModelID = glGetAttribLocation(m_3DBatchProID, "M"); @@ -2267,6 +2276,11 @@ void OpenGL3DRenderer::EndClick() } } +void OpenGL3DRenderer::SetScroll() +{ + maResources.m_bScrollFlag = true; +} + void OpenGL3DRenderer::RenderBatchBars(bool bNewScene) { if(bNewScene) commit d15dcc08b83aac0d30826bbba2e4136e4501eda7 Author: weigao <wei...@multicorewareinc.com> Date: Sat Aug 2 17:36:43 2014 +0800 add bars scroll shaders Change-Id: I006062986534950485ffa9e280caad3e37c2f35f diff --git a/chart2/opengl/shape3DFragmentShaderBatchScroll.glsl b/chart2/opengl/shape3DFragmentShaderBatchScroll.glsl new file mode 100644 index 0000000..33e970f --- /dev/null +++ b/chart2/opengl/shape3DFragmentShaderBatchScroll.glsl @@ -0,0 +1,111 @@ +/* -*- 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/. + */ +#version 330 core +#define MAX_LIGHT_NUM 8 + +in vec3 positionWorldspace; +in vec3 normalCameraspace; +in vec4 fragBarColor; +uniform mat4 V; +uniform int undraw; +uniform float minCoordX; +out vec4 actualColor; +struct MaterialParameters +{ + vec4 ambient; + vec4 diffuse; + vec4 specular; + vec4 materialColor; + + int twoSidesLighting; + float shininess; + float pad; + float pad1; +}; + +layout(std140) uniform GlobalMaterialParameters +{ + MaterialParameters matralParameter; +}Material; + +struct LightSource +{ + vec4 lightColor; + vec4 positionWorldspace; + float lightPower; + float pad1; + float pad2; + float pad3; +}; + +layout(std140) uniform GlobalLights +{ + int lightNum; + vec4 ambient; + LightSource light[MAX_LIGHT_NUM]; +} Lights; + +void main() +{ + if ((positionWorldspace.x <= minCoordX) && (undraw == 1)) + discard; + vec3 colorTotal = vec3(0.0f, 0.0f, 0.0f); + + vec3 vertexPositionCameraspace = (V * vec4(positionWorldspace,1)).xyz; + + vec3 MaterialDiffuseColor = fragBarColor.rgb; + + vec3 normalDirectionCameraspace = normalCameraspace; + vec3 eyeDirectionCameraspace = normalize(vec3(0, 0, 0) - vertexPositionCameraspace); + float attenuation = 1.0; + int i = 0; + vec3 lightDirectionCameraspace; + vec3 vertexToLightSource; + + vec3 lightAmbient = Lights.ambient.rgb * + MaterialDiffuseColor * + Material.matralParameter.ambient.rgb; + + for (i = 0; i < Lights.lightNum; i++) + { + float LightPower = Lights.light[i].lightPower; + lightDirectionCameraspace = normalize((V * Lights.light[i].positionWorldspace).xyz); + + float cosTheta = clamp(dot(normalDirectionCameraspace,lightDirectionCameraspace), 0,1); + vec3 lightDiffuse = LightPower * + attenuation * + Lights.light[i].lightColor.rgb * + MaterialDiffuseColor * + Material.matralParameter.diffuse.rgb * + cosTheta; + + vec3 specularReflection; + if (dot(normalDirectionCameraspace, lightDirectionCameraspace) < 0) + { + specularReflection = vec3(0.0, 0.0, 0.0); + } + else + { + vec3 R = reflect(-lightDirectionCameraspace,normalDirectionCameraspace); + float cosAlpha = clamp(dot(eyeDirectionCameraspace, R), 0,1); + specularReflection = attenuation * + LightPower * + Lights.light[i].lightColor.rgb * + Material.matralParameter.specular.rgb * + MaterialDiffuseColor * + pow(max(0.0, cosAlpha), Material.matralParameter.shininess); + } + colorTotal += lightDiffuse + specularReflection; + + } + colorTotal += lightAmbient; + actualColor = vec4(colorTotal, 1.0); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/opengl/shape3DVertexShader.glsl b/chart2/opengl/shape3DVertexShader.glsl index d0bd693..7f8a6f0 100644 --- a/chart2/opengl/shape3DVertexShader.glsl +++ b/chart2/opengl/shape3DVertexShader.glsl @@ -20,10 +20,10 @@ uniform mat3 normalMatrix; void main() { - gl_Position = P * V * M * vec4(vertexPositionModelspace,1); - positionWorldspace = (M * vec4(vertexPositionModelspace,1)).xyz; + gl_Position = P * V * vec4(positionWorldspace,1); + normalCameraspace = normalize(mat3(V) * normalMatrix * vertexNormalModelspace); } diff --git a/chart2/opengl/shape3DVertexShaderBatchScroll.glsl b/chart2/opengl/shape3DVertexShaderBatchScroll.glsl new file mode 100644 index 0000000..87946f7 --- /dev/null +++ b/chart2/opengl/shape3DVertexShaderBatchScroll.glsl @@ -0,0 +1,39 @@ +/* -*- 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/. + */ +#version 330 core +in vec3 vertexPositionModelspace; +in vec3 vertexNormalModelspace; +in mat4 M; +in mat3 normalMatrix; +in vec4 barColor; + +out vec3 positionWorldspace; +out vec3 normalCameraspace; +out vec4 fragBarColor; + +uniform mat4 P; +uniform mat4 V; +uniform mat4 transMatrix; +uniform float minCoordX; +uniform float maxCoordX; + +void main() +{ + positionWorldspace = (transMatrix * M * vec4(vertexPositionModelspace,1)).xyz; + + positionWorldspace.x = clamp(positionWorldspace.x, minCoordX, maxCoordX); + + gl_Position = P * V * vec4(positionWorldspace,1); + + normalCameraspace = normalize(mat3(V) * normalMatrix * vertexNormalModelspace); + + fragBarColor = barColor; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit 22b45c0adc4693075d3958e1b2d696cb40619f3a Author: weigao <wei...@multicorewareinc.com> Date: Sat Aug 2 16:35:48 2014 +0800 add high light bar code for click Change-Id: I412173d01fe6611027b45169fe4cd9be5b4cc4df diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 3631937..5cba517 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -230,6 +230,8 @@ void RenderBenchMarkThread::MoveCamera() { mnStep = 0; mbExecuting = false; + if (mpChart->maRenderEvent == EVENT_CLICK) + mpChart->mpRenderer->EndClick(); mpChart->maRenderEvent = EVENT_NONE; } } @@ -282,6 +284,7 @@ void RenderBenchMarkThread::MoveToBar() maStepDirection = (maTargetDirection - mpChart->maCameraDirection)/((float)mnStepsTotal); mpChart->maClickCond.set(); mbExecuting = true; + mpChart->mpRenderer->StartClick(mpChart->mSelectBarId); } MoveCamera(); } diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index 3e731a3..9ada8f8 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -93,6 +93,7 @@ struct Extrude3DInfo bool twoSidesLighting; glm::vec4 extrudeColor; glm::vec4 id; + sal_uInt32 orgID; float xScale; float yScale; float zScale; @@ -165,6 +166,8 @@ struct BatchBarInfo std::vector <glm::mat4> modelMatrixList; std::vector <glm::mat3> normalMatrixList; std::vector <glm::vec4> colorList; + std::map<sal_uInt32, unsigned int> mapId2Color; + glm::vec4 selectBarColor; }; class OpenGL3DRenderer @@ -204,6 +207,8 @@ public: void ReleaseShapes(); void ReleaseScreenTextShapes(); void ReleaseTextTexture(); + void StartClick(sal_uInt32 &selectID); + void EndClick(); private: void MoveModelf( const PosVecf3& trans, const PosVecf3& angle, const PosVecf3& scale); @@ -263,6 +268,8 @@ private: glm::vec3 vTopLeft,glm::vec3 vTopRight, glm::vec3 vBottomRight, glm::vec3 vBottomLeft, sal_uInt32 nUniqueId); + void SetHighLightBar(BatchBarInfo &barInfo); + void DisableHighLightBar(BatchBarInfo &barInfo); private: struct ShaderResources @@ -436,7 +443,10 @@ private: glm::vec4 m_LightColor[MAX_LIGHT_NUM]; glm::vec4 m_PositionWorldspace[MAX_LIGHT_NUM]; float m_fLightPower[MAX_LIGHT_NUM]; + //for 3.0 end std::vector<GLuint> m_Texturelist; + bool m_bHighLighting; + sal_uInt32 m_uiSelectID; }; } diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 693a8f9..e6f5e95 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -107,6 +107,8 @@ OpenGL3DRenderer::OpenGL3DRenderer(): , m_Batch3DUBOBuffer(0) , m_Batch3DActualSizeLight(0) , m_iLightNum(0) + , m_bHighLighting(false) + , m_uiSelectID(0) { m_Polygon3DInfo.lineOnly = false; m_Polygon3DInfo.twoSidesLighting = false; @@ -1140,6 +1142,7 @@ void OpenGL3DRenderer::EndAddPolygon3DObjectPoint() void OpenGL3DRenderer::AddShape3DExtrudeObject(bool roundedCorner, sal_uInt32 nColor, sal_uInt32 specular, const glm::mat4& modelMatrix, sal_uInt32 nUniqueId) { m_Extrude3DInfo.id = getColorAsVector(nUniqueId); + m_Extrude3DInfo.orgID = nUniqueId; glm::vec4 tranform = modelMatrix * glm::vec4(0.0, 0.0, 0.0, 1.0); glm::vec4 DirX = modelMatrix * glm::vec4(1.0, 0.0, 0.0, 0.0); glm::vec4 DirY = modelMatrix * glm::vec4(0.0, 1.0, 0.0, 0.0); @@ -2107,6 +2110,7 @@ void OpenGL3DRenderer::ReleaseBatchBarInfo() m_BarSurface[i].modelMatrixList.clear(); m_BarSurface[i].normalMatrixList.clear(); m_BarSurface[i].colorList.clear(); + m_BarSurface[i].mapId2Color.clear(); } } @@ -2145,6 +2149,7 @@ void OpenGL3DRenderer::GetBatchMiddleInfo(const Extrude3DInfo &extrude3D) m_BarSurface[MIDDLE_SURFACE].modelMatrixList.push_back(m_Model); m_BarSurface[MIDDLE_SURFACE].normalMatrixList.push_back(normalInverseTranspos); m_BarSurface[MIDDLE_SURFACE].colorList.push_back(extrude3D.material.materialColor); + m_BarSurface[MIDDLE_SURFACE].mapId2Color[extrude3D.orgID] = m_BarSurface[MIDDLE_SURFACE].colorList.size() - 1; } void OpenGL3DRenderer::GetBatchTopAndFlatInfo(const Extrude3DInfo &extrude3D) @@ -2181,6 +2186,7 @@ void OpenGL3DRenderer::GetBatchTopAndFlatInfo(const Extrude3DInfo &extrude3D) m_BarSurface[TOP_SURFACE].modelMatrixList.push_back(m_Model); m_BarSurface[TOP_SURFACE].normalMatrixList.push_back(normalInverseTranspos); m_BarSurface[TOP_SURFACE].colorList.push_back(extrude3D.material.materialColor); + m_BarSurface[TOP_SURFACE].mapId2Color[extrude3D.orgID] = m_BarSurface[TOP_SURFACE].colorList.size() - 1; glm::mat4 aTranslationMatrix = glm::translate(glm::vec3(trans.x, trans.y, trans.z)); glm::mat4 flatScale = glm::scale(glm::vec3(xyScale, xyScale, xyScale)); @@ -2192,6 +2198,7 @@ void OpenGL3DRenderer::GetBatchTopAndFlatInfo(const Extrude3DInfo &extrude3D) m_BarSurface[FLAT_BOTTOM_SURFACE].modelMatrixList.push_back(m_Model); m_BarSurface[FLAT_BOTTOM_SURFACE].normalMatrixList.push_back(normalInverseTranspos); m_BarSurface[FLAT_BOTTOM_SURFACE].colorList.push_back(extrude3D.material.materialColor); + m_BarSurface[FLAT_BOTTOM_SURFACE].mapId2Color[extrude3D.orgID] = m_BarSurface[FLAT_BOTTOM_SURFACE].colorList.size() - 1; } void OpenGL3DRenderer::GetBatchBarsInfo() @@ -2215,14 +2222,64 @@ void OpenGL3DRenderer::GetBatchBarsInfo() m_BarSurface[0].modelMatrixList.push_back(m_Model); m_BarSurface[0].normalMatrixList.push_back(normalInverseTranspos); m_BarSurface[0].colorList.push_back(extrude3DInfo.material.materialColor); + m_BarSurface[0].mapId2Color[extrude3DInfo.orgID] = m_BarSurface[0].colorList.size() - 1; } } } +void OpenGL3DRenderer::SetHighLightBar(BatchBarInfo &barInfo) +{ + std::map<sal_uInt32, unsigned int> ::iterator it = barInfo.mapId2Color.find(m_uiSelectID); + if (it != barInfo.mapId2Color.end()) + { + unsigned int idx = it->second; + barInfo.selectBarColor = barInfo.colorList[idx]; + barInfo.colorList[idx] = glm::vec4(1.0, 1.0, 1.0, 1.0); + } +} + +void OpenGL3DRenderer::DisableHighLightBar(BatchBarInfo &barInfo) +{ + std::map<sal_uInt32, unsigned int> ::iterator it = barInfo.mapId2Color.find(m_uiSelectID); + if (it != barInfo.mapId2Color.end()) + { + unsigned int idx = it->second; + barInfo.colorList[idx] = barInfo.selectBarColor; + } +} + +void OpenGL3DRenderer::StartClick(sal_uInt32 &selectID) +{ + m_bHighLighting = true; + m_uiSelectID = selectID; + for (unsigned int i = 0; i < 3; i++) + { + SetHighLightBar(m_BarSurface[i]); + } +} + +void OpenGL3DRenderer::EndClick() +{ + m_bHighLighting = false; + for (unsigned int i = 0; i < 3; i++) + { + DisableHighLightBar(m_BarSurface[i]); + } +} + void OpenGL3DRenderer::RenderBatchBars(bool bNewScene) { if(bNewScene) + { GetBatchBarsInfo(); + if (m_bHighLighting) + { + for (unsigned int i = 0; i < 3; i++) + { + SetHighLightBar(m_BarSurface[i]); + } + } + } glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); commit 7dcc31ed61bad3d3d649667f2fb890c878ac69c3 Author: weigao <wei...@multicorewareinc.com> Date: Sat Aug 2 13:11:28 2014 +0800 pick bar path should use the IDs in pick resource Change-Id: Ifd20a7a9ecb85ffc080204f4f3e9f200b07b9a9c diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 19a513e..693a8f9 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -930,7 +930,7 @@ void OpenGL3DRenderer::RenderPolygon3D(const Polygon3DInfo& polygon) { glm::mat4 aMVP = m_3DProjection * m_3DView * m_Model; glUniformMatrix4fv(maPickingResources.m_MatrixID, 1, GL_FALSE, &aMVP[0][0]); - glUniform4fv(maResources.m_2DColorID, 1, &polygon.id[0]); + glUniform4fv(maPickingResources.m_2DColorID, 1, &polygon.id[0]); } GLint maVertexID = mbPickingMode ? maPickingResources.m_2DVertexID : maResources.m_3DVertexID; // 1rst attribute buffer : vertices @@ -1321,7 +1321,7 @@ void OpenGL3DRenderer::RenderExtrudeFlatSurface(const Extrude3DInfo& extrude3D, { glm::mat4 aMVP = m_3DProjection * m_3DView * m_Model; glUniformMatrix4fv(maPickingResources.m_MatrixID, 1, GL_FALSE, &aMVP[0][0]); - glUniform4fv(maResources.m_2DColorID, 1, &extrude3D.id[0]); + glUniform4fv(maPickingResources.m_2DColorID, 1, &extrude3D.id[0]); } glDrawElements(GL_TRIANGLES, extrude3D.size[surIndex], GL_UNSIGNED_SHORT, reinterpret_cast<GLvoid*>(extrude3D.startIndex[surIndex])); @@ -1365,7 +1365,7 @@ void OpenGL3DRenderer::RenderExtrudeBottomSurface(const Extrude3DInfo& extrude3D { glm::mat4 aMVP = m_3DProjection * m_3DView * m_Model; glUniformMatrix4fv(maPickingResources.m_MatrixID, 1, GL_FALSE, &aMVP[0][0]); - glUniform4fv(maResources.m_2DColorID, 1, &extrude3D.id[0]); + glUniform4fv(maPickingResources.m_2DColorID, 1, &extrude3D.id[0]); } glDrawElements(GL_TRIANGLES, extrude3D.size[BOTTOM_SURFACE], GL_UNSIGNED_SHORT, reinterpret_cast<GLvoid*>(extrude3D.startIndex[BOTTOM_SURFACE])); } @@ -1410,7 +1410,7 @@ void OpenGL3DRenderer::RenderExtrudeMiddleSurface(const Extrude3DInfo& extrude3D { glm::mat4 aMVP = m_3DProjection * m_3DView * m_Model; glUniformMatrix4fv(maPickingResources.m_MatrixID, 1, GL_FALSE, &aMVP[0][0]); - glUniform4fv(maResources.m_2DColorID, 1, &extrude3D.id[0]); + glUniform4fv(maPickingResources.m_2DColorID, 1, &extrude3D.id[0]); } glDrawElements(GL_TRIANGLES, extrude3D.size[MIDDLE_SURFACE], GL_UNSIGNED_SHORT, reinterpret_cast<GLvoid*>(extrude3D.startIndex[MIDDLE_SURFACE])); } @@ -1455,7 +1455,7 @@ void OpenGL3DRenderer::RenderExtrudeTopSurface(const Extrude3DInfo& extrude3D) { glm::mat4 aMVP = m_3DProjection * m_3DView * m_Model; glUniformMatrix4fv(maPickingResources.m_MatrixID, 1, GL_FALSE, &aMVP[0][0]); - glUniform4fv(maResources.m_2DColorID, 1, &extrude3D.id[0]); + glUniform4fv(maPickingResources.m_2DColorID, 1, &extrude3D.id[0]); } glDrawElements(GL_TRIANGLES, extrude3D.size[TOP_SURFACE], GL_UNSIGNED_SHORT, reinterpret_cast<GLvoid*>(extrude3D.startIndex[TOP_SURFACE])); } @@ -1485,7 +1485,7 @@ void OpenGL3DRenderer::RenderNonRoundedBar(const Extrude3DInfo& extrude3D) { glm::mat4 aMVP = m_3DProjection * m_3DView * m_Model; glUniformMatrix4fv(maPickingResources.m_MatrixID, 1, GL_FALSE, &aMVP[0][0]); - glUniform4fv(maResources.m_2DColorID, 1, &extrude3D.id[0]); + glUniform4fv(maPickingResources.m_2DColorID, 1, &extrude3D.id[0]); } glDrawArrays(GL_TRIANGLES, 0, 36); } @@ -1549,7 +1549,7 @@ void OpenGL3DRenderer::RenderExtrude3DObject() GLuint normalBuf = extrude3DInfo.rounded ? m_CubeNormalBuf : m_BoundBoxNormal; if(mbPickingMode) - glUniform4fv(maResources.m_2DColorID, 1, &extrude3DInfo.id[0]); + glUniform4fv(maPickingResources.m_2DColorID, 1, &extrude3DInfo.id[0]); // 1st attribute buffer : vertices GLint aVertexID = mbPickingMode ? maPickingResources.m_2DVertexID : maResources.m_3DVertexID; commit 00f097b627e7106dca2813371a524e260a4baddd Author: weigao <wei...@multicorewareinc.com> Date: Fri Aug 1 21:05:08 2014 +0800 test patch of creating bitmap in render thread Change-Id: Ic0879dba3ad6a80359931edb65f0b72c1cc4d597 diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 2924eeb..3631937 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -171,6 +171,7 @@ void RenderAnimationThread::execute() */ renderFrame(); } + mpChart->mpRenderer->ReleaseScreenTextShapes(); } class RenderBenchMarkThread : public RenderThread @@ -178,8 +179,13 @@ class RenderBenchMarkThread : public RenderThread public: RenderBenchMarkThread(GL3DBarChart * pChart): RenderThread(pChart), - mbExecuting(false) + mbExecuting(false), + miFrameCount(0) { + osl_getSystemTime(&mafpsRenderStartTime); + osl_getSystemTime(&mafpsRenderEndTime); + osl_getSystemTime(&maScreenTextUpdateStartTime); + osl_getSystemTime(&maScreenTextUpdateEndTime); } protected: virtual void execute() SAL_OVERRIDE; @@ -190,6 +196,9 @@ private: void MoveToDefault(); void MoveToCorner(); void ProcessScroll(); + void UpdateScreenText(); + void UpdateFPS(); + int calcTimeInterval(TimeValue &startTime, TimeValue &endTime); private: glm::vec3 maStartPos; glm::vec3 maEndPos; @@ -199,6 +208,12 @@ private: glm::vec3 maStepDirection; size_t mnStep; size_t mnStepsTotal; + TimeValue mafpsRenderStartTime; + TimeValue mafpsRenderEndTime; + TimeValue maScreenTextUpdateStartTime; + TimeValue maScreenTextUpdateEndTime; + int miFrameCount; + OUString maFPS; }; void RenderBenchMarkThread::MoveCamera() @@ -309,6 +324,53 @@ void RenderBenchMarkThread::ProcessMouseEvent() } } +int RenderBenchMarkThread::calcTimeInterval(TimeValue &startTime, TimeValue &endTime) +{ + TimeValue aTime; + aTime.Seconds = endTime.Seconds - startTime.Seconds - 1; + aTime.Nanosec = 1000000000 + endTime.Nanosec - startTime.Nanosec; + aTime.Seconds += aTime.Nanosec / 1000000000; + aTime.Nanosec %= 1000000000; + return aTime.Seconds * 1000+aTime.Nanosec / 1000000; +} + +void RenderBenchMarkThread::UpdateFPS() +{ + int aDeltaMs = calcTimeInterval(mafpsRenderStartTime, mafpsRenderEndTime); + if(aDeltaMs >= 500) + { + osl_getSystemTime(&mafpsRenderEndTime); + aDeltaMs = calcTimeInterval(mafpsRenderStartTime, mafpsRenderEndTime); + int iFPS = miFrameCount * 1000 / aDeltaMs; + maFPS = OUString("Render FPS: ") + OUString::number(iFPS); + miFrameCount = 0; + osl_getSystemTime(&mafpsRenderStartTime); + } + osl_getSystemTime(&mafpsRenderEndTime); +#if 0 + opengl3D::ScreenText tFPS(mpChart->mpRenderer.get(), *(mpChart->mpTextCache), mpChart->mTestString, 0); + opengl3D::TextCacheItem tmpTextCache = mpChart->mpTextCache->getText(mpChart->mTestString); +#else + opengl3D::ScreenText tFPS(mpChart->mpRenderer.get(), *(mpChart->mpTextCache), maFPS, 0); + opengl3D::TextCacheItem tmpTextCache = mpChart->mpTextCache->getText(maFPS); +#endif + float rectWidth = (float)tmpTextCache.maSize.Width() / (float)tmpTextCache.maSize.Height() * 0.05; + tFPS.setPosition(glm::vec2(-0.99f, 0.99f), glm::vec2(-0.99f + rectWidth, 0.89f)); + tFPS.render(); +} + +void RenderBenchMarkThread::UpdateScreenText() +{ + int aDeltaMs = calcTimeInterval(maScreenTextUpdateStartTime, maScreenTextUpdateEndTime); + if (aDeltaMs >= 20) + { + mpChart->mpRenderer->ReleaseScreenTextShapes(); + UpdateFPS(); + osl_getSystemTime(&maScreenTextUpdateStartTime); + } + osl_getSystemTime(&maScreenTextUpdateEndTime); +} + void RenderBenchMarkThread::execute() { while (true) @@ -317,6 +379,7 @@ void RenderBenchMarkThread::execute() osl::MutexGuard aGuard(mpChart->maMutex); if (mpChart->mbRenderDie) break; + UpdateScreenText(); ProcessMouseEvent(); renderFrame(); } @@ -328,6 +391,7 @@ void RenderBenchMarkThread::execute() nTV.Nanosec = 1000000; osl_waitThread(&nTV); #endif + miFrameCount++; } } @@ -534,6 +598,7 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer maShapes.push_back(new opengl3D::Text(mpRenderer.get(), *mpTextCache, aCats[i], nId)); + mTestString = aCats[i]; nId += ID_STEP; p = static_cast<opengl3D::Text*>(&maShapes.back()); aTopLeft.x = nXPos + TEXT_HEIGHT + 0.5 * BAR_SIZE_X; diff --git a/chart2/source/view/inc/GL3DBarChart.hxx b/chart2/source/view/inc/GL3DBarChart.hxx index 1969290..38be7bd 100644 --- a/chart2/source/view/inc/GL3DBarChart.hxx +++ b/chart2/source/view/inc/GL3DBarChart.hxx @@ -137,6 +137,7 @@ private: RenderEventType maRenderEvent; sal_uInt32 mSelectBarId; Point maClickPos; + OUString mTestString; }; } diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 1243853..19a513e 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -2115,7 +2115,7 @@ void OpenGL3DRenderer::ReleaseShapes() ReleasePolygonShapes(); ReleaseExtrude3DShapes(); ReleaseTextShapes(); - ReleaseScreenTextShapes(); + //ReleaseScreenTextShapes(); ReleaseBatchBarInfo(); ReleaseTextShapesBatch(); } commit f9d2de854b737f98d4d74a2885965c7df2d52da8 Author: weigao <wei...@multicorewareinc.com> Date: Fri Aug 1 14:39:57 2014 +0800 texture should be released in render thread Change-Id: I4ae03163a2bf9aff831e6fd3a8c1c91fa3eba675 diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 8a10e70..2924eeb 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -99,6 +99,7 @@ void RenderThread::renderFrame() mpChart->mpRenderer->SetSize(aSize); if(mpChart->mbNeedsNewRender) { + mpChart->mpRenderer->ReleaseTextTexture(); for(boost::ptr_vector<opengl3D::Renderable3DObject>::iterator itr = mpChart->maShapes.begin(), itrEnd = mpChart->maShapes.end(); itr != itrEnd; ++itr) { diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index ffad3e0..3e731a3 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -203,6 +203,7 @@ public: void ReleaseShapes(); void ReleaseScreenTextShapes(); + void ReleaseTextTexture(); private: void MoveModelf( const PosVecf3& trans, const PosVecf3& angle, const PosVecf3& scale); @@ -435,6 +436,7 @@ private: glm::vec4 m_LightColor[MAX_LIGHT_NUM]; glm::vec4 m_PositionWorldspace[MAX_LIGHT_NUM]; float m_fLightPower[MAX_LIGHT_NUM]; + std::vector<GLuint> m_Texturelist; }; } diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index f1769c1..1243853 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -1707,6 +1707,7 @@ void OpenGL3DRenderer::CreateTextTextureSingle(const boost::shared_array<sal_uIn glBindTexture(GL_TEXTURE_2D, 0); CHECK_GL_ERROR(); m_TextInfoList.push_back(aTextInfo); + m_Texturelist.push_back(aTextInfo.texture); } @@ -1796,12 +1797,16 @@ void OpenGL3DRenderer::CreateTextTexture(const boost::shared_array<sal_uInt8> &b void OpenGL3DRenderer::ReleaseTextShapes() { - for (size_t i = 0; i < m_TextInfoList.size(); i++) + m_TextInfoList.clear(); +} + +void OpenGL3DRenderer::ReleaseTextTexture() +{ + for (size_t i = 0; i < m_Texturelist.size(); i++) { - TextInfo &textInfo = m_TextInfoList[i]; - glDeleteTextures(1, &textInfo.texture); + glDeleteTextures(1, &m_Texturelist[i]); } - m_TextInfoList.clear(); + m_Texturelist.clear(); } void OpenGL3DRenderer::ReleaseScreenTextShapes() commit b757ac0b20ed2c6d34c0fee9ba638887fd8e7743 Author: weigao <wei...@multicorewareinc.com> Date: Fri Aug 1 14:36:15 2014 +0800 fix the light power in 3.0 version Change-Id: I0a8e86f513386b7ce0eebb38d3257c275e86085c diff --git a/chart2/opengl/shape3DFragmentShaderV300.glsl b/chart2/opengl/shape3DFragmentShaderV300.glsl index 31a32e0..fee81d4 100644 --- a/chart2/opengl/shape3DFragmentShaderV300.glsl +++ b/chart2/opengl/shape3DFragmentShaderV300.glsl @@ -41,8 +41,7 @@ void main() vec3 totalAmbient = lightAmbient.rgb * MaterialDiffuseColor * - materialAmbient.rgb - * 5.0; + materialAmbient.rgb; if ((twoSidesLighting == 1) && (!gl_FrontFacing)) { commit 5d50115229c21cbd865ba9d54e7c4626b7e1dcc3 Author: weigao <wei...@multicorewareinc.com> Date: Sat Jul 26 19:29:44 2014 +0800 add drag animation for benchmark Change-Id: Ie9146272dd88b7b51edace7023048629874c360f diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 6e66ca7..8a10e70 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -180,7 +180,6 @@ public: mbExecuting(false) { } - protected: virtual void execute() SAL_OVERRIDE; private: @@ -194,7 +193,6 @@ private: glm::vec3 maStartPos; glm::vec3 maEndPos; sal_Int32 mnSteps; - bool mbExecuting; glm::vec3 maStep; glm::vec3 maStepDirection; commit 483cfd6ff77cdcdfe75085835ee51686e9d5d5aa Author: weigao <wei...@multicorewareinc.com> Date: Fri Jul 25 03:59:11 2014 +0200 add click event animation for benchmark Change-Id: I1e5a879fa315a775a77d3fddc6de1d02963b5f7d diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 80b40fe..6e66ca7 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -193,6 +193,8 @@ private: private: glm::vec3 maStartPos; glm::vec3 maEndPos; + sal_Int32 mnSteps; + bool mbExecuting; glm::vec3 maStep; glm::vec3 maStepDirection; @@ -288,7 +290,6 @@ void RenderBenchMarkThread::ProcessScroll() mpChart->maRenderEvent = EVENT_NONE; } - void RenderBenchMarkThread::ProcessMouseEvent() { if (mpChart->maRenderEvent == EVENT_CLICK) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits