summaryrefslogtreecommitdiff
path: root/chart2
diff options
context:
space:
mode:
authorweigao <weigao@multicorewareinc.com>2014-08-03 18:55:54 +0800
committerMarkus Mohrhard <markus.mohrhard@collabora.co.uk>2014-08-06 20:45:13 +0200
commite3d4a488a0c3eab68d4c77139f8d9b203e1ddafc (patch)
tree5566a8db574c99e0b5b7a1db6376314322d0ce86 /chart2
parent495d53b1dc0f3c32e0b76344775b9fc728e09fe5 (diff)
make GL 3.0 support bars scroll
Change-Id: I71d8d94f410e6c67d0e188ea2e0f79eb151758e0
Diffstat (limited to 'chart2')
-rw-r--r--chart2/opengl/shape3DFragmentShaderV300.glsl4
-rw-r--r--chart2/opengl/shape3DVertexShaderV300.glsl8
-rw-r--r--chart2/source/view/inc/GL3DRenderer.hxx3
-rw-r--r--chart2/source/view/main/GL3DRenderer.cxx11
4 files changed, 24 insertions, 2 deletions
diff --git a/chart2/opengl/shape3DFragmentShaderV300.glsl b/chart2/opengl/shape3DFragmentShaderV300.glsl
index fee81d469d3d..05e27701c807 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 6737004cb914..a8da294fb3cd 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 5a8b6ece4c81..c993ecdbb0f5 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 b09238d64f58..57f016b95f6b 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);