diff options
author | weigao <weigao@multicorewareinc.com> | 2014-06-14 08:00:02 -0700 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2014-06-17 08:28:20 +0200 |
commit | 33a40a317ade7dd3fc1b2d3dd6662820e104e67c (patch) | |
tree | a56c44fb0fd153931ac941e2b27c8eb39ed40520 | |
parent | 3ad748accd49b128edeb979969d2100af8902624 (diff) |
add shaders for 3.0 glsl version
Change-Id: I52dd49132a9b625e8be51b4d5feb7e567ffa0a6e
-rw-r--r-- | chart2/Package_opengl.mk | 2 | ||||
-rw-r--r-- | chart2/opengl/shape3DFragmentShaderV300.glsl | 87 | ||||
-rw-r--r-- | chart2/opengl/shape3DVertexShaderV300.glsl | 29 |
3 files changed, 118 insertions, 0 deletions
diff --git a/chart2/Package_opengl.mk b/chart2/Package_opengl.mk index d8f9fa72ef7c..3d68a932cb2a 100644 --- a/chart2/Package_opengl.mk +++ b/chart2/Package_opengl.mk @@ -30,6 +30,8 @@ $(eval $(call gb_Package_add_files,chart2_opengl_shader,$(LIBO_BIN_FOLDER)/openg renderTextureFragmentShader.glsl \ shape3DFragmentShaderBatch.glsl \ shape3DVertexShaderBatch.glsl \ + shape3DFragmentShaderV300.glsl \ + shape3DVertexShaderV300.glsl \ )) # vim: set noet sw=4 ts=4: diff --git a/chart2/opengl/shape3DFragmentShaderV300.glsl b/chart2/opengl/shape3DFragmentShaderV300.glsl new file mode 100644 index 000000000000..31a32e04232a --- /dev/null +++ b/chart2/opengl/shape3DFragmentShaderV300.glsl @@ -0,0 +1,87 @@ +/* -*- 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/. + */ +#define MAX_LIGHT_NUM 8 + +varying vec3 positionWorldspace; +varying vec3 normalCameraspace; + +uniform mat4 V; +uniform vec4 materialAmbient; +uniform vec4 materialDiffuse; +uniform vec4 materialSpecular; +uniform vec4 materialColor; +uniform int twoSidesLighting; +uniform float materialShininess; +uniform vec4 lightColor[MAX_LIGHT_NUM]; +uniform vec4 lightPosWorldspace[MAX_LIGHT_NUM]; +uniform float lightPower[MAX_LIGHT_NUM]; +uniform int lightNum; +uniform vec4 lightAmbient; + +void main() +{ + vec3 colorTotal = vec3(0.0f, 0.0f, 0.0f); + + vec3 vertexPositionCameraspace = (V * vec4(positionWorldspace,1)).xyz; + + vec3 MaterialDiffuseColor = materialColor.rgb; + + vec3 normalDirectionCameraspace = normalCameraspace; + vec3 eyeDirectionCameraspace = normalize(vec3(0, 0, 0) - vertexPositionCameraspace); + float attenuation = 1.0; + int i = 0; + vec3 lightDirectionCameraspace; + vec3 vertexToLightSource; + + vec3 totalAmbient = lightAmbient.rgb * + MaterialDiffuseColor * + materialAmbient.rgb + * 5.0; + + if ((twoSidesLighting == 1) && (!gl_FrontFacing)) + { + normalDirectionCameraspace = -normalDirectionCameraspace; + } + for (i = 0; i < lightNum; i++) + { + float LightPower = lightPower[i]; + lightDirectionCameraspace = normalize((V * lightPosWorldspace[i]).xyz); + + float cosTheta = clamp(dot(normalDirectionCameraspace,lightDirectionCameraspace), 0,1); + vec3 lightDiffuse = LightPower * + attenuation * + lightColor[i].rgb * + MaterialDiffuseColor * + materialDiffuse.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 * + lightColor[i].rgb * + materialSpecular.rgb * + MaterialDiffuseColor * + pow(max(0.0, cosAlpha), materialShininess); + } + colorTotal += lightDiffuse + specularReflection; + + } + colorTotal += totalAmbient; + gl_FragColor = vec4(colorTotal, 1.0); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/opengl/shape3DVertexShaderV300.glsl b/chart2/opengl/shape3DVertexShaderV300.glsl new file mode 100644 index 000000000000..6737004cb914 --- /dev/null +++ b/chart2/opengl/shape3DVertexShaderV300.glsl @@ -0,0 +1,29 @@ +/* -*- 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/. + */ +attribute vec3 vertexPositionModelspace; +attribute vec3 vertexNormalModelspace; + +varying vec3 positionWorldspace; +varying vec3 normalCameraspace; + +uniform mat4 P; +uniform mat4 M; +uniform mat4 V; +uniform mat3 normalMatrix; + +void main() +{ + gl_Position = P * V * M * vec4(vertexPositionModelspace,1); + + positionWorldspace = (M * vec4(vertexPositionModelspace,1)).xyz; + + normalCameraspace = normalize(mat3(V) * normalMatrix * vertexNormalModelspace); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |