54e078 | 1999-04-24 | Mirar (Pontus Hagland) | | static void LM_FUNC(rgb_group *s,rgb_group *l,rgb_group *d,
rgb_group *sa,rgb_group *la,rgb_group *da,
int len,double alpha)
{
if (alpha==0.0)
{
MEMCPY(d,s,sizeof(rgb_group)*len);
MEMCPY(da,sa,sizeof(rgb_group)*len);
return;
}
else if (alpha==1.0)
{
if (!la)
while (len--)
{
d->r=L_TRUNC(L_OPER(s->r,l->r));
d->g=L_TRUNC(L_OPER(s->g,l->g));
d->b=L_TRUNC(L_OPER(s->b,l->b));
*da=white;
l++; s++; sa++; da++; d++;
}
else
while (len--)
{
if (la->r==COLORMAX && la->g==COLORMAX && la->b==COLORMAX)
{
d->r=L_TRUNC(L_OPER(s->r,l->r));
d->g=L_TRUNC(L_OPER(s->g,l->g));
d->b=L_TRUNC(L_OPER(s->b,l->b));
*da=white;
#ifdef L_USE_SA
*da=*sa;
#endif
}
else if (la->r==0 && la->g==0 && la->b==0)
{
*d=*s;
*da=*sa;
}
else
{
d->r=L_TRUNC(L_OPER(s->r,l->r));
ALPHA_ADD(s,d,d,sa,la,da,r);
d->g=L_TRUNC(L_OPER(s->g,l->g));
ALPHA_ADD(s,d,d,sa,la,da,g);
d->b=L_TRUNC(L_OPER(s->b,l->b));
ALPHA_ADD(s,d,d,sa,la,da,b);
#ifdef L_USE_SA
*da=*sa;
#endif
}
l++; s++; la++; sa++; da++; d++;
}
}
else
{
if (!la)
while (len--)
{
d->r=L_TRUNC(L_OPER(s->r,l->r));
ALPHA_ADD_V_NOLA(s,d,d,sa,da,alpha,r);
d->g=L_TRUNC(L_OPER(s->g,l->g));
ALPHA_ADD_V_NOLA(s,d,d,sa,da,alpha,g);
d->b=L_TRUNC(L_OPER(s->b,l->b));
ALPHA_ADD_V_NOLA(s,d,d,sa,da,alpha,b);
#ifdef L_USE_SA
*da=*sa;
#endif
l++; s++; sa++; da++; d++;
}
else
while (len--)
{
d->r=L_TRUNC(L_OPER(s->r,l->r));
ALPHA_ADD_V(s,d,d,sa,la,da,alpha,r);
d->g=L_TRUNC(L_OPER(s->g,l->g));
ALPHA_ADD_V(s,d,d,sa,la,da,alpha,g);
d->b=L_TRUNC(L_OPER(s->b,l->b));
ALPHA_ADD_V(s,d,d,sa,la,da,alpha,b);
#ifdef L_USE_SA
*da=*sa;
#endif
l++; s++; la++; sa++; da++; d++;
}
}
}
#if 0
|
5e3965 | 1999-04-22 | Mirar (Pontus Hagland) | | return;
}
else if (alpha==1.0)
{
if (!la)
while (len--)
{
d->r=L_TRUNC(L_OPER(COMBINE(s->r,sa->r),l->r));
d->g=L_TRUNC(L_OPER(COMBINE(s->g,sa->g),l->g));
d->b=L_TRUNC(L_OPER(COMBINE(s->b,sa->b),l->b));
*da=white;
l++; s++; sa++; da++; d++;
}
else
while (len--)
{
d->r=L_TRUNC(L_OPER(COMBINE(s->r,sa->r),COMBINE(l->r,la->r)));
d->g=L_TRUNC(L_OPER(COMBINE(s->g,sa->g),COMBINE(l->g,la->g)));
d->b=L_TRUNC(L_OPER(COMBINE(s->b,sa->b),COMBINE(l->b,la->b)));
da->r=COMBINE_ALPHA_SUM(la->r,sa->r);
da->g=COMBINE_ALPHA_SUM(la->g,sa->g);
da->b=COMBINE_ALPHA_SUM(la->b,sa->b);
l++; s++; la++; sa++; da++; d++;
}
}
else
{
if (!la)
while (len--)
{
d->r=L_TRUNC(L_OPER(COMBINE(s->r,sa->r),COMBINE_A(l->r,alpha)));
d->g=L_TRUNC(L_OPER(COMBINE(s->g,sa->g),COMBINE_A(l->g,alpha)));
d->b=L_TRUNC(L_OPER(COMBINE(s->b,sa->b),COMBINE_A(l->b,alpha)));
da->r=COMBINE_ALPHA_SUM_V(COLORMAX,sa->r,alpha);
da->g=COMBINE_ALPHA_SUM_V(COLORMAX,sa->g,alpha);
da->b=COMBINE_ALPHA_SUM_V(COLORMAX,sa->b,alpha);
l++; s++; sa++; da++; d++;
}
else
while (len--)
{
d->r=L_TRUNC(L_OPER(COMBINE(s->r,sa->r),
COMBINE_V(l->r,la->r,alpha)));
d->g=L_TRUNC(L_OPER(COMBINE(s->g,sa->g),
COMBINE_V(l->g,la->g,alpha)));
d->b=L_TRUNC(L_OPER(COMBINE(s->g,sa->b),
COMBINE_V(l->b,la->b,alpha)));
da->r=COMBINE_ALPHA_SUM_V(la->r,sa->r,alpha);
da->g=COMBINE_ALPHA_SUM_V(la->g,sa->g,alpha);
da->b=COMBINE_ALPHA_SUM_V(la->b,sa->b,alpha);
l++; s++; la++; sa++; da++; d++;
}
}
}
|