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 >
Wrap
C/C++ Source or Header
|
1997-09-22
|
13KB
|
466 lines
///////////////////
// Surface class //
///////////////////
#ifndef __SURFACE_H
#define __SURFACE_H
#include "lang.h"
#include "misc.h"
#include "rect.h"
#include "color.h"
#include "clear.h"
#include "convert.h"
#include "effects.h"
#include "palette.h"
#include "globals.h"
#include "classes.h"
#include "iface.h"
#include "isoft.h"
#include "ptc.h"
#include "image.h"
class Surface
{
// friend interfaces
friend class ISoftware;
friend class IVGA;
friend class IVESA;
friend class IDirectX;
friend class IGDI;
friend class IGGI;
friend class IX11;
friend class ISVGALib;
friend class IOpenGL;
public:
// setup
Surface();
~Surface();
// unbound constructors
Surface(Surface const &Surface);
Surface(int x,int y,FORMAT const &format,int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
Surface(void *memory,int x,int y,FORMAT const &format,int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
Surface(char filename[],int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
// bound constructors
Surface(Interface *i,int type=SYSTEM);
Surface(Interface *i,int x,int y,FORMAT const &format,int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
Surface(Interface *i,char filename[],int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
// file operations
int Load(char filename[],int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
int Load(Interface *i,char filename[],int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
int Save(char filename,char *options=NULL);
int Save(char filename,FORMAT const &format,char *options=NULL);
// surface memory
void* Lock(int wait=1);
void Unlock();
int LockCount() const;
int Restore();
// surface palette
int SetPalette(Palette &palette);
int GetPalette(Palette &palette) const;
// clear surface
int Clear(COLOR const &color);
int Clear(RECTANGLE const &rect,COLOR const &color);
// update to bound display
int Update();
int Update(RECTANGLE const &src);
int Update(RECTANGLE const &src,RECTANGLE const &dest);
// update to a specific display
int Update(Interface *i);
int Update(Interface *i,RECTANGLE const &src);
int Update(Interface *i,RECTANGLE const &src,RECTANGLE const &dest);
// bitblt to another surface
int BitBlt(Surface &dest,EFFECTS const *effects=NULL);
int BitBlt(Surface &dest,int x,int y,EFFECTS const *effects=NULL);
int BitBlt(Surface &dest,RECTANGLE const &dest_rect,RECTANGLE const &src_rect,EFFECTS const *effects=NULL);
// stretchblt to another surface
int StretchBlt(Surface &dest,EFFECTS const *effects=NULL);
int StretchBlt(Surface &dest,RECTANGLE const &dest_rect,EFFECTS const *effects=NULL);
int StretchBlt(Surface &dest,RECTANGLE const &dest_rect,RECTANGLE const &src_rect,EFFECTS const *effects=NULL);
// dirty rectangle
int AddDirty(RECTANGLE const &rect);
int SubDirty(RECTANGLE const &rect);
int UpdateDirty();
int UpdateDirty(Interface *i);
int BitBltDirty(Surface &dest,EFFECTS const *effects=NULL);
void Clean();
// clipping
int Clip(int &x,int &y) const;
int Clip(RECTANGLE &rect) const;
int ClipToSurface(int &x,int &y) const;
int ClipToSurface(RECTANGLE &rect) const;
void SetClipRect(RECTANGLE const &rect);
// coordinate system translation
int AbsoluteToNormalized(RECTANGLE &rect) const;
int NormalizedToAbsolute(RECTANGLE &rect) const;
inline void AbsoluteToNormalized(float &x,float &y) const;
inline void NormalizedToAbsolute(float &x,float &y) const;
inline void AbsoluteToNormalized(float &x1,float &y1,float &x2,float &y2) const;
inline void NormalizedToAbsolute(float &x1,float &y1,float &x2,float &y2) const;
// interface binding
int Bind(Interface *i);
int Unbind();
// general routines
int Relocate(int type,int layout=DEFAULT,int advance=DEFAULT);
int Convert(FORMAT const &format);
int Resize(RECTANGLE const &rect);
int Resample(RECTANGLE const &rect);
int Crop(RECTANGLE const &rect);
int Enlarge(RECTANGLE const &rect);
// primary surface operations
int SetPrimary();
int IsPrimary() const;
int SetOrigin(int x,int y);
int GetOrigin(int &x,int &y) const;
// native access
void* GetNative();
int NativeType();
// surface data access
inline int GetType() const;
inline int GetLayout() const;
inline int GetWidth() const;
inline int GetHeight() const;
inline int GetArea() const;
inline int GetSize() const;
inline int GetPitch() const;
inline int GetAdvance() const;
inline int GetBitsPerPixel() const;
inline int GetBytesPerPixel() const;
inline FORMAT GetFormat() const;
inline RECTANGLE GetClipRect() const;
inline RECTANGLE GetDimensions() const;
inline Interface* GetInterface() const;
// surface status
int ok() const;
// operators
void operator =(Surface &other);
// ptc -> interface helper functions
inline Surface(PTC const &ptc,int type=SYSTEM);
inline Surface(PTC const &ptc,int x,int y,FORMAT const &format,int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
inline Surface(PTC const &ptc,char filename[],int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
inline int Init(PTC const &ptc,int type=SYSTEM);
inline int Init(PTC const &ptc,int x,int y,FORMAT const &format,int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
inline int Load(PTC const &ptc,char filename[],int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
inline int Bind(PTC const &ptc);
inline int Update(PTC const &ptc);
inline int Update(PTC const &ptc,RECTANGLE const &src);
inline int Update(PTC const &ptc,RECTANGLE const &src,RECTANGLE const &dest);
inline int UpdateDirty(PTC const &ptc);
protected:
// surface initialize
int Init(int x,int y,FORMAT const &format,int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
int Init(void *memory,int x,int y,FORMAT const &format,int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
int Init(Interface *i,int type=SYSTEM);
int Init(Interface *i,int x,int y,FORMAT const &format,int type=SYSTEM,int layout=DEFAULT,int advance=DEFAULT);
// surface free
void Free();
// master initializer
int Initialize(Interface *i,int x,int y,FORMAT const &format,int type,int layout,int advance);
// initialize translation ratios
void InitializeRatios();
// data defaults
void Defaults();
// surface data
int Type; // surface type (system,video,primary)
int Layout; // memory layout of surface (linear,banked,planar,fakemode)
int Width; // width of surface in pixels
int Height; // height of surface in pixels
int Area; // area of surface (in pixels)
int Size; // size of surface buffer in bytes
int Pitch; // pitch of surface
int Advance; // bytes between end of one horizontal line and start of next line
int Primary; // true if surface is currently set to primary
FORMAT Format; // format inf