From b819026e1994287dd6a27848981aebca805c4e09 Mon Sep 17 00:00:00 2001 From: weigao Date: Sun, 3 Aug 2014 17:37:38 +0800 Subject: add scroll matrix and bars can scroll Change-Id: Ic821faaa9dc02fd965f46a77136edaf7a87cf6fe --- chart2/source/view/inc/GL3DRenderer.hxx | 4 ++++ chart2/source/view/main/GL3DRenderer.cxx | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+) (limited to 'chart2') diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index 856d0796e33b..8b879a5cd8d4 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 74318e28bf11..51f3a1e5ea56 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(); -- cgit