forked from enlightenment/efl
parent
9cc34d070a
commit
87e5e70a9d
|
@ -551,9 +551,13 @@ pending_change(void *data, void *gdata __UNUSED__)
|
||||||
|
|
||||||
obj = data;
|
obj = data;
|
||||||
if (obj->delete_me) return EINA_FALSE;
|
if (obj->delete_me) return EINA_FALSE;
|
||||||
|
if (obj->pre_render_done)
|
||||||
|
{
|
||||||
|
RD(" OBJ [%p] pending change %i -> 0, pre %i\n", obj, obj->changed, obj->pre_render_done);
|
||||||
obj->pre_render_done = 0;
|
obj->pre_render_done = 0;
|
||||||
// if (!obj->layer)
|
//// FIXME: this wipes out changes
|
||||||
obj->changed = 0;
|
obj->changed = 0;
|
||||||
|
}
|
||||||
return obj->changed ? EINA_TRUE : EINA_FALSE;
|
return obj->changed ? EINA_TRUE : EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -590,6 +594,9 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set render_pre - for child objs that may not have gotten it.
|
||||||
|
obj->pre_render_done = 1;
|
||||||
|
|
||||||
if (_evas_render_has_map(obj))
|
if (_evas_render_has_map(obj))
|
||||||
{
|
{
|
||||||
const Evas_Map_Point *p, *p_end;
|
const Evas_Map_Point *p, *p_end;
|
||||||
|
@ -1051,8 +1058,10 @@ evas_render_updates_internal(Evas *e,
|
||||||
|
|
||||||
obj = eina_array_data_get(&e->active_objects, i);
|
obj = eina_array_data_get(&e->active_objects, i);
|
||||||
obj->pre_render_done = 0;
|
obj->pre_render_done = 0;
|
||||||
|
RD(" OBJ [%p] post... %i %i\n", obj, obj->changed, do_draw);
|
||||||
if ((obj->changed) && (do_draw))
|
if ((obj->changed) && (do_draw))
|
||||||
{
|
{
|
||||||
|
RD(" OBJ [%p] post... func1\n", obj);
|
||||||
obj->func->render_post(obj);
|
obj->func->render_post(obj);
|
||||||
obj->restack = 0;
|
obj->restack = 0;
|
||||||
obj->changed = 0;
|
obj->changed = 0;
|
||||||
|
@ -1060,6 +1069,7 @@ evas_render_updates_internal(Evas *e,
|
||||||
else if ((obj->cur.map != obj->prev.map) ||
|
else if ((obj->cur.map != obj->prev.map) ||
|
||||||
(obj->cur.usemap != obj->prev.usemap))
|
(obj->cur.usemap != obj->prev.usemap))
|
||||||
{
|
{
|
||||||
|
RD(" OBJ [%p] post... func2\n", obj);
|
||||||
obj->func->render_post(obj);
|
obj->func->render_post(obj);
|
||||||
obj->restack = 0;
|
obj->restack = 0;
|
||||||
obj->changed = 0;
|
obj->changed = 0;
|
||||||
|
|
|
@ -24,7 +24,7 @@ typedef struct _Span Span;
|
||||||
struct _Span
|
struct _Span
|
||||||
{
|
{
|
||||||
int x1, x2;
|
int x1, x2;
|
||||||
FPc o1, o2;
|
FPc o1, o2, z1, z2;
|
||||||
FPc u[2], v[2];
|
FPc u[2], v[2];
|
||||||
DATA32 col[2];
|
DATA32 col[2];
|
||||||
};
|
};
|
||||||
|
@ -43,6 +43,7 @@ _interp(int x1, int x2, int p, FPc u1, FPc u2)
|
||||||
p -= x1;
|
p -= x1;
|
||||||
u = u2 - u1;
|
u = u2 - u1;
|
||||||
u = (u * p) / (x2 + 1);
|
u = (u * p) / (x2 + 1);
|
||||||
|
// FIXME: do z persp
|
||||||
return u1 + u;
|
return u1 + u;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,6 +55,7 @@ _interp_col(int x1, int x2, int p, DATA32 col1, DATA32 col2)
|
||||||
x2 -= x1;
|
x2 -= x1;
|
||||||
p -= x1;
|
p -= x1;
|
||||||
p = (p << 8) / (x2 + 1);
|
p = (p << 8) / (x2 + 1);
|
||||||
|
// FIXME: do z persp
|
||||||
return INTERP_256(p, col2, col1);
|
return INTERP_256(p, col2, col1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,6 +70,7 @@ _limit(Span *s, int c1, int c2, int nocol)
|
||||||
s->col[0] = _interp_col(s->x1, s->x2, c1, s->col[0], s->col[1]);
|
s->col[0] = _interp_col(s->x1, s->x2, c1, s->col[0], s->col[1]);
|
||||||
s->x1 = c1;
|
s->x1 = c1;
|
||||||
s->o1 = c1 << FP;
|
s->o1 = c1 << FP;
|
||||||
|
// FIXME: do s->z1
|
||||||
}
|
}
|
||||||
if (s->x2 > c2)
|
if (s->x2 > c2)
|
||||||
{
|
{
|
||||||
|
@ -77,6 +80,7 @@ _limit(Span *s, int c1, int c2, int nocol)
|
||||||
s->col[1] = _interp_col(s->x1, s->x2, c2, s->col[0], s->col[1]);
|
s->col[1] = _interp_col(s->x1, s->x2, c2, s->col[0], s->col[1]);
|
||||||
s->x2 = c2;
|
s->x2 = c2;
|
||||||
s->o2 = c2 << FP;
|
s->o2 = c2 << FP;
|
||||||
|
// FIXME: do s->z2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,7 +144,6 @@ _calc_spans(RGBA_Map_Point *p, Line *spans, int ystart, int yend, int cx, int cy
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (y = ystart; y <= yend; y++)
|
for (y = ystart; y <= yend; y++)
|
||||||
{
|
{
|
||||||
int nocol = 1;
|
int nocol = 1;
|
||||||
|
@ -175,15 +178,63 @@ _calc_spans(RGBA_Map_Point *p, Line *spans, int ystart, int yend, int cx, int cy
|
||||||
x = p[e2].x - p[e1].x;
|
x = p[e2].x - p[e1].x;
|
||||||
x = p[e1].x + ((x * t) / h);
|
x = p[e1].x + ((x * t) / h);
|
||||||
|
|
||||||
|
/*
|
||||||
|
// FIXME: 3d accuracy here
|
||||||
|
// XXX t needs adjusting. above its a linear interp point
|
||||||
|
// only.
|
||||||
|
//
|
||||||
|
// // FIXME: do in fixed pt. reduce divides
|
||||||
|
evas_common_cpu_end_opt();
|
||||||
|
//
|
||||||
|
int foc = 512, z0 = 0, px = 320, py = 240; // FIXME: need from map points
|
||||||
|
//
|
||||||
|
float focf, hf;
|
||||||
|
float z1, z2, y1, y2, dz, dy, zt, dydz, yt;
|
||||||
|
|
||||||
|
focf = foc;
|
||||||
|
hf = h;
|
||||||
|
|
||||||
|
// adjust for fixed point and focal length and z0 for map
|
||||||
|
z1 = (p[e1].z >> FP) - z0 + foc;
|
||||||
|
z2 = (p[e2].z >> FP) - z0 + foc;
|
||||||
|
// deltas
|
||||||
|
dz = z1 - z2;
|
||||||
|
|
||||||
|
if (dz != 0)
|
||||||
|
{
|
||||||
|
int pt;
|
||||||
|
|
||||||
|
// adjust for perspective point (being 0 0)
|
||||||
|
y1 = (p[e1].y >> FP) - py;
|
||||||
|
y2 = (p[e2].y >> FP) - py;
|
||||||
|
|
||||||
|
// correct for x &y not being in world coords - screen coords
|
||||||
|
y1 = (y1 * z1) / focf;
|
||||||
|
y2 = (y2 * z2) / focf;
|
||||||
|
|
||||||
|
// deltas
|
||||||
|
dy = y1 - y2;
|
||||||
|
|
||||||
|
yt = y - py;
|
||||||
|
dydz = dy / dz;
|
||||||
|
|
||||||
|
zt = (y2 - (dydz * z2)) / ((yt / focf) - dydz);
|
||||||
|
|
||||||
|
pt = t;
|
||||||
|
t = ((z1 - zt) * hf) / dz;
|
||||||
|
}
|
||||||
|
*/
|
||||||
u = p[e2].u - p[e1].u;
|
u = p[e2].u - p[e1].u;
|
||||||
u = p[e1].u + ((u * t) / h);
|
u = p[e1].u + ((u * t) / h);
|
||||||
|
|
||||||
v = p[e2].v - p[e1].v;
|
v = p[e2].v - p[e1].v;
|
||||||
v = p[e1].v + ((v * t) / h);
|
v = p[e1].v + ((v * t) / h);
|
||||||
|
|
||||||
|
// FIXME: 3d accuracy for color too
|
||||||
t256 = (t << 8) / h; // maybe * 255?
|
t256 = (t << 8) / h; // maybe * 255?
|
||||||
col[i] = INTERP_256(t256, p[e2].col, p[e1].col);
|
col[i] = INTERP_256(t256, p[e2].col, p[e1].col);
|
||||||
|
|
||||||
|
// FIXME: store z persp
|
||||||
uv[i][1] = v;
|
uv[i][1] = v;
|
||||||
uv[i][0] = u;
|
uv[i][0] = u;
|
||||||
edge[i][2] = x >> FP;
|
edge[i][2] = x >> FP;
|
||||||
|
|
|
@ -5,7 +5,7 @@ static inline int
|
||||||
evas_object_was_visible(Evas_Object *obj)
|
evas_object_was_visible(Evas_Object *obj)
|
||||||
{
|
{
|
||||||
if ((obj->prev.visible) &&
|
if ((obj->prev.visible) &&
|
||||||
(obj->prev.cache.clip.visible) &&
|
((obj->prev.cache.clip.visible) || (obj->smart.smart)) &&
|
||||||
(obj->prev.cache.clip.a > 0))
|
(obj->prev.cache.clip.a > 0))
|
||||||
{
|
{
|
||||||
if (obj->func->was_visible)
|
if (obj->func->was_visible)
|
||||||
|
|
Loading…
Reference in New Issue