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);
}
Exemple #2
0
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);
		}