| version 1.7 | | version 1.8 |
|---|
| | |
| * Routines for bitblt's. | | * Routines for bitblt's. |
| * | | * |
| * $Log$ | | * $Log$ |
| | | * Revision 1.8 1999/11/20 10:05:16 donut |
| | | * variable size menu patch from Jan Bobrowski. Variable menu font size support and a bunch of fixes for menus that didn't work quite right, by me (MPM). |
| | | * |
| * Revision 1.7 1999/10/18 07:26:38 donut | | * Revision 1.7 1999/10/18 07:26:38 donut |
| * beginning work on bitblt with source==BM_OGL, fixes squished bitblts, better support for alternate texture formats, support for driver specific hacks, etc | | * beginning work on bitblt with source==BM_OGL, fixes squished bitblts, better support for alternate texture formats, support for driver specific hacks, etc |
| * | | * |
| | |
| masked ); | | masked ); |
| sbits += (int)src->bm_data[4+y1+sy]; | | sbits += (int)src->bm_data[4+y1+sy]; |
| } | | } |
| | | } |
| | | |
| | | // rescalling bitmaps, 10/14/99 Jan Bobrowski jb@wizard.ae.krakow.pl |
| | | |
| | | inline void scale_line(byte *in, byte *out, int ilen, int olen) |
| | | { |
| | | int a = olen/ilen, b = olen%ilen; |
| | | int c = 0, i; |
| | | byte *end = out + olen; |
| | | while(out<end) { |
| | | i = a; |
| | | c += b; |
| | | if(c >= ilen) { |
| | | c -= ilen; |
| | | goto inside; |
| | | } |
| | | while(--i>=0) { |
| | | inside: |
| | | *out++ = *in; |
| | | } |
| | | in++; |
| | | } |
| | | } |
| | | |
| | | void gr_bitmap_scale_to(grs_bitmap *src, grs_bitmap *dst) |
| | | { |
| | | byte *s = src->bm_data; |
| | | byte *d = dst->bm_data; |
| | | int h = src->bm_h; |
| | | int a = dst->bm_h/h, b = dst->bm_h%h; |
| | | int c = 0, i, y; |
| | | |
| | | for(y=0; y<h; y++) { |
| | | i = a; |
| | | c += b; |
| | | if(c >= h) { |
| | | c -= h; |
| | | goto inside; |
| | | } |
| | | while(--i>=0) { |
| | | inside: |
| | | scale_line(s, d, src->bm_w, dst->bm_w); |
| | | d += dst->bm_rowsize; |
| | | } |
| | | s += src->bm_rowsize; |
| | | } |
| | | } |
| | | |
| | | void show_fullscr(grs_bitmap *bm) |
| | | { |
| | | grs_bitmap * const scr = &grd_curcanv->cv_bitmap; |
| | | |
| | | if(scr->bm_type != BM_LINEAR) { |
| | | grs_bitmap *tmp = gr_create_bitmap(scr->bm_w, scr->bm_h); |
| | | gr_bitmap_scale_to(bm, tmp); |
| | | gr_bitmap(0, 0, tmp); |
| | | gr_free_bitmap(tmp); |
| | | return; |
| | | } |
| | | gr_bitmap_scale_to(bm, scr); |
| } | | } |