gxgraphics.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #ifndef GXGRAPHICS_H
  2. #define GXGRAPHICS_H
  3. #include <set>
  4. #include <string>
  5. #include <d3d.h>
  6. #include "ddutil.h"
  7. #include "gxfont.h"
  8. #include "gxcanvas.h"
  9. #include "gxscene.h"
  10. #include "gxmesh.h"
  11. #include "gxmovie.h"
  12. class gxRuntime;
  13. class gxGraphics{
  14. public:
  15. IDirectDraw7 *dirDraw;
  16. IDirectDraw *ds_dirDraw;
  17. IDirect3D7 *dir3d;
  18. IDirect3DDevice7 *dir3dDev;
  19. D3DDEVICEDESC7 dir3dDevDesc;
  20. DDPIXELFORMAT primFmt,zbuffFmt;
  21. DDPIXELFORMAT texRGBFmt[2],texAlphaFmt[2],texRGBAlphaFmt[2],texRGBMaskFmt[2];
  22. gxGraphics( gxRuntime *runtime,IDirectDraw7 *dirDraw,IDirectDrawSurface7 *front,IDirectDrawSurface7 *back,bool d3d );
  23. ~gxGraphics();
  24. void backup();
  25. bool restore();
  26. gxRuntime *runtime;
  27. private:
  28. gxCanvas *front_canvas,*back_canvas;
  29. gxFont *def_font;
  30. bool gfx_lost;
  31. gxMesh *dummy_mesh;
  32. DDSURFACEDESC2 initDesc( int w,int h,int flags );
  33. ddSurf *createSurface( int width,int height,int flags );
  34. ddSurf *loadSurface( const std::string &f,int flags );
  35. std::set<gxFont*> font_set;
  36. std::set<gxCanvas*> canvas_set;
  37. std::set<gxMesh*> mesh_set;
  38. std::set<gxScene*> scene_set;
  39. std::set<gxMovie*> movie_set;
  40. std::set<std::string> font_res;
  41. DDGAMMARAMP _gammaRamp;
  42. IDirectDrawGammaControl *_gamma;
  43. /***** GX INTERFACE *****/
  44. public:
  45. enum{
  46. GRAPHICS_WINDOWED=1, //windowed mode
  47. GRAPHICS_SCALED=2, //scaled window
  48. GRAPHICS_3D=4, //3d mode! Hurrah!
  49. GRAPHICS_AUTOSUSPEND=8 //suspend graphics when app suspended
  50. };
  51. //MANIPULATORS
  52. void vwait();
  53. void flip( bool vwait );
  54. //SPECIAL!
  55. void copy( gxCanvas *dest,int dx,int dy,int dw,int dh,gxCanvas *src,int sx,int sy,int sw,int sh );
  56. //NEW! Gamma control!
  57. void setGamma( int r,int g,int b,float dr,float dg,float db );
  58. void getGamma( int r,int g,int b,float *dr,float *dg,float *db );
  59. void updateGamma( bool calibrate );
  60. //ACCESSORS
  61. int getWidth()const;
  62. int getHeight()const;
  63. int getDepth()const;
  64. int getScanLine()const;
  65. int getAvailVidmem()const;
  66. int getTotalVidmem()const;
  67. gxCanvas *getFrontCanvas()const;
  68. gxCanvas *getBackCanvas()const;
  69. gxFont *getDefaultFont()const;
  70. //OBJECTS
  71. gxCanvas *createCanvas( int width,int height,int flags );
  72. gxCanvas *loadCanvas( const std::string &file,int flags );
  73. gxCanvas *verifyCanvas( gxCanvas *canvas );
  74. void freeCanvas( gxCanvas *canvas );
  75. gxMovie *openMovie( const std::string &file,int flags );
  76. gxMovie *verifyMovie( gxMovie *movie );
  77. void closeMovie( gxMovie *movie );
  78. gxFont *loadFont( const std::string &font,int height,int flags );
  79. gxFont *verifyFont( gxFont *font );
  80. void freeFont( gxFont *font );
  81. gxScene *createScene( int flags );
  82. gxScene *verifyScene( gxScene *scene );
  83. void freeScene( gxScene *scene );
  84. gxMesh *createMesh( int max_verts,int max_tris,int flags );
  85. gxMesh *verifyMesh( gxMesh *mesh );
  86. void freeMesh( gxMesh *mesh );
  87. };
  88. #endif