os4units: support for Cybergraphics gfx

git-svn-id: trunk@33659 -
This commit is contained in:
marcus 2016-05-06 19:07:14 +00:00
parent b6f73bf1cf
commit a414a8bded
3 changed files with 259 additions and 0 deletions

1
.gitattributes vendored
View File

@ -6326,6 +6326,7 @@ packages/os4units/src/agraphics.pas svneol=native#text/pascal
packages/os4units/src/amigados.pas svneol=native#text/pascal
packages/os4units/src/asl.pas svneol=native#text/pascal
packages/os4units/src/clipboard.pas svneol=native#text/pascal
packages/os4units/src/cybergraphics.pas svneol=native#text/pascal
packages/os4units/src/diskfont.pas svneol=native#text/pascal
packages/os4units/src/exec.pas svneol=native#text/pascal
packages/os4units/src/icon.pas svneol=native#text/pascal

View File

@ -48,6 +48,7 @@ begin
T:=P.Targets.AddUnit('asl.pas');
T:=P.Targets.AddUnit('icon.pas');
T:=P.Targets.AddUnit('picasso96api.pas');
T:=P.Targets.AddUnit('cybergraphics.pas');
{$ifndef ALLPACKAGES}
Run;

View File

@ -0,0 +1,257 @@
{
This file is part of the Free Pascal run time library.
Copyright (c) 2014 by Free Pascal development team
cybergraphics.library functions
See the file COPYING.FPC, included in this distribution,
for details about the copyright.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
unit cybergraphics;
interface
uses
Exec, agraphics, utility;
const
CYBERGFXNAME = 'cybergraphics.library';
CYBERGFX_INCLUDE_VERSION = 41;
// Definition of CyberModeNode (Returned in AllocModeList)
type
PCyberModeNode = ^TCyberModeNode;
TCyberModeNode = record
Node: TNode;
ModeText: array[0..DISPLAYNAMELEN - 1] of Char; // name for this mode
DisplayID: ULONG; // display id associated with the node
Width: UWORD; // visible width
Height: UWORD; // visible height
Depth: UWORD; // display depth
DisplayTagList: PTagItem; // taglist with extended ModeID information
end;
const
// Parameters for GetCyberMapAttr()
CYBRMATTR_XMOD = $80000001; // function returns BytesPerRow if its called with this parameter
CYBRMATTR_BPPIX = $80000002; // BytesPerPixel shall be returned
CYBRMATTR_DISPADR = $80000003; // do not use this ! private tag
CYBRMATTR_PIXFMT = $80000004; // the pixel format is returned
CYBRMATTR_WIDTH = $80000005; // returns width in pixels
CYBRMATTR_HEIGHT = $80000006; // returns height in lines
CYBRMATTR_DEPTH = $80000007; // returns bits per pixel
CYBRMATTR_ISCYBERGFX = $80000008; // returns -1 if supplied bitmap is a cybergfx one
CYBRMATTR_ISLINEARMEM = $80000009; // returns -1 if supplied bitmap is linear accessable
CYBRMATTR_PIXFMT_ALPHA = $8000000A;
// Parameters for GetCyberIDAttr()
CYBRIDATTR_PIXFMT = $80000001; // the pixel format is returned
CYBRIDATTR_WIDTH = $80000002; // returns visible width in pixels
CYBRIDATTR_HEIGHT = $80000003; // returns visible height in lines
CYBRIDATTR_DEPTH = $80000004; // returns bits per pixel
CYBRIDATTR_BPPIX = $80000005; // BytesPerPixel shall be returned
// Tags for CyberModeRequest()
CYBRMREQ_TB = TAG_USER + $40000;
// FilterTags
CYBRMREQ_MinDepth = CYBRMREQ_TB + 0; // Minimum depth for displayed screenmode
CYBRMREQ_MaxDepth = CYBRMREQ_TB + 1; // Maximum depth " " "
CYBRMREQ_MinWidth = CYBRMREQ_TB + 2; // Minumum width " " "
CYBRMREQ_MaxWidth = CYBRMREQ_TB + 3; // Maximum width " " "
CYBRMREQ_MinHeight = CYBRMREQ_TB + 4; // Minumum height " " "
CYBRMREQ_MaxHeight = CYBRMREQ_TB + 5; // Minumum height " " "
CYBRMREQ_CModelArray = CYBRMREQ_TB + 6;
CYBRMREQ_WinTitle = CYBRMREQ_TB + 20;
CYBRMREQ_OKText = CYBRMREQ_TB + 21;
CYBRMREQ_CancelText = CYBRMREQ_TB + 22;
CYBRMREQ_Screen = CYBRMREQ_TB + 30; // Screen you wish the Requester to open on
// Tags for BestCyberModeID()
CYBRBIDTG_TB = TAG_USER + $50000;
// FilterTags
CYBRBIDTG_Depth = CYBRBIDTG_TB + 0;
CYBRBIDTG_NominalWidth = CYBRBIDTG_TB + 1;
CYBRBIDTG_NominalHeight = CYBRBIDTG_TB + 2;
CYBRBIDTG_MonitorID = CYBRBIDTG_TB + 3;
CYBRBIDTG_BoardName = CYBRBIDTG_TB + 5;
// definition of divers pixel formats
PIXFMT_LUT8 = 0;
PIXFMT_RGB15 = 1;
PIXFMT_BGR15 = 2;
PIXFMT_RGB15PC = 3;
PIXFMT_BGR15PC = 4;
PIXFMT_RGB16 = 5;
PIXFMT_BGR16 = 6;
PIXFMT_RGB16PC = 7;
PIXFMT_BGR16PC = 8;
PIXFMT_RGB24 = 9;
PIXFMT_BGR24 = 10;
PIXFMT_ARGB32 = 11;
PIXFMT_BGRA32 = 12;
PIXFMT_RGBA32 = 13;
// SrcRectangle formats defines for xxxPixelArray calls()
RECTFMT_RGB = 0;
RECTFMT_RGBA = 1;
RECTFMT_ARGB = 2;
RECTFMT_LUT8 = 3;
RECTFMT_GREY8 = 4;
RECTFMT_RAW = 5;
// AROS extensions
// Parameters for CVideoCtrlTagList()
SETVC_DPMSLevel = $88002001;
DPMS_ON = 0; // Full operation
DPMS_STANDBY = 1; // Optional state of minimal power reduction
DPMS_SUSPEND = 2; // Significant reduction of power consumption
DPMS_OFF = 3; // Lowest level of power consumption
// Tags for LockBitMapTagList()
LBMI_WIDTH = $84001001;
LBMI_HEIGHT = $84001002;
LBMI_DEPTH = $84001003;
LBMI_PIXFMT = $84001004;
LBMI_BYTESPERPIX = $84001005;
LBMI_BYTESPERROW = $84001006;
LBMI_BASEADDRESS = $84001007;
// Tags for UnLockBitMapTagList()
UBMI_UPDATERECTS = $85001001;
UBMI_REALLYUNLOCK = $85001002;
type
// Message passed to the DoCDrawMethodTagList() hook function
PCDrawMsg = ^TCDrawMsg;
TCDrawMsg = record
cdm_MemPtr: APTR;
cdm_offx: ULONG;
cdm_offy: ULONG;
cdm_xsize: ULONG;
cdm_ysize: ULONG;
cdm_BytesPerRow: UWORD;
cdm_BytesPerPix: UWORD;
cdm_ColorModel: UWORD;
end;
// Colour Table source formats for WriteLUTPixelArray() ULONG [] table
const
CTABFMT_XRGB8 = 0;
// graphics.library/AllocBitMap() extended flags
BMB_SPECIALFMT = 7;
BMF_SPECIALFMT = 1 shl BMB_SPECIALFMT;
var
CyberGfxBase: PLibrary = nil;
ICyberGfx: PInterface = nil;
function CyberGfxObtain(): LongWord; syscall ICyberGfx 60;
function CyberGfxRelease(): LongWord; syscall ICyberGfx 64;
procedure CyberGfxExpunge(); syscall ICyberGfx 68;
function CyberGfxClone(): PInterface; syscall ICyberGfx 72;
// 76 - 88 Reserved
function IsCyberModeID(displayID: LongWord): LongBool; syscall ICyberGfx 92;
function BestCModeIDTagList(BestModeIDTags: PTagItem): LongWord; syscall ICyberGfx 96;
// 100 BestCModeIDTags
function CModeRequestTagList(ModeRequest: APTR; ModeRequestTags: PTagItem): LongWord; syscall ICyberGfx 104;
// 108 CModeRequestTags
function AllocCModeListTagList(ModeListTags: PTagItem): PList; syscall ICyberGfx 112;
// 116 AllocCModeListTags
procedure FreeCModeList(ModeList: PList); syscall ICyberGfx 120;
// 120 reserved
function ScalePixelArray(SrcRect: APTR; SrcW, SrcH, SrcMod: LongWord; RastPort: PRastPort; DestX, DestY: LongInt; DestW, DestH, SrcFormat: LongWord): LongInt; syscall ICyberGfx 128;
function GetCyberMapAttr(CyberGfxBitmap: PBitMap; CyberAttrTag: LongWord): LongWord; syscall ICyberGfx 132;
function GetCyberIDAttr(CyberIDAttr, CyberDisplayModeID: LongWord): LongWord; syscall ICyberGfx 136;
function ReadRGBPixel(Rp: PRastPort; X, Y: LongInt): LongWord; syscall ICyberGfx 140;
function WriteRGBPixel(Rp: PRastPort; X, Y: LongInt; Pixel: LongWord): LongInt; syscall ICyberGfx 144;
function ReadPixelArray(DestRect: APTR; DestX, DestY: LongInt; DestMod: LongWord; Rp: PRastPort; SrcX, SrcY: LongInt; Width, Height, DstFormat: LongWord): LongWord; syscall ICyberGfx 148;
function WritePixelArray(SrcRect: APTR; SrcX, SrcY: LongInt; SrcMod: LongWord; Rp: PRastPort; DestX, DestY: LongInt; Width, Height, SrcFormat: LongWord): LongWord; syscall ICyberGfx 152;
function MovePixelArray(SrcX, SrcY: LongWord; RastPort: PRastPort; DstX, DstY, SizeX, SizeY: LongWord): LongWord; syscall ICyberGfx 156;
// 160 reserved
function InvertPixelArray(Rp: PRastPort; DestX, DestY: LongInt; Width, Height: LongWord): LongWord; syscall ICyberGfx 164;
function FillPixelArray(Rp: PRastPort; DestX, DestY: LongInt; Width, Height, Pixel: LongWord): LongWord; syscall ICyberGfx 168;
procedure DoCDrawMethodTagList(Hook: PHook; Rp: PRastPort; Tags: PTagItem); syscall ICyberGfx 172;
// 176 DoCDrawMethodTags
procedure CVideoCtrlTagList(Vp: PViewPort; TagList: PTagItem); syscall ICyberGfx 180;
// 184 CVideoCtrlTags
function LockBitMapTagList(Bitmap: APTR; TagList: PTagItem): APTR; syscall ICyberGfx 188;
// 192 LockBitMapTags
procedure UnLockBitMap(Handle: APTR); syscall ICyberGfx 196;
procedure UnLockBitMapTagList(Handle: APTR; TagList: PTagItem); syscall ICyberGfx 200;
// 204 UnLockBitMapTags
function ExtractColor(RastPort: PRastPort; SingleMap: PBitMap; Colour: LongWord; SX, SY, Width, Height: LongWord): LongWord; syscall ICyberGfx 208;
// 212 reserved
function WriteLUTPixelArray(SrcRect: APTR; SrcX, SrcY: LongInt; SrcMod: LongWord; Rp: PRastPort; CTable: APTR; DestX, DestY: LongInt; SizeX, SizeY, CTabFormat: LongWord): LongInt; syscall ICyberGfx 216;
// 220 reserved
// 224 reserved
function WritePixelArrayAlpha(Src: APTR; SrcX, SrcY, SrcMod: LongInt; Rp: PRastPort; DestX, DestY: LongInt; Width, Height, GlobalAlpha: LongWord): LongWord; syscall ICyberGfx 228;
procedure BltTemplateAlpha(SrcTemplate: APTR; SrcX, SrcY: LongInt; Rp: PRastPort; DestX, DestY: LongInt; Width, Height: LongWord); syscall ICyberGfx 232;
// Functions and procedures with array of const go here
function AllocCModeListTags(const ModeListTags: array of PtrUInt): PList;
function BestCModeIDTags(const BestModeIDTags: array of PtrUInt): LongWord;
procedure CVideoCtrlTags(ViewPort: PViewPort; const TagList: array of PtrUInt);
procedure DoCDrawMethodTags(Hook: PHook; a1arg: PRastPort; const TagList: array of PtrUInt);
function LockBitMapTags(BitMap: APTR; const TagList: array of PtrUInt): APTR;
procedure UnLockBitMapTags(Handle: APTR; const TagList: array of PtrUInt);
function SHIFT_PIXFMT(fmt: LongInt): LongInt;
function DOWNSHIFT_PIXFMT(fmt: LongInt): LongInt;
implementation
// Functions and procedures with array of const go here
function AllocCModeListTags(const ModeListTags: array of PtrUInt): PList; inline;
begin
AllocCModeListTags := AllocCModeListTagList(@ModeListTags);
end;
function BestCModeIDTags(const BestModeIDTags: array of PtrUInt): LongWord; inline;
begin
BestCModeIDTags := BestCModeIDTagList(@BestModeIDTags);
end;
procedure CVideoCtrlTags(ViewPort: PViewPort; const TagList: array of PtrUInt); inline;
begin
CVideoCtrlTagList(ViewPort, @TagList);
end;
procedure DoCDrawMethodTags(Hook: PHook; a1arg: PRastPort; const TagList: array of PtrUInt); inline;
begin
DoCDrawMethodTagList(Hook, a1arg, @TagList);
end;
function LockBitMapTags(BitMap: APTR; const TagList: array of PtrUInt): APTR; inline;
begin
LockBitMapTags := LockBitMapTagList(BitMap, @TagList);
end;
procedure UnLockBitMapTags(Handle: APTR; const TagList: array of PtrUInt); inline;
begin
UnLockBitMapTagList(Handle, @TagList);
end;
function SHIFT_PIXFMT(fmt: LongInt): LongInt;
begin
SHIFT_PIXFMT:=(ULONG(fmt)) shl 24;
end;
function DOWNSHIFT_PIXFMT(fmt: LongInt): LongInt;
begin
DOWNSHIFT_PIXFMT:=(ULONG(fmt)) shr 24;
end;
initialization
CyberGfxBase := OpenLibrary(CYBERGFXNAME, 0);
if Assigned(CyberGfxBase) then
ICyberGfx := GetInterface(CyberGfxBase, 'main', 1, nil);
finalization
if Assigned(ICyberGfx) then
DropInterface(ICyberGfx);
if Assigned(CyberGfxBase) then
CloseLibrary(CyberGfxBase);
end.