Previous 199869 Revisions Next

r21880 Saturday 16th March, 2013 at 05:32:32 UTC by David Haywood
deco_mlc - more scanline conversion
[src/mame/video]deco_mlc.c

trunk/src/mame/video/deco_mlc.c
r21879r21880
6060#endif
6161
6262static void mlc_drawgfxzoomline(
63      bitmap_rgb32 &dest_bmp,const rectangle &clip,gfx_element *gfx,
63      UINT32* dest,const rectangle &clip,gfx_element *gfx,
6464      UINT32 code1,UINT32 code2, UINT32 color,int flipx,int sx,
6565      int transparent_color,int use8bpp,
66      int scalex, int alpha, int usey, int srcline   )
66      int scalex, int alpha, int srcline   )
6767{
68   rectangle myclip;
6968
7069   if (!scalex) return;
7170
r21879r21880
7776   */
7877
7978   /* KW 991012 -- Added code to force clip to bitmap boundary */
80   myclip = clip;
81   myclip &= dest_bmp.cliprect();
8279
83   if( usey < myclip.min_y )
84      return;
8580
86   if( usey > myclip.max_y+1 )
87      return;
88
8981   const pen_t *pal = &gfx->machine().pens[gfx->colorbase() + gfx->granularity() * (color % gfx->colors())];
9082   const UINT8 *code_base1 = gfx->get_data(code1 % gfx->elements());
9183   const UINT8 *code_base2 = gfx->get_data(code2 % gfx->elements());
r21879r21880
114106
115107
116108
117      if( sx < myclip.min_x)
109      if( sx < clip.min_x)
118110      { /* clip left */
119         int pixels = myclip.min_x-sx;
111         int pixels = clip.min_x-sx;
120112         sx += pixels;
121113         x_index_base += pixels*dx;
122114      }
123115      /* NS 980211 - fixed incorrect clipping */
124      if( ex > myclip.max_x+1 )
116      if( ex > clip.max_x+1 )
125117      { /* clip right */
126         int pixels = ex-myclip.max_x-1;
118         int pixels = ex-clip.max_x-1;
127119         ex -= pixels;
128120      }
129121
r21879r21880
135127         {     
136128            const UINT8 *source1 = code_base1 + (srcline) * gfx->rowbytes();
137129            const UINT8 *source2 = code_base2 + (srcline) * gfx->rowbytes();
138            UINT32 *dest = &dest_bmp.pix32(usey);
139130
140131            int x, x_index = x_index_base;
141132
r21879r21880
153144         else
154145         {
155146            const UINT8 *source = code_base1 + (srcline) * gfx->rowbytes();
156            UINT32 *dest = &dest_bmp.pix32(usey);
157147
158148            int x, x_index = x_index_base;
159149            for( x=sx; x<ex; x++ )
r21879r21880
167157   }
168158}
169159
160
170161void deco_mlc_state::draw_sprites( bitmap_rgb32 &bitmap,const rectangle &cliprect)
171162{
172163   UINT32 *index_ptr=0;
r21879r21880
365356
366357
367358
368      for (by=0; by<h; by++) {
359      for (by=0; by<h; by++)
360      {
369361
362         
363
370364         int realybase = ybase + by * yinc;
371
372         //for (int y=0;
373365         int sprite_screen_height = ((yscale<<8)*16+(realybase&0xffff))>>16;
374         int ey = (realybase>>16)+sprite_screen_height;
375         realybase >>= 16;
376366
377         if (!sprite_screen_height)
378            continue;
367         for (int yi=0;yi<sprite_screen_height;yi++)
368         {
369            int y = (realybase>>16)+yi;
379370
380         int dy = (16<<16)/sprite_screen_height;
371            rectangle myclip;
372            myclip = user_clip;
373            myclip &= bitmap.cliprect();
381374
375            if( y < myclip.min_y )
376               continue;
382377
383         
384         int counter = 0;
385         for (int y=realybase;y<ey;y++)
386         {
387            int dystuff = counter * dy;
388            counter++;
378            if( y > myclip.max_y+1 )
379               continue;
389380
390            int y_index;
381            UINT32 *dest = &bitmap.pix32(y);
382
383            if (!sprite_screen_height)
384               continue;
385
386            int dy = (16<<16)/sprite_screen_height;
387
388
389
390            int dystuff = yi * dy;
391
392            int srcline;
393            srcline = dystuff >> 16;
394
391395            if( fy )
392396            {
393               y_index = (sprite_screen_height-1)*dy-dystuff;
397               srcline = (srcline &~15) | (15-(srcline&15));
394398            }
395            else
396            {
397               y_index = dystuff;
398            }
399399
400
400401            for (bx=0; bx<w; bx++) {
401402           
402403               int realxbase = xbase + bx * xinc;
r21879r21880
467468                  }
468469               }
469470
470   //              if (rasterMode)
471   //                  rasterDirty=1;
472471
472
473
473474               mlc_drawgfxzoomline(
474                           /*rasterMode ? temp_bitmap : */bitmap,user_clip,machine().gfx[0],
475                           dest,user_clip,machine().gfx[0],
475476                           tile,tile2,
476477                           color + colorOffset,fx,realxbase,
477478                           0,
478                           use8bppMode,(xscale<<8),alpha, y, y_index>>16);
479                           use8bppMode,(xscale<<8),alpha, srcline);
479480
480481            }
481482

Previous 199869 Revisions Next


© 1997-2024 The MAME Team