| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- #ifndef GXCANVAS_H
- #define GXCANVAS_H
- #include "ddutil.h"
- class gxFont;
- class gxGraphics;
- typedef IDirectDrawSurface7 ddSurf;
- class gxCanvas{
- public:
- gxCanvas( gxGraphics *graphics,ddSurf *surface,int flags );
- ~gxCanvas();
- void backup()const;
- void restore()const;
- ddSurf *getSurface()const;
- ddSurf *getTexSurface()const;
- void setModify( int n );
- int getModify()const;
- bool attachZBuffer();
- void releaseZBuffer();
- bool clip( RECT *d )const;
- bool clip( RECT *d,RECT *s )const;
- void damage( const RECT &r )const;
- private:
- int flags,cube_mode;
- gxGraphics *graphics;
- ddSurf *main_surf,*surf,*z_surf,*cube_surfs[6];
- mutable int mod_cnt;
- mutable ddSurf *t_surf;
- mutable int locked_pitch,locked_cnt,lock_mod_cnt,remip_cnt;
- mutable unsigned char *locked_surf;
- mutable int cm_pitch;
- mutable unsigned *cm_mask;
- RECT clip_rect;
- PixelFormat format;
- gxFont *font;
- RECT viewport;
- int origin_x,origin_y,handle_x,handle_y;
- unsigned mask_surf,color_surf,color_argb,clsColor_surf;
- void updateBitMask( const RECT &r )const;
- /***** GX INTERFACE *****/
- public:
- enum{
- CANVAS_TEX_RGB= 0x0001,
- CANVAS_TEX_ALPHA= 0x0002,
- CANVAS_TEX_MASK= 0x0004,
- CANVAS_TEX_MIPMAP= 0x0008,
- CANVAS_TEX_CLAMPU= 0x0010,
- CANVAS_TEX_CLAMPV= 0x0020,
- CANVAS_TEX_SPHERE= 0x0040,
- CANVAS_TEX_CUBE= 0x0080,
- CANVAS_TEX_VIDMEM= 0x0100,
- CANVAS_TEX_HICOLOR= 0x0200,
- CANVAS_TEXTURE= 0x10000,
- CANVAS_NONDISPLAY= 0x20000,
- CANVAS_HIGHCOLOR= 0x40000
- };
- enum{
- CUBEMODE_REFLECTION=1,
- CUBEMODE_NORMAL=2,
- CUBEMODE_POSITION=3,
- CUBESPACE_WORLD=0,
- CUBESPACE_CAMERA=4
- };
- //MANIPULATORS
- void setFont( gxFont *font );
- void setMask( unsigned argb );
- void setColor( unsigned argb );
- void setClsColor( unsigned argb );
- void setOrigin( int x,int y );
- void setHandle( int x,int y );
- void setViewport( int x,int y,int w,int h );
- void cls();
- void plot( int x,int y );
- void line( int x,int y,int x2,int y2 );
- void rect( int x,int y,int w,int h,bool solid );
- void oval( int x,int y,int w,int h,bool solid );
- void text( int x,int y,const std::string &t );
- void blit( int x,int y,gxCanvas *src,int src_x,int src_y,int src_w,int src_h,bool solid );
- bool collide( int x,int y,const gxCanvas *src,int src_x,int src_y,bool solid )const;
- bool rect_collide( int x,int y,int rect_x,int rect_y,int rect_w,int rect_h,bool solid )const;
- bool lock()const;
- void setPixel( int x,int y,unsigned argb );
- void setPixelFast( int x,int y,unsigned argb ){
- format.setPixel( locked_surf+y*locked_pitch+x*format.getPitch(),argb );
- ++mod_cnt;
- }
- void copyPixel( int x,int y,gxCanvas *src,int src_x,int src_y );
- void copyPixelFast( int x,int y,gxCanvas *src,int src_x,int src_y );
- unsigned getPixel( int x,int y )const;
- unsigned getPixelFast( int x,int y )const{
- return format.getPixel( locked_surf+y*locked_pitch+x*format.getPitch() );
- };
- void unlock()const;
- void setCubeMode( int mode );
- void setCubeFace( int face );
- //ACCESSORS
- int getWidth()const;
- int getHeight()const;
- int getDepth()const;
- int getFlags()const{ return flags; }
- int cubeMode()const{ return cube_mode; }
- void getOrigin( int *x,int *y )const;
- void getHandle( int *x,int *y )const;
- void getViewport( int *x,int *y,int *w,int *h )const;
- unsigned getMask()const;
- unsigned getColor()const;
- unsigned getClsColor()const;
- };
- #endif
|