summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/shaders
diff options
context:
space:
mode:
authorTomi Korpipää <tomi.korpipaa@digia.com>2013-09-18 08:34:05 +0300
committerTomi Korpipää <tomi.korpipaa@digia.com>2013-09-18 08:43:53 +0300
commit585e66106203dd011ec0777e64d6e4cfc6e9c5ed (patch)
treed080c1f3fb2fe61f5e10c02fa604a2ca0a4da3cf /src/datavisualization/engine/shaders
parent4daf244e9745a28b917b0976e39a60d73776c4aa (diff)
ES2 shader support for surface
Task-number: QTRD-2290 Change-Id: I52a7fbd8d72e6cd4f73dd3072103cdbf518df321 Change-Id: I52a7fbd8d72e6cd4f73dd3072103cdbf518df321 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src/datavisualization/engine/shaders')
-rw-r--r--src/datavisualization/engine/shaders/surface.vert2
-rw-r--r--src/datavisualization/engine/shaders/surfaceGrid.frag10
-rw-r--r--src/datavisualization/engine/shaders/surfaceGrid.vert20
-rw-r--r--src/datavisualization/engine/shaders/surface_ES2.frag39
4 files changed, 39 insertions, 32 deletions
diff --git a/src/datavisualization/engine/shaders/surface.vert b/src/datavisualization/engine/shaders/surface.vert
index cbfb7569..a44d413b 100644
--- a/src/datavisualization/engine/shaders/surface.vert
+++ b/src/datavisualization/engine/shaders/surface.vert
@@ -1,5 +1,3 @@
-#version 120
-
attribute highp vec3 vertexPosition_mdl;
attribute highp vec2 vertexUV;
attribute highp vec3 vertexNormal_mdl;
diff --git a/src/datavisualization/engine/shaders/surfaceGrid.frag b/src/datavisualization/engine/shaders/surfaceGrid.frag
index 20b923fb..1658b316 100644
--- a/src/datavisualization/engine/shaders/surfaceGrid.frag
+++ b/src/datavisualization/engine/shaders/surfaceGrid.frag
@@ -1,14 +1,4 @@
-varying highp vec2 UV;
-varying highp vec2 coords_mdl;
-varying highp vec3 position_wrld;
-varying highp vec3 normal_cmr;
-varying highp vec3 eyeDirection_cmr;
-varying highp vec3 lightDirection_cmr;
-
-uniform highp vec3 lightPosition_wrld;
uniform highp vec3 color_mdl;
-uniform highp float lightStrength;
-uniform highp float ambientStrength;
void main() {
gl_FragColor.rgb = color_mdl;
diff --git a/src/datavisualization/engine/shaders/surfaceGrid.vert b/src/datavisualization/engine/shaders/surfaceGrid.vert
index efb40862..5582d633 100644
--- a/src/datavisualization/engine/shaders/surfaceGrid.vert
+++ b/src/datavisualization/engine/shaders/surfaceGrid.vert
@@ -1,26 +1,6 @@
attribute highp vec3 vertexPosition_mdl;
-attribute highp vec2 vertexUV;
-attribute highp vec3 vertexNormal_mdl;
-
uniform highp mat4 MVP;
-uniform highp mat4 V;
-uniform highp mat4 M;
-uniform highp mat4 itM;
-uniform highp vec3 lightPosition_wrld;
-
-varying highp vec3 position_wrld;
-varying highp vec3 normal_cmr;
-varying highp vec3 eyeDirection_cmr;
-varying highp vec3 lightDirection_cmr;
-varying highp vec2 coords_mdl;
void main() {
gl_Position = MVP * vec4(vertexPosition_mdl, 1.0);
- coords_mdl = vertexPosition_mdl.xy;
- position_wrld = (M * vec4(vertexPosition_mdl, 1.0)).xyz;
- vec3 vertexPosition_cmr = (V * M * vec4(vertexPosition_mdl, 1.0)).xyz;
- eyeDirection_cmr = vec3(0.0, 0.0, 0.0) - vertexPosition_cmr;
- vec3 lightPosition_cmr = (V * vec4(lightPosition_wrld, 1.0)).xyz;
- lightDirection_cmr = lightPosition_cmr + eyeDirection_cmr;
- normal_cmr = (V * itM * vec4(vertexNormal_mdl, 0.0)).xyz;
}
diff --git a/src/datavisualization/engine/shaders/surface_ES2.frag b/src/datavisualization/engine/shaders/surface_ES2.frag
new file mode 100644
index 00000000..a9aec528
--- /dev/null
+++ b/src/datavisualization/engine/shaders/surface_ES2.frag
@@ -0,0 +1,39 @@
+varying highp vec2 UV;
+varying highp vec3 coords_mdl;
+varying highp vec3 position_wrld;
+varying highp vec3 normal_cmr;
+varying highp vec3 eyeDirection_cmr;
+varying highp vec3 lightDirection_cmr;
+
+uniform sampler2D textureSampler;
+uniform highp vec3 lightPosition_wrld;
+uniform highp float lightStrength;
+uniform highp float ambientStrength;
+
+void main() {
+ highp vec2 gradientUV = vec2(0.5, (coords_mdl.y + 1.0) / 2.0);
+ highp vec3 materialDiffuseColor = texture2D(textureSampler, gradientUV).xyz;
+ highp vec3 materialAmbientColor = vec3(ambientStrength, ambientStrength, ambientStrength) * materialDiffuseColor;
+ highp vec3 materialSpecularColor = vec3(1.0, 1.0, 1.0);
+
+ highp float distance = length(lightPosition_wrld - position_wrld);
+
+ highp vec3 n = normalize(normal_cmr);
+ highp vec3 l = normalize(lightDirection_cmr);
+ highp float cosTheta = dot(n, l);
+ if (cosTheta < 0.0) cosTheta = 0.0;
+ else if (cosTheta > 1.0) cosTheta = 1.0;
+
+ highp vec3 E = normalize(eyeDirection_cmr);
+ highp vec3 R = reflect(-l, n);
+ highp float cosAlpha = dot(E, R);
+ if (cosAlpha < 0.0) cosAlpha = 0.0;
+ else if (cosAlpha > 1.0) cosAlpha = 1.0;
+
+ gl_FragColor.rgb =
+ materialAmbientColor +
+ materialDiffuseColor * lightStrength * cosTheta * cosTheta / distance +
+ materialSpecularColor * lightStrength * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha / distance;
+ gl_FragColor.a = 1.0;
+}
+