mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-02 05:29:34 +01:00
os4units: support for Cybergraphics gfx
git-svn-id: trunk@33659 -
This commit is contained in:
parent
b6f73bf1cf
commit
a414a8bded
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -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
|
||||
|
||||
@ -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;
|
||||
|
||||
257
packages/os4units/src/cybergraphics.pas
Normal file
257
packages/os4units/src/cybergraphics.pas
Normal 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.
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user