diff options
author | weigao <weigao@multicorewareinc.com> | 2014-08-03 18:55:54 +0800 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@collabora.co.uk> | 2014-08-06 20:45:13 +0200 |
commit | e3d4a488a0c3eab68d4c77139f8d9b203e1ddafc (patch) | |
tree | 5566a8db574c99e0b5b7a1db6376314322d0ce86 /chart2 | |
parent | 495d53b1dc0f3c32e0b76344775b9fc728e09fe5 (diff) |
make GL 3.0 support bars scroll
Change-Id: I71d8d94f410e6c67d0e188ea2e0f79eb151758e0
Diffstat (limited to 'chart2')
-rw-r--r-- | chart2/opengl/shape3DFragmentShaderV300.glsl | 4 | ||||
-rw-r--r-- | chart2/opengl/shape3DVertexShaderV300.glsl | 8 | ||||
-rw-r--r-- | chart2/source/view/inc/GL3DRenderer.hxx | 3 | ||||
-rw-r--r-- | chart2/source/view/main/GL3DRenderer.cxx | 11 |
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); |