Newer
Older
ubix / src / sys / graphics / objgfx30.h
/**************************************************************
$Id$
**************************************************************/

#ifndef OBJGFX30_H
#define OBJGFX30_H

#include <stdlib.h> // for NULL
#ifndef TRUE
  #define TRUE 1
#endif

#ifndef FALSE
  #define FALSE 0
#endif

#define gm320x200x256   0x13
#define gm640x480x256   0x4101
#define gm800x600x256   0x4103
#define gm1024x768x256  0x4105
#define gm1280x1024x256 0x4107

  /* 32768 color video mode constants */
#define gm640x480x32k   0x4110
#define gm800x600x32k   0x4113
#define gm1024x768x32k  0x4116
#define gm1280x1024x32k 0x4119

  /* 65536 color video mode constants */
#define gm640x480x64k   0x4111
#define gm800x600x64k   0x4114
#define gm1024x768x64k  0x4117
#define gm1280x1024x64k 0x411A

  /* 16.8 million color video mode constants */
#define gm640x480x16m   0x4112
#define gm800x600x16m   0x4115
#define gm1024x768x16m  0x4118
#define gm1280x1024x16m 0x411B

#define RadToDeg 180.0/3.14159265358979;

typedef signed char        Int8;
typedef signed short int   Int16;
typedef signed long int    Int32;

typedef unsigned char      UInt8;
typedef unsigned short int UInt16;
typedef unsigned long int  UInt32;

enum og_DataState { og_None, og_Owner, og_Aliasing };

typedef struct { 
          UInt8 red;
          UInt8 green;
          UInt8 blue;
        } TRGB;

typedef struct {
          UInt16 ModeAttributes;
          UInt8  WindowAFlags;
          UInt8  WindowBFlags;
          UInt16 Granularity;
          UInt16 WindowSize;
          UInt16 WindowASeg;
          UInt16 WindowBSeg;
          void*  BankSwitch;
          UInt16 BytesPerLine;
          UInt16 xRes, yRes;
          UInt8  CharWidth;
          UInt8  CharHeight;
          UInt8  NumBitPlanes;
          UInt8  BitsPerPixel;
          UInt8  NumberOfBanks;
          UInt8  MemoryModel;
          UInt8  BankSize;
          UInt8  NumOfImagePages;
          UInt8  Reserved;
          // Direct colour fields (required for Direct/6 and YUV/7 memory models
          UInt8  RedMaskSize;
          UInt8  RedFieldPosition;
          UInt8  GreenMaskSize;
          UInt8  GreenFieldPosition;
          UInt8  BlueMaskSize;
          UInt8  BlueFieldPosition; 
          UInt8  RsvdMaskSize;
          UInt8  RsvdFieldPosition;
          UInt8  DirectColourMode;
          // VESA 2.0 specific fields
          UInt32 PhysBasePtr;
          void*  OffScreenMemOffset;
          UInt16 OffScreenMemSize;
          UInt8  paddington[461];
        } TMode_Rec;

typedef struct {
          char    VBESignature[4];
          UInt8   minVersion;
          UInt8   majVersion;
          char *  OEMStringPtr;
          UInt32  Capabilities;
          UInt16* VideoModePtr;
          UInt16  TotalMemory;
          // VESA 2.0 specific fields
          UInt16  OEMSoftwareRev;
          char *  OEMVendorNamePtr;
          char *  OEMProductNamePtr;
          char *  OEMProductRevPtr;
          UInt8   paddington[474];
        } TVESA_Rec;

typedef struct {
          UInt8 BPP;
          UInt8 RedFieldPosition;
          UInt8 GreenFieldPosition;
          UInt8 BlueFieldPosition;
          UInt8 RedMaskSize;
          UInt8 GreenMaskSize;
          UInt8 BlueMaskSize;
        } TPixelFmt;

// Default pixel formats

const TPixelFmt def_pixfmt_8bpp  = {8,0,0,0,0,0,0};
const TPixelFmt def_pixfmt_15bpp = {15,10,5,0,5,5,5};
const TPixelFmt def_pixfmt_16bpp = {16,11,5,0,5,6,5};
const TPixelFmt def_pixfmt_24bpp = {24,16,8,0,8,8,8};
const TPixelFmt def_pixfmt_32bpp = {32,16,8,0,8,8,8};

class TGfx0 
{
        protected:
          TGfx0*       Owner;
	  void*        Buffer;
          UInt32*      LineOfs;
          TRGB*        pal;
          UInt32       xRes, yRes;
          UInt32       MaxX, MaxY;
          UInt32       bSize;       // buffer size (in bytes)
          UInt32       lSize;       // LineOfs size (in bytes)
          UInt32       TransparentColor;  
          og_DataState DataState;
          UInt8        BPP;         // bits per pixel
          UInt8        RedFieldPosition;
          UInt8        GreenFieldPosition;
          UInt8        BlueFieldPosition;
          UInt8        RedShifter;
          UInt8        GreenShifter;
          UInt8        BlueShifter;
          bool         AntiAlias;
          bool         clipLine(Int32&, Int32&, Int32&, Int32&);
          void         rawLine(UInt32, UInt32, UInt32, UInt32, UInt32);
        public:
          TGfx0(void);
          bool         alias(TGfx0&, UInt32, UInt32, UInt32, UInt32);
          void         arc(UInt32, UInt32, UInt32, UInt32, UInt32, UInt32);
          void         bar(Int32, Int32, Int32, Int32, UInt32);
          // void bSpline
          void         circle(Int32, Int32, UInt32, UInt32);
          bool         create(UInt32, UInt32, TPixelFmt);
          void         clear(UInt32);
          void         clone(TGfx0&);
          void         copy(TGfx0&);
          void         copyBuf(Int32, Int32, 
                               TGfx0&, Int32, Int32, Int32, Int32);
          // cubicBezierCurve
          // curve
          // drawpoly
          UInt8        getBPP(void);
          void *       getBufferPtr(void);
          og_DataState getDataState(void);
          UInt32 *     getLineOfsPtr(void);
          TRGB *       getPalPtr(void);
          UInt32       getMaxX(void);
          UInt32       getMaxY(void);
          // getPal
          void         getPixFmt(TPixelFmt&);
          UInt32       getPixel(Int32, Int32);
          UInt32       getTransparentColor(void);
          void         hFlip(void);
          void         hLine(Int32, Int32, Int32, UInt32);
          void         line(Int32, Int32, Int32, Int32, UInt32);
          // loadPal
          void         putPixel(UInt32, UInt32, UInt32);
          void         rect(Int32, Int32, Int32, Int32, UInt32);
          UInt32       RGB(UInt8, UInt8, UInt8);
          // savePal
          void         setRGBPalette(UInt8, UInt8, UInt8, UInt8);
          void         setTransparentColor(UInt32);
          void         unpackRGB(UInt32, UInt8&, UInt8&, UInt8&);
          void         vLine(Int32, Int32, Int32, UInt32);
          void         vFlip(void);
          ~TGfx0(void);
}; // TGfx0

class TScreen: public TGfx0
{
         protected:
          TVESA_Rec*   VESARec;
          TMode_Rec*   ModeRec;
          bool         InGraphics;
        public:
          TScreen(void);
          void setupMode(UInt16);
          ~TScreen(void);
}; // TScreen   
#endif