/* ------------------------------------------------------------------------- */ static UINT32 alpha_add( UINT32 c1, UINT32 c2) { UINT32 a1 = ALF(c1); UINT32 r1 = RED(c1); UINT32 g1 = GRN(c1); UINT32 b1 = BLU(c1); UINT32 a2 = ALF(c2); UINT32 r2 = RED(c2); UINT32 g2 = GRN(c2); UINT32 b2 = BLU(c2); UINT32 a3 = ((a1 * a1 + (255 - a1) * a2) / 255) & 0xff; UINT32 r3 = ((a1 * r1 + (255 - a1) * r2) / 255) & 0xff; UINT32 g3 = ((a1 * g1 + (255 - a1) * g2) / 255) & 0xff; UINT32 b3 = ((a1 * b1 + (255 - a1) * b2) / 255) & 0xff; return (a3 << 24) | (r3 << 16) | (g3 << 8) | b3; }
static int getPixel( gxCanvas *c,float x,float y ){ debugCanvas( c ); x-=.5f;y-=.5f; float fx=floor(x),fy=floor(y); int ix=fx,iy=fy;fx=x-fx;fy=y-fy; int tl=c->getPixel( ix,iy ); int tr=c->getPixel( ix+1,iy ); int br=c->getPixel( ix+1,iy+1 ); int bl=c->getPixel( ix,iy+1 ); float w1=(1-fx)*(1-fy),w2=fx*(1-fy),w3=(1-fx)*fy,w4=fx*fy; float r=RED(tl)*w1+RED(tr)*w2+RED(bl)*w3+RED(br)*w4; float g=GRN(tl)*w1+GRN(tr)*w2+GRN(bl)*w3+GRN(br)*w4; float b=BLU(tl)*w1+BLU(tr)*w2+BLU(bl)*w3+BLU(br)*w4; return (int(r+.5f)<<16)|(int(g+.5f)<<8)|int(b+.5f); }
/* ------------------------------------------------------------------------- */ static UINT32 colordist( UINT32 c1, UINT32 c2) { int d, maxd = 0; d = ABS((INT32)(ALF(c1) - ALF(c2))); if (d > maxd) maxd = d; d = ABS((INT32)(RED(c1) - RED(c2))); if (d > maxd) maxd = d; d = ABS((INT32)(GRN(c1) - GRN(c2))); if (d > maxd) maxd = d; d = ABS((INT32)(BLU(c1) - BLU(c2))); if (d > maxd) maxd = d; return maxd; }
void col_apply_weight(double w, GLfloat *gl_c, Color col) { gl_c[0] = w*RED(col); gl_c[1] = w*GRN(col); gl_c[2] = w*BLU(col); }