/*-
* Copyright (c) 2002-2018 The UbixOS Project.
* All rights reserved.
*
* This was developed by Christopher W. Olsen for the UbixOS Project.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted
* provided that the following conditions are met:
*
* 1) Redistributions of source code must retain the above copyright notice, this list of
* conditions, the following disclaimer and the list of authors.
* 2) Redistributions in binary form must reproduce the above copyright notice, this list of
* conditions, the following disclaimer and the list of authors in the documentation and/or
* other materials provided with the distribution.
* 3) Neither the name of the UbixOS Project nor the names of its contributors may be used to
* endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* objgfx30.h
*
* Created on: Jan 12, 2018
* Author: cwolsen
*/
#ifndef SYS_INCLUDE_OBJGFX_OBJGFX30_H_
#define SYS_INCLUDE_OBJGFX_OBJGFX30_H_
#include <stdlib.h> // for NULL
#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 ogDataState {
ogNONE, ogOWNER, ogALIASING
};
typedef struct {
uInt8 red;
uInt8 green;
uInt8 blue;
} TRGB;
typedef struct {
uInt8 red;
uInt8 green;
uInt8 blue;
uInt8 alpha;
} TRGBA;
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 AlphaMaskSize;
uInt8 AlphaFieldPosition;
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 {
Int32 x;
Int32 y;
} TPoint;
typedef struct {
uInt8 BPP;
uInt8 RedFieldPosition;
uInt8 GreenFieldPosition;
uInt8 BlueFieldPosition;
uInt8 AlphaFieldPosition;
uInt8 RedMaskSize;
uInt8 GreenMaskSize;
uInt8 BlueMaskSize;
uInt8 AlphaMaskSize;
} TPixelFmt;
// Default pixel formats
const TPixelFmt NULL_PIXFMT = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
const TPixelFmt DEF_PIXFMT_8BPP = { 8, 0, 0, 0, 0, 0, 0, 0, 0 };
const TPixelFmt DEF_PIXFMT_15BPP = { 15, 10, 5, 0, 15, 5, 5, 5, 1 };
const TPixelFmt DEF_PIXFMT_16BPP = { 16, 11, 5, 0, 0, 5, 6, 5, 0 };
const TPixelFmt DEF_PIXFMT_24BPP = { 24, 16, 8, 0, 8, 8, 8 };
const TPixelFmt DEF_PIXFMT_32BPP = { 32, 16, 8, 0, 24, 8, 8, 8, 8 };
const TPixelFmt DEF_MAC_PIXFMT_16BPP = { 16, 8, 4, 0, 12, 4, 4, 4, 4 };
#include "defpal.inc"
class TGfx0 {
protected:
TGfx0* Owner;
uInt32 xRes, yRes;
uInt32 MaxX, MaxY;
uInt32 bSize; // buffer size (in bytes)
uInt32 lSize; // LineOfs size (in bytes)
uInt32 TransparentColor;
ogDataState DataState;
uInt8 BPP; // bits per pixel
uInt8 RedFieldPosition;
uInt8 GreenFieldPosition;
uInt8 BlueFieldPosition;
uInt8AlphaFieldPosition;
uInt8 RedShifter;
uInt8 GreenShifter;
uInt8 BlueShifter;
uInt8AlphaShifter;
bool AntiAlias;
bool clipLine(Int32&, Int32&, Int32&, Int32&);
void rawLine(uInt32, uInt32, uInt32, uInt32, uInt32);
void aaRawLine(uInt32, uInt32, uInt32, uInt32, uInt32);
public:
void* Buffer;
uInt32* LineOfs;
TRGB* pal;
TGfx0(void);
bool ogAlias(TGfx0&, uInt32, uInt32, uInt32, uInt32);
void ogArc(Int32, Int32, uInt32, uInt32, uInt32, uInt32);
void ogBSpline(uInt32, TPoint*, uInt32, uInt32);
void ogCircle(Int32, Int32, uInt32, uInt32);
void ogClear(uInt32);
bool ogClone(TGfx0&);
void ogCopy(TGfx0&);
void ogCopyBuf(Int32, Int32, TGfx0&, Int32, Int32, Int32, Int32);
bool ogCreate(uInt32, uInt32, TPixelFmt);
void ogCubicBezierCurve(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, uInt32, uInt32);
void ogCurve(Int32, Int32, Int32, Int32, Int32, Int32, uInt32, uInt32);
void ogFillCircle(Int32, Int32, uInt32, uInt32);
void ogFillConvexPolygon(uInt32, TPoint*, uInt32);
void ogFillPolygon(uInt32, TPoint*, uInt32);
void ogFillRect(Int32, Int32, Int32, Int32, uInt32);
void ogFillTriangle(Int32, Int32, Int32, Int32, Int32, Int32, uInt32);
bool ogGetAntiAlias(void);
uInt8 ogGetBPP(void);
ogDataState ogGetDataState(void);
uInt32 ogGetMaxX(void);
uInt32 ogGetMaxY(void);
void ogGetPal(void);
void ogGetPixFmt(TPixelFmt&);
uInt32 ogGetPixel(Int32, Int32);
uInt32 ogGetTransparentColor(void);
void ogHFlip(void);
void ogHLine(Int32, Int32, Int32, uInt32);
void ogLine(Int32, Int32, Int32, Int32, uInt32);
void ogLoadPal(const char *);
void ogPolygon(uInt32, TPoint*, uInt32);
void ogRect(Int32, Int32, Int32, Int32, uInt32);
uInt32 ogRGB(uInt8, uInt8, uInt8);
void ogSavePal(const char *);
void ogScaleBuf(Int32, Int32, Int32, Int32, TGfx0&, Int32, Int32, Int32, Int32);
bool ogSetAntiAlias(bool);
void ogSetPixel(uInt32, uInt32, uInt32);
void ogSetRGBPalette(uInt8, uInt8, uInt8, uInt8);
uInt32 ogSetTransparentColor(uInt32);
void ogSpline(uInt32, TPoint*, uInt32, uInt32);
void ogTriangle(Int32, Int32, Int32, Int32, Int32, Int32, uInt32);
void ogUnpackRGB(uInt32, uInt8&, uInt8&, uInt8&);
void ogVFlip(void);
void ogVLine(Int32, Int32, Int32, uInt32);
~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 /* END SYS_INCLUDE_OBJGFX_OBJGFX30_H_ */