Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members  

blit_transparent.h

Go to the documentation of this file.
00001 /*
00002         $Id: blit_transparent.h,v 1.1 2001/03/06 15:09:17 mbn Exp $
00003 
00004         ------------------------------------------------------------------------
00005         ClanLib, the platform independent game SDK.
00006 
00007         This library is distributed under the GNU LIBRARY GENERAL PUBLIC LICENSE
00008         version 2. See COPYING for details.
00009 
00010         For a total list of contributers see CREDITS.
00011 
00012         Transparent blitter.
00013         This file by Martin Starch (starch@dark.x.dtu.dk) 3/99
00014         ------------------------------------------------------------------------
00015 */
00016 
00017 #ifndef header_transparent_blitter
00018 #define header_transparent_blitter
00019 
00020 #include "blitters.h"
00021 #include "colormap.h"
00022 
00023 class CL_DisplayCard_Generic;
00024 class CL_SurfaceProvider;
00025 class CL_Blit_AlphaMask_RLE;
00026 class CL_Blit_Transparent;
00027 
00028 template <class T>
00029 class BltRLERow_Transparent
00030 {
00031 public:
00032         static void show_row(
00033                 T *src_data,
00034                 T *dst_data,
00035                 int rep)
00036         {
00037                 memcpy(dst_data, src_data, rep*sizeof(T));
00038         }
00039 };
00040 
00041 template <class T>
00042 class SubBlitter_Transparent
00043 {
00044 public:
00045         static void blt_noclip(
00046                 CL_Blit_Transparent *parent,
00047                 CL_Target *target,
00048                 int x,
00049                 int y,
00050                 int spr_no);
00051 
00052         static void blt_clip(
00053                 CL_Blit_Transparent *parent,
00054                 CL_Target *target,
00055                 int x,
00056                 int y,
00057                 int spr_no, 
00058                 const CL_ClipRect &clip);
00059 
00060         static void blt_scale_noclip(
00061                 CL_Blit_Transparent *parent,
00062                 CL_Target *target,
00063                 int x,
00064                 int y,
00065                 int dest_width,
00066                 int dest_height,
00067                 int spr_no);
00068 
00069         static void blt_scale_clip(
00070                 CL_Blit_Transparent *parent,
00071                 CL_Target *target,
00072                 int x,
00073                 int y,
00074                 int dest_width,
00075                 int dest_height,
00076                 int spr_no,
00077                 const CL_ClipRect &clip);
00078 private:
00079         static void unpack_line(
00080                 T *dest,
00081                 unsigned char *transparent_dest,
00082                 unsigned char *source_data,
00083                 int num_pixels);
00084 };
00085 
00086 
00087 class CL_Blit_Transparent : 
00088         public CL_Blit_NoClip,
00089         public CL_Blit_Clip,
00090         public CL_Blit_Scale_NoClip,
00091         public CL_Blit_Scale_Clip
00092 {
00093 public:
00094         CL_Blit_Transparent(CL_DisplayCard_Generic *card, CL_SurfaceProvider *provider);
00095         virtual ~CL_Blit_Transparent();
00096 
00097         bool init_surface(CL_Blitters *blitters);
00098 
00099         virtual void blt_noclip(
00100                 CL_Target *target,
00101                 int x,
00102                 int y,
00103                 int spr_no);
00104 
00105         virtual void blt_clip(
00106                 CL_Target *target,
00107                 int x,
00108                 int y,
00109                 int spr_no,
00110                 const CL_ClipRect &clip);
00111 
00112         virtual void blt_scale_noclip(
00113                 CL_Target *target,
00114                 int x,
00115                 int y,
00116                 int dest_width,
00117                 int dest_height,
00118                 int spr_no);
00119 
00120         virtual void blt_scale_clip(
00121                 CL_Target *target,
00122                 int x,
00123                 int y,
00124                 int dest_width,
00125                 int dest_height,
00126                 int spr_no,
00127                 const CL_ClipRect &clip);
00128 
00129 private:
00130         CL_DisplayCard_Generic *m_card;
00131         CL_SurfaceProvider *m_provider;
00132         CL_Blit_AlphaMask_RLE *m_contained_alpha_blitter;
00133 
00134         unsigned char **m_lines;
00135         unsigned int m_num_lines;
00136 
00137         unsigned int m_width, m_height;
00138 
00139         enum RLECommand
00140         {
00141                 cmd_skip,
00142                 cmd_copy
00143         };
00144 
00145         friend SubBlitter_Transparent<unsigned short>;
00146         friend SubBlitter_Transparent<unsigned int>;
00147 
00148         void make_line(
00149                 CL_Target *target,
00150                 CL_SurfaceProvider *provider,
00151                 int line_num,
00152                 unsigned char *input_data,
00153                 unsigned char *alpha_data);
00154 
00155 };
00156 
00157 #endif

Generated at Wed Apr 4 19:53:59 2001 for ClanLib by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001