summaryrefslogtreecommitdiff
path: root/chart2
diff options
context:
space:
mode:
authorweigao <weigao@multicorewareinc.com>2014-08-03 17:37:38 +0800
committerMarkus Mohrhard <markus.mohrhard@collabora.co.uk>2014-08-06 20:45:12 +0200
commitb819026e1994287dd6a27848981aebca805c4e09 (patch)
tree10376d8c5a811d26b07b047c1f0b33c48ba50f8c /chart2
parentf7fef1c333971ff92e390834df1d0eae8ffadec2 (diff)
add scroll matrix and bars can scroll
Change-Id: Ic821faaa9dc02fd965f46a77136edaf7a87cf6fe
Diffstat (limited to 'chart2')
-rw-r--r--chart2/source/view/inc/GL3DRenderer.hxx4
-rw-r--r--chart2/source/view/main/GL3DRenderer.cxx21
2 files changed, 25 insertions, 0 deletions
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();