Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cdda8cd6 authored by Android Code Review's avatar Android Code Review
Browse files

Merge change 11106

* changes:
  Calculate specular lighting correctly
parents 8dc6baa4 b94878cf
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -285,6 +285,7 @@ struct light_t {
    vec4_t      normalizedObjPosition;
    vec4_t      spotDir;
    vec4_t      normalizedSpotDir;
    vec4_t      objViewer;
    GLfixed     spotExp;
    GLfixed     spotCutoff;
    GLfixed     spotCutoffCosine;
+8 −3
Original line number Diff line number Diff line
@@ -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;