void VDPixmapStretchBlt_Any16_nearest_reference(VDPixmapReferenceStretchBltParameters params) { do { uint16 *dstp = (uint16 *)params.dst; const uint16 *srcp = (const uint16 *)params.src; uint32 u = params.u; if (params.xprecopy) { VDMemset16(dstp, *(const uint16 *)((const char *)params.src + params.xprepos), params.xprecopy); dstp += params.xprecopy; } sint32 wt = params.dx; if (wt > 0) do { *dstp++ = *srcp; uint32 ut = u + params.dudx; srcp += ut<u; srcp += params.uinc; u = ut; } while(--wt); if (params.xpostcopy) VDMemset16(dstp, *(const uint16 *)((const char *)params.src + params.xpostpos), params.xpostcopy); params.advance(); } while(--params.dy); }
void VDMemset16Rect(void *dst, ptrdiff_t pitch, uint16 value, size_t w, size_t h) { if (w>0 && h>0) { do { VDMemset16(dst, value, w); dst = (char *)dst + pitch; } while(--h); } }
void VDPixmapStretchBiH_XRGB1555_to_XRGB1555(const VDPixmapReferenceStretchBltBilinearParameters& params) { uint16 *dst = (uint16 *)params.dst; const uint16 *src = (const uint16 *)params.src; if (params.xprecopy) VDMemset16(dst - params.xprecopy, *(const uint16 *)((const char *)params.src + params.xprepos), params.xprecopy); if (params.xmidsize) { sint32 w = params.xmidsize; uint32 u = params.u; const uint32 dudx = params.dudx; const ptrdiff_t uinc = params.uinc; do { *dst++ = lerp_XRGB1555(src[0], src[1], u >> 27); const uint32 ut = u + dudx; src += uinc + (ut < u); u = ut; } while(--w); }