00001 #ifndef header_blit_dx
00002 #define header_blit_dx
00003
00004 #include "../Generic/blitters.h"
00005 #include "displaycard_directdraw.h"
00006
00007 class CL_Blit_AlphaMask_RLE;
00008
00009 class CL_Blit_DX :
00010 public CL_Blit_NoClip,
00011 public CL_Blit_Clip,
00012 public CL_Blit_Scale_NoClip,
00013 public CL_Blit_Scale_Clip
00014 {
00015 public:
00016 CL_Blit_DX(CL_DisplayCard_DirectDraw *target, CL_SurfaceProvider *provider);
00017 virtual ~CL_Blit_DX();
00018
00019 bool init_surface(CL_Blitters *blitters);
00020
00021 virtual void blt_noclip(
00022 CL_Target *target,
00023 int x,
00024 int y,
00025 int spr_no);
00026
00027 virtual void blt_clip(
00028 CL_Target *target,
00029 int x,
00030 int y,
00031 int spr_no,
00032 const CL_ClipRect &clip);
00033
00034 virtual void blt_scale_noclip(
00035 CL_Target *target,
00036 int x,
00037 int y,
00038 int dest_width,
00039 int dest_height,
00040 int spr_no);
00041
00042 virtual void blt_scale_clip(
00043 CL_Target *target,
00044 int x,
00045 int y,
00046 int dest_width,
00047 int dest_height,
00048 int spr_no,
00049 const CL_ClipRect &clip);
00050
00051 static void reload_all_surfaces();
00052 static void release_all_surfaces();
00053 static void create_all_surfaces();
00054
00055 private:
00056 CL_DisplayCard_DirectDraw *m_target;
00057 CL_SurfaceProvider *m_provider;
00058 bool m_transparent;
00059 unsigned int m_width, m_height;
00060
00061 CL_Blit_AlphaMask_RLE *m_alphablitter;
00062
00063 LPDIRECTDRAWSURFACE m_surface;
00064
00065 bool reload(bool lock_provider, bool create_surface);
00066
00067 static std::list<CL_Blit_DX*> m_loaded_surfaces;
00068 };
00069
00070 #endif