// From Linear to Linear void gr_bm_ubitblt00(int w, int h, int dx, int dy, int sx, int sy, grs_bitmap * src, grs_bitmap * dest) { unsigned char * dbits; unsigned char * sbits; //int src_bm_rowsize_2, dest_bm_rowsize_2; int dstep; int i; sbits = src->bm_data + (src->bm_rowsize * sy) + sx; dbits = dest->bm_data + (dest->bm_rowsize * dy) + dx; dstep = dest->bm_rowsize << gr_bitblt_dest_step_shift; // No interlacing, copy the whole buffer. if (gr_bitblt_double) for (i=0; i < h; i++ ) { gr_linear_rep_movsd_2x( sbits, dbits, w ); sbits += src->bm_rowsize; dbits += dstep; } else for (i=0; i < h; i++ ) { gr_linear_movsd( sbits, dbits, w ); //memcpy(dbits, sbits, w); sbits += src->bm_rowsize; dbits += dstep; } }
void gr_ubitmap00( int x, int y, grs_bitmap *bm ) { register int y1; int dest_rowsize; unsigned char * dest; unsigned char * src; dest_rowsize=grd_curcanv->cv_bitmap.bm_rowsize << gr_bitblt_dest_step_shift; dest = &(grd_curcanv->cv_bitmap.bm_data[ dest_rowsize*y+x ]); src = bm->bm_data; for (y1=0; y1 < bm->bm_h; y1++ ) { if (gr_bitblt_double) gr_linear_rep_movsd_2x( src, dest, bm->bm_w ); else gr_linear_movsd( src, dest, bm->bm_w ); src += bm->bm_rowsize; dest+= (int)(dest_rowsize); } }
void gr_ibitblt(grsBitmap *src_bmp, grsBitmap *dest_bmp, ubyte pixel_double) { int x, y, sw, sh, srowSize, drowSize, dstart, sy, dy; ubyte *src, *dest; short *current_hole, *current_hole_length; // variable setup sw = src_bmp->bmProps.w; sh = src_bmp->bmProps.h; srowSize = src_bmp->bmProps.rowSize; drowSize = dest_bmp->bmProps.rowSize; src = src_bmp->bmTexBuf; dest = dest_bmp->bmTexBuf; sy = 0; while (start_points[sy][0] == -1) { sy++; dest += drowSize; } if (pixel_double) { ubyte *scan = (ubyte *)scanline; // set up for byte processing of scanline dy = sy; for (y = sy; y < sy + sh; y++) { gr_linear_rep_movsd_2x(src, scan, sw); // was: gr_linear_movsd_double(src, scan, sw*2); current_hole = start_points[dy]; current_hole_length = hole_length[dy]; for (x = 0; x < MAX_HOLES; x++) { if (*current_hole == -1) break; dstart = *current_hole; gr_linear_movsd(&(scan[dstart]), &(dest[dstart]), *current_hole_length); current_hole++; current_hole_length++; } dy++; dest += drowSize; current_hole = start_points[dy]; current_hole_length = hole_length[dy]; for (x = 0;x < MAX_HOLES; x++) { if (*current_hole == -1) break; dstart = *current_hole; gr_linear_movsd(&(scan[dstart]), &(dest[dstart]), *current_hole_length); current_hole++; current_hole_length++; } dy++; dest += drowSize; src += srowSize; } } else { Assert(sw <= MAX_WIDTH); Assert(sh <= MAX_SCANLINES); for (y = sy; y < sy + sh; y++) { for (x = 0; x < MAX_HOLES; x++) { if (start_points[y][x] == -1) break; dstart = start_points[y][x]; gr_linear_movsd(&(src[dstart]), &(dest[dstart]), hole_length[y][x]); } dest += drowSize; src += srowSize; } } }