diff options
author | weigao <weigao@multicorewareinc.com> | 2014-08-02 17:36:43 +0800 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@collabora.co.uk> | 2014-08-06 20:45:11 +0200 |
commit | d15dcc08b83aac0d30826bbba2e4136e4501eda7 (patch) | |
tree | 451d327d4d521a40bfb46f298f514142ef350a0a /chart2/opengl | |
parent | 22b45c0adc4693075d3958e1b2d696cb40619f3a (diff) |
add bars scroll shaders
Change-Id: I006062986534950485ffa9e280caad3e37c2f35f
Diffstat (limited to 'chart2/opengl')
-rw-r--r-- | chart2/opengl/shape3DFragmentShaderBatchScroll.glsl | 111 | ||||
-rw-r--r-- | chart2/opengl/shape3DVertexShader.glsl | 4 | ||||
-rw-r--r-- | chart2/opengl/shape3DVertexShaderBatchScroll.glsl | 39 |
3 files changed, 152 insertions, 2 deletions
diff --git a/chart2/opengl/shape3DFragmentShaderBatchScroll.glsl b/chart2/opengl/shape3DFragmentShaderBatchScroll.glsl new file mode 100644 index 000000000000..33e970fb918c --- /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 d0bd69370a49..7f8a6f06e858 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 000000000000..87946f7d076b --- /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: */ |