139 lines
3.4 KiB
C++
139 lines
3.4 KiB
C++
|
|
#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,
|
|
|
|
CANVAS_3DRENDER = 0x1000,
|
|
CANVAS_3DZRENDER = 0x2000,
|
|
};
|
|
|
|
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 |