summaryrefslogtreecommitdiffstats
path: root/opengl
diff options
context:
space:
mode:
authorAndroid Code Review <code-review@android.com>2009-08-25 14:37:12 -0700
committerAndroid Code Review <code-review@android.com>2009-08-25 14:37:12 -0700
commitcdda8cd6c2a4fe30d51fa72adeaa8dbeb595ba59 (patch)
tree369c335621ff89c5c70389c5183b933244051c6e /opengl
parent8dc6baa480453692cd0094ae4d21dccb990955d7 (diff)
parentb94878cfb695296afb30456b5bdd5927951a66ed (diff)
downloadframeworks_native-cdda8cd6c2a4fe30d51fa72adeaa8dbeb595ba59.zip
frameworks_native-cdda8cd6c2a4fe30d51fa72adeaa8dbeb595ba59.tar.gz
frameworks_native-cdda8cd6c2a4fe30d51fa72adeaa8dbeb595ba59.tar.bz2
Merge change 11106
* changes: Calculate specular lighting correctly
Diffstat (limited to 'opengl')
-rw-r--r--opengl/libagl/light.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/opengl/libagl/light.cpp b/opengl/libagl/light.cpp
index 8ae32cc..f211bca 100644
--- a/opengl/libagl/light.cpp
+++ b/opengl/libagl/light.cpp
@@ -216,6 +216,8 @@ static inline void light_picker(ogles_context_t* c)
static inline void validate_light_mvi(ogles_context_t* c)
{
uint32_t en = c->lighting.enabledLights;
+ // Vector from object to viewer, in eye coordinates
+ const vec4_t eyeViewer = { 0, 0, 0x1000, 0 };
while (en) {
const int i = 31 - gglClz(en);
en &= ~(1<<i);
@@ -223,6 +225,9 @@ static inline void validate_light_mvi(ogles_context_t* c)
c->transforms.mvui.point4(&c->transforms.mvui,
&l.objPosition, &l.position);
vnorm3(l.normalizedObjPosition.v, l.objPosition.v);
+ c->transforms.mvui.point4(&c->transforms.mvui,
+ &l.objViewer, &eyeViewer);
+ vnorm3(l.objViewer.v, l.objViewer.v);
}
}
@@ -379,9 +384,9 @@ void lightVertex(ogles_context_t* c, vertex_t* v)
// specular
if (ggl_unlikely(s && l.implicitSpecular.v[3])) {
vec4_t h;
- h.x = d.x;
- h.y = d.y;
- h.z = d.z + 0x10000;
+ h.x = d.x + l.objViewer.x;
+ h.y = d.y + l.objViewer.y;
+ h.z = d.z + l.objViewer.z;
vnorm3(h.v, h.v);
s = dot3(n.v, h.v);
s = (s<0) ? (twoSide?(-s):0) : s;