2014-01-31 08:23:00 +13:00
|
|
|
|
|
|
|
|
#ifndef GXGRAPHICS_H
|
|
|
|
|
#define GXGRAPHICS_H
|
|
|
|
|
|
|
|
|
|
#include <set>
|
|
|
|
|
#include <string>
|
2016-05-07 22:49:54 +02:00
|
|
|
|
|
|
|
|
#include "GraphicsRuntime.h"
|
2014-01-31 08:23:00 +13:00
|
|
|
#include <d3d.h>
|
|
|
|
|
|
|
|
|
|
#include "ddutil.h"
|
|
|
|
|
|
|
|
|
|
#include "gxfont.h"
|
|
|
|
|
#include "gxcanvas.h"
|
|
|
|
|
#include "gxscene.h"
|
|
|
|
|
#include "gxmesh.h"
|
|
|
|
|
#include "gxmovie.h"
|
|
|
|
|
|
|
|
|
|
class gxRuntime;
|
|
|
|
|
|
2016-05-07 22:49:54 +02:00
|
|
|
class gxGraphics {
|
|
|
|
|
private:
|
|
|
|
|
// Direct3D9
|
|
|
|
|
//LPDIRECT3D9 d3d9;
|
|
|
|
|
//LPDIRECT3DDEVICE9 d3d9dev;
|
|
|
|
|
//IDirect3DDevice9* d3d9Device;
|
|
|
|
|
|
2014-01-31 08:23:00 +13:00
|
|
|
public:
|
2016-05-07 22:49:54 +02:00
|
|
|
gxGraphics(gxRuntime* runtime);
|
|
|
|
|
gxGraphics(gxRuntime* runtime, IDirectDraw7 *dirDraw, IDirectDrawSurface7 *front, IDirectDrawSurface7 *back, bool d3d);
|
|
|
|
|
~gxGraphics();
|
|
|
|
|
|
2014-01-31 08:23:00 +13:00
|
|
|
IDirectDraw7 *dirDraw;
|
|
|
|
|
IDirectDraw *ds_dirDraw;
|
|
|
|
|
|
|
|
|
|
IDirect3D7 *dir3d;
|
|
|
|
|
IDirect3DDevice7 *dir3dDev;
|
|
|
|
|
D3DDEVICEDESC7 dir3dDevDesc;
|
|
|
|
|
DDPIXELFORMAT primFmt,zbuffFmt;
|
|
|
|
|
|
2016-05-07 22:49:54 +02:00
|
|
|
DDPIXELFORMAT texRGBFmt[2], texAlphaFmt[2], texRGBAlphaFmt[2], texRGBMaskFmt[2];
|
2014-01-31 08:23:00 +13:00
|
|
|
|
|
|
|
|
void backup();
|
|
|
|
|
bool restore();
|
|
|
|
|
|
|
|
|
|
gxRuntime *runtime;
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
2016-05-07 22:49:54 +02:00
|
|
|
gxCanvas *front_canvas, *back_canvas;
|
2014-01-31 08:23:00 +13:00
|
|
|
gxFont *def_font;
|
|
|
|
|
bool gfx_lost;
|
|
|
|
|
gxMesh *dummy_mesh;
|
|
|
|
|
|
2016-05-07 22:49:54 +02:00
|
|
|
DDSURFACEDESC2 initDesc(int w, int h, int flags);
|
|
|
|
|
ddSurf *createSurface(int width, int height, int flags);
|
|
|
|
|
ddSurf *loadSurface(const std::string &f, int flags);
|
2014-01-31 08:23:00 +13:00
|
|
|
|
|
|
|
|
std::set<gxFont*> font_set;
|
|
|
|
|
std::set<gxCanvas*> canvas_set;
|
|
|
|
|
std::set<gxMesh*> mesh_set;
|
|
|
|
|
std::set<gxScene*> scene_set;
|
|
|
|
|
std::set<gxMovie*> movie_set;
|
|
|
|
|
std::set<std::string> font_res;
|
|
|
|
|
|
|
|
|
|
DDGAMMARAMP _gammaRamp;
|
|
|
|
|
IDirectDrawGammaControl *_gamma;
|
|
|
|
|
|
|
|
|
|
/***** GX INTERFACE *****/
|
|
|
|
|
public:
|
2016-05-07 22:49:54 +02:00
|
|
|
enum {
|
|
|
|
|
GRAPHICS_WINDOWED = 1, //windowed mode
|
|
|
|
|
GRAPHICS_SCALED = 2, //scaled window
|
|
|
|
|
GRAPHICS_3D = 4, //3d mode! Hurrah!
|
|
|
|
|
GRAPHICS_AUTOSUSPEND = 8 //suspend graphics when app suspended
|
2014-01-31 08:23:00 +13:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//MANIPULATORS
|
|
|
|
|
void vwait();
|
2016-05-07 22:49:54 +02:00
|
|
|
void flip(bool vwait);
|
2014-01-31 08:23:00 +13:00
|
|
|
|
|
|
|
|
//SPECIAL!
|
2016-05-07 22:49:54 +02:00
|
|
|
void copy(gxCanvas *dest, int dx, int dy, int dw, int dh, gxCanvas *src, int sx, int sy, int sw, int sh);
|
2014-01-31 08:23:00 +13:00
|
|
|
|
|
|
|
|
//NEW! Gamma control!
|
2016-05-07 22:49:54 +02:00
|
|
|
void setGamma(int r, int g, int b, float dr, float dg, float db);
|
|
|
|
|
void getGamma(int r, int g, int b, float *dr, float *dg, float *db);
|
|
|
|
|
void updateGamma(bool calibrate);
|
2014-01-31 08:23:00 +13:00
|
|
|
|
|
|
|
|
//ACCESSORS
|
|
|
|
|
int getWidth()const;
|
|
|
|
|
int getHeight()const;
|
|
|
|
|
int getDepth()const;
|
|
|
|
|
int getScanLine()const;
|
|
|
|
|
int getAvailVidmem()const;
|
|
|
|
|
int getTotalVidmem()const;
|
|
|
|
|
|
|
|
|
|
gxCanvas *getFrontCanvas()const;
|
|
|
|
|
gxCanvas *getBackCanvas()const;
|
|
|
|
|
gxFont *getDefaultFont()const;
|
|
|
|
|
|
|
|
|
|
//OBJECTS
|
2016-05-07 22:49:54 +02:00
|
|
|
gxCanvas *createCanvas(int width, int height, int flags);
|
|
|
|
|
gxCanvas *loadCanvas(const std::string &file, int flags);
|
|
|
|
|
gxCanvas *verifyCanvas(gxCanvas *canvas);
|
|
|
|
|
void freeCanvas(gxCanvas *canvas);
|
|
|
|
|
|
|
|
|
|
gxMovie *openMovie(const std::string &file, int flags);
|
|
|
|
|
gxMovie *verifyMovie(gxMovie *movie);
|
|
|
|
|
void closeMovie(gxMovie *movie);
|
|
|
|
|
|
|
|
|
|
gxFont *loadFont(const std::string &font, int height, int flags);
|
|
|
|
|
gxFont *verifyFont(gxFont *font);
|
|
|
|
|
void freeFont(gxFont *font);
|
|
|
|
|
|
|
|
|
|
gxScene *createScene(int flags);
|
|
|
|
|
gxScene *verifyScene(gxScene *scene);
|
|
|
|
|
void freeScene(gxScene *scene);
|
|
|
|
|
|
|
|
|
|
gxMesh *createMesh(int max_verts, int max_tris, int flags);
|
|
|
|
|
gxMesh *verifyMesh(gxMesh *mesh);
|
|
|
|
|
void freeMesh(gxMesh *mesh);
|
2014-01-31 08:23:00 +13:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif
|