/*------------------------------------------------- drawgfx_alphatable - render a sprite with either a fixed alpha value, or if alpha==-1 then uses the per-pen alphatable[] array -------------------------------------------------*/ static void drawgfx_alphatable(bitmap_rgb32 &dest, const rectangle &cliprect, gfx_element *gfx, UINT32 code, UINT32 color, int flipx, int flipy, INT32 destx, INT32 desty, int fixedalpha) { psikyosh_state *state = gfx->machine().driver_data<psikyosh_state>(); UINT8 *alphatable = state->m_alphatable; DECLARE_NO_PRIORITY; const pen_t *paldata; /* if we have a fixed alpha, call the standard drawgfx_alpha */ if (fixedalpha >= 0) { drawgfx_alpha(dest, cliprect, gfx, code, color, flipx, flipy, destx, desty, 0, fixedalpha); return; } assert(dest.bpp() == 32); assert(gfx != NULL); assert(alphatable != NULL); /* get final code and color, and grab lookup tables */ code %= gfx->elements(); color %= gfx->colors(); paldata = &gfx->machine().pens[gfx->colorbase() + gfx->granularity() * color]; /* early out if completely transparent */ if (gfx->has_pen_usage() && (gfx->pen_usage(code) & ~(1 << 0)) == 0) return; DRAWGFX_CORE(UINT32, PIXEL_OP_REMAP_TRANS0_ALPHATABLE32, NO_PRIORITY); }