home *** CD-ROM | disk | FTP | other *** search
/ Computer Panoráma / computer_panorama_1997-12-hibas.iso / SHARE / GRAPH / PTC051.ZIP / SRC / SURFACE.H < prev    next >
C/C++ Source or Header  |  1997-09-22  |  13KB  |  466 lines

  1. ///////////////////
  2. // Surface class //
  3. ///////////////////
  4.  
  5. #ifndef __SURFACE_H
  6. #define __SURFACE_H
  7.  
  8. #include "lang.h"
  9. #include "misc.h"
  10. #include "rect.h"
  11. #include "color.h"
  12. #include "clear.h"
  13. #include "convert.h"
  14. #include "effects.h"
  15. #include "palette.h"
  16. #include "globals.h"
  17. #include "classes.h"
  18. #include "iface.h"
  19. #include "isoft.h"
  20. #include "ptc.h"
  21. #include "image.h"
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29. class Surface
  30. {
  31.     // friend interfaces
  32.     friend class ISoftware;
  33.     friend class IVGA;
  34.     friend class IVESA;
  35.     friend class IDirectX;
  36.     friend class IGDI;
  37.     friend class IGGI;
  38.     friend class IX11;
  39.     friend class ISVGALib;
  40.     friend class IOpenGL;
  41.  
  42.     public:
  43.  
  44.         // setup
  45.         Surface();
  46.         ~Surface();
  47.         
  48.         // unbound constructors
  49.         Surface(Surface const &Surface);
  50.         Surface(int x,int y,FORMAT const &format,int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
  51.         Surface(void *memory,int x,int y,FORMAT const &format,int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
  52.         Surface(char filename[],int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
  53.  
  54.         // bound constructors
  55.         Surface(Interface *i,int type=SYSTEM);                          
  56.         Surface(Interface *i,int x,int y,FORMAT const &format,int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
  57.         Surface(Interface *i,char filename[],int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
  58.         
  59.         // file operations
  60.         int Load(char filename[],int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
  61.         int Load(Interface *i,char filename[],int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
  62.         int Save(char filename,char *options=NULL);
  63.         int Save(char filename,FORMAT const &format,char *options=NULL);
  64.  
  65.         // surface memory
  66.         void* Lock(int wait=1);
  67.         void Unlock();
  68.         int LockCount() const;
  69.         int Restore();
  70.  
  71.         // surface palette
  72.         int SetPalette(Palette &palette);
  73.         int GetPalette(Palette &palette) const;
  74.  
  75.         // clear surface
  76.         int Clear(COLOR const &color);
  77.         int Clear(RECTANGLE const &rect,COLOR const &color);
  78.  
  79.         // update to bound display
  80.         int Update();
  81.         int Update(RECTANGLE const &src);
  82.         int Update(RECTANGLE const &src,RECTANGLE const &dest);
  83.  
  84.         // update to a specific display
  85.         int Update(Interface *i);
  86.         int Update(Interface *i,RECTANGLE const &src);
  87.         int Update(Interface *i,RECTANGLE const &src,RECTANGLE const &dest);
  88.  
  89.         // bitblt to another surface
  90.         int BitBlt(Surface &dest,EFFECTS const *effects=NULL);
  91.         int BitBlt(Surface &dest,int x,int y,EFFECTS const *effects=NULL);
  92.         int BitBlt(Surface &dest,RECTANGLE const &dest_rect,RECTANGLE const &src_rect,EFFECTS const *effects=NULL);
  93.  
  94.         // stretchblt to another surface
  95.         int StretchBlt(Surface &dest,EFFECTS const *effects=NULL);
  96.         int StretchBlt(Surface &dest,RECTANGLE const &dest_rect,EFFECTS const *effects=NULL);
  97.         int StretchBlt(Surface &dest,RECTANGLE const &dest_rect,RECTANGLE const &src_rect,EFFECTS const *effects=NULL);
  98.  
  99.         // dirty rectangle
  100.         int AddDirty(RECTANGLE const &rect);
  101.         int SubDirty(RECTANGLE const &rect);
  102.         int UpdateDirty();
  103.         int UpdateDirty(Interface *i);
  104.         int BitBltDirty(Surface &dest,EFFECTS const *effects=NULL);
  105.         void Clean();
  106.  
  107.         // clipping
  108.         int Clip(int &x,int &y) const;
  109.         int Clip(RECTANGLE &rect) const;
  110.         int ClipToSurface(int &x,int &y) const;
  111.         int ClipToSurface(RECTANGLE &rect) const;
  112.         void SetClipRect(RECTANGLE const &rect);
  113.  
  114.         // coordinate system translation
  115.         int AbsoluteToNormalized(RECTANGLE &rect) const;
  116.         int NormalizedToAbsolute(RECTANGLE &rect) const;
  117.         inline void AbsoluteToNormalized(float &x,float &y) const;
  118.         inline void NormalizedToAbsolute(float &x,float &y) const;
  119.         inline void AbsoluteToNormalized(float &x1,float &y1,float &x2,float &y2) const;
  120.         inline void NormalizedToAbsolute(float &x1,float &y1,float &x2,float &y2) const;
  121.  
  122.         // interface binding
  123.         int Bind(Interface *i);
  124.         int Unbind();
  125.  
  126.         // general routines
  127.         int Relocate(int type,int layout=DEFAULT,int advance=DEFAULT);
  128.         int Convert(FORMAT const &format);
  129.         int Resize(RECTANGLE const &rect);
  130.         int Resample(RECTANGLE const &rect);
  131.         int Crop(RECTANGLE const &rect);
  132.         int Enlarge(RECTANGLE const &rect);
  133.  
  134.         // primary surface operations
  135.         int SetPrimary();
  136.         int IsPrimary() const;
  137.         int SetOrigin(int x,int y);
  138.         int GetOrigin(int &x,int &y) const;
  139.  
  140.         // native access
  141.         void* GetNative();
  142.         int NativeType();
  143.  
  144.         // surface data access
  145.         inline int GetType() const;
  146.         inline int GetLayout() const;
  147.         inline int GetWidth() const;
  148.         inline int GetHeight() const;
  149.         inline int GetArea() const;
  150.         inline int GetSize() const;
  151.         inline int GetPitch() const;
  152.         inline int GetAdvance() const;
  153.         inline int GetBitsPerPixel() const;
  154.         inline int GetBytesPerPixel() const;
  155.         inline FORMAT GetFormat() const;
  156.         inline RECTANGLE GetClipRect() const;
  157.         inline RECTANGLE GetDimensions() const;
  158.         inline Interface* GetInterface() const;
  159.  
  160.         // surface status
  161.         int ok() const;
  162.  
  163.         // operators
  164.         void operator =(Surface &other);
  165.  
  166.         // ptc -> interface helper functions
  167.         inline Surface(PTC const &ptc,int type=SYSTEM);
  168.         inline Surface(PTC const &ptc,int x,int y,FORMAT const &format,int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
  169.         inline Surface(PTC const &ptc,char filename[],int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
  170.         inline int Init(PTC const &ptc,int type=SYSTEM);
  171.         inline int Init(PTC const &ptc,int x,int y,FORMAT const &format,int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
  172.         inline int Load(PTC const &ptc,char filename[],int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
  173.         inline int Bind(PTC const &ptc);
  174.         inline int Update(PTC const &ptc);
  175.         inline int Update(PTC const &ptc,RECTANGLE const &src);
  176.         inline int Update(PTC const &ptc,RECTANGLE const &src,RECTANGLE const &dest);
  177.         inline int UpdateDirty(PTC const &ptc);
  178.  
  179.     protected:
  180.  
  181.         // surface initialize
  182.         int Init(int x,int y,FORMAT const &format,int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
  183.         int Init(void *memory,int x,int y,FORMAT const &format,int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
  184.         int Init(Interface *i,int type=SYSTEM);
  185.         int Init(Interface *i,int x,int y,FORMAT const &format,int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
  186.  
  187.         // surface free
  188.         void Free();
  189.  
  190.         // master initializer
  191.         int Initialize(Interface *i,int x,int y,FORMAT const &format,int type,int layout,int advance);
  192.  
  193.         // initialize translation ratios
  194.         void InitializeRatios();
  195.  
  196.         // data defaults
  197.         void Defaults();
  198.  
  199.         // surface data
  200.         int Type;                       // surface type (system,video,primary)
  201.         int Layout;                     // memory layout of surface (linear,banked,planar,fakemode)
  202.         int Width;                      // width of surface in pixels
  203.         int Height;                     // height of surface in pixels
  204.         int Area;                       // area of surface (in pixels)
  205.         int Size;                       // size of surface buffer in bytes
  206.         int Pitch;                      // pitch of surface
  207.         int Advance;                    // bytes between end of one horizontal line and start of next line
  208.         int Primary;                    // true if surface is currently set to primary
  209.         FORMAT Format;                  // format inf