DIRECTOR: Condition arithmetic inks all at once

This commit is contained in:
Nathanael Gentry 2020-07-06 13:03:58 -04:00
parent 558156c54f
commit fbc201ef90

View File

@ -866,43 +866,38 @@ void inkDrawPixel(int x, int y, int color, void *data) {
break;
// Arithmetic ink types
default: {
byte rSrc, gSrc, bSrc;
byte rDst, gDst, bDst;
if (src != p->numColors - 1) {
byte rSrc, gSrc, bSrc;
byte rDst, gDst, bDst;
g_director->_wm->decomposeColor(src, rSrc, gSrc, bSrc);
g_director->_wm->decomposeColor(*dst, rDst, gDst, bDst);
g_director->_wm->decomposeColor(src, rSrc, gSrc, bSrc);
g_director->_wm->decomposeColor(*dst, rDst, gDst, bDst);
switch (p->ink) {
case kInkTypeBlend:
if (src != p->numColors - 1)
*dst = p->_wm->findBestColor((rSrc + rDst) / 2, (gSrc + gDst) / 2, (bSrc + bDst) / 2);
break;
case kInkTypeAddPin:
if (src != p->numColors - 1)
*dst = p->_wm->findBestColor(MIN((rSrc + rDst), p->numColors - 1), MIN((gSrc + gDst), p->numColors - 1), MIN((bSrc + bDst), p->numColors - 1));
break;
case kInkTypeAdd:
if (src != p->numColors - 1)
*dst = p->_wm->findBestColor(abs(rSrc + rDst) % p->numColors, abs(gSrc + gDst) % p->numColors, abs(bSrc + bDst) % p->numColors);
break;
case kInkTypeSubPin:
if (src != p->numColors - 1)
*dst = p->_wm->findBestColor(MAX(rSrc - rDst, 0), MAX(gSrc - gDst, 0), MAX(bSrc - bDst, 0));
break;
case kInkTypeLight:
if (src != p->numColors - 1)
*dst = p->_wm->findBestColor(MAX(rSrc, rDst), MAX(gSrc, gDst), MAX(bSrc, bDst));
break;
case kInkTypeSub:
if (src != p->numColors - 1)
*dst = p->_wm->findBestColor(abs(rSrc - rDst) % p->numColors, abs(gSrc - gDst) % p->numColors, abs(bSrc - bDst) % p->numColors);
break;
case kInkTypeDark:
if (src != p->numColors - 1)
*dst = p->_wm->findBestColor(MIN(rSrc, rDst), MIN(gSrc, gDst), MIN(bSrc, bDst));
break;
default:
break;
switch (p->ink) {
case kInkTypeBlend:
*dst = p->_wm->findBestColor((rSrc + rDst) / 2, (gSrc + gDst) / 2, (bSrc + bDst) / 2);
break;
case kInkTypeAddPin:
*dst = p->_wm->findBestColor(MIN((rSrc + rDst), p->numColors - 1), MIN((gSrc + gDst), p->numColors - 1), MIN((bSrc + bDst), p->numColors - 1));
break;
case kInkTypeAdd:
*dst = p->_wm->findBestColor(abs(rSrc + rDst) % p->numColors, abs(gSrc + gDst) % p->numColors, abs(bSrc + bDst) % p->numColors);
break;
case kInkTypeSubPin:
*dst = p->_wm->findBestColor(MAX(rSrc - rDst, 0), MAX(gSrc - gDst, 0), MAX(bSrc - bDst, 0));
break;
case kInkTypeLight:
*dst = p->_wm->findBestColor(MAX(rSrc, rDst), MAX(gSrc, gDst), MAX(bSrc, bDst));
break;
case kInkTypeSub:
*dst = p->_wm->findBestColor(abs(rSrc - rDst) % p->numColors, abs(gSrc - gDst) % p->numColors, abs(bSrc - bDst) % p->numColors);
break;
case kInkTypeDark:
*dst = p->_wm->findBestColor(MIN(rSrc, rDst), MIN(gSrc, gDst), MIN(bSrc, bDst));
break;
default:
break;
}
}
}
}