#ifndef GRAPHICS_VIEW_H #define GRAPHICS_VIEW_H /* ** $VER: view.h 39.34 (31.5.1993) ** Includes Release 44.1 ** ** graphics view/viewport definintions ** ** (C) Copyright 1985-1999 Amiga, Inc. ** All Rights Reserved */ #define ECS_SPECIFIC #ifndef EXEC_TYPES_H #include <exec/types.h> #endif #ifndef EXEC_SEMAPHORES_H #include <exec/semaphores.h> #endif #ifndef GRAPHICS_GFX_H #include <graphics/gfx.h> #endif #ifndef GRAPHICS_COPPER_H #include <graphics/copper.h> #endif #ifndef GRAPHICS_GFXNODES_H #include <graphics/gfxnodes.h> #endif #ifndef GRAPHICS_MONITOR_H #include <graphics/monitor.h> #endif #ifndef GRAPHICS_DISPLAYINFO_H #include <graphics/displayinfo.h> #endif #ifndef HARDWARE_CUSTOM_H #include <hardware/custom.h> #endif struct ViewPort { struct ViewPort *Next; struct ColorMap *ColorMap; /* table of colors for this viewport */ /* if this is nil, MakeVPort assumes default values */ struct CopList *DspIns; /* used by MakeVPort() */ struct CopList *SprIns; /* used by sprite stuff */ struct CopList *ClrIns; /* used by sprite stuff */ struct UCopList *UCopIns; /* User copper list */ WORD DWidth,DHeight; WORD DxOffset,DyOffset; UWORD Modes; UBYTE SpritePriorities; UBYTE ExtendedModes; struct RasInfo *RasInfo; }; struct View { struct ViewPort *ViewPort; struct cprlist *LOFCprList; /* used for interlaced and noninterlaced */ struct cprlist *SHFCprList; /* only used during interlace */ WORD DyOffset,DxOffset; /* for complete View positioning */ /* offsets are +- adjustments to standard #s */ UWORD Modes; /* such as INTERLACE, GENLOC */ }; /* these structures are obtained via GfxNew */ /* and disposed by GfxFree */ struct ViewExtra { struct ExtendedNode n; struct View *View; /* backwards link */ struct MonitorSpec *Monitor; /* monitors for this view */ UWORD TopLine; }; /* this structure is obtained via GfxNew */ /* and disposed by GfxFree */ struct ViewPortExtra { struct ExtendedNode n; struct ViewPort *ViewPort; /* backwards link */ struct Rectangle DisplayClip; /* MakeVPort display clipping information */ /* These are added for V39 */ APTR VecTable; /* Private */ APTR DriverData[2]; UWORD Flags; Point Origin[2]; /* First visible point relative to the DClip. * One for each possible playfield. */ ULONG cop1ptr; /* private */ ULONG cop2ptr; /* private */ }; /* All these VPXF_ flags are private */ #define VPXB_FREE_ME 0 #define VPXF_FREE_ME (1 << VPXB_FREE_ME) #define VPXB_LAST 1 #define VPXF_LAST (1 << VPXB_LAST) #define VPXB_STRADDLES_256 4 #define VPXF_STRADDLES_256 (1 << VPXB_STRADDLES_256) #define VPXB_STRADDLES_512 5 #define VPXF_STRADDLES_512 (1 << VPXB_STRADDLES_512) #define EXTEND_VSTRUCT 0x1000 /* unused bit in Modes field of View */ #define VPF_A2024 0x40 /* VP?_ fields internal only */ #define VPF_TENHZ 0x20 #define VPB_A2024 6 #define VPB_TENHZ 4 /* defines used for Modes in IVPargs */ #define GENLOCK_VIDEO 0x0002 #define LACE 0x0004 #define DOUBLESCAN 0x0008 #define SUPERHIRES 0x0020 #define PFBA 0x0040 #define EXTRA_HALFBRITE 0x0080 #define GENLOCK_AUDIO 0x0100 #define DUALPF 0x0400 #define HAM 0x0800 #define EXTENDED_MODE 0x1000 #define VP_HIDE 0x2000 #define SPRITES 0x4000 #define HIRES 0x8000 struct RasInfo /* used by callers to and InitDspC() */ { struct RasInfo *Next; /* used for dualpf */ struct BitMap *BitMap; WORD RxOffset,RyOffset; /* scroll offsets in this BitMap */ }; struct ColorMap { UBYTE Flags; UBYTE Type; UWORD Count; APTR ColorTable; struct ViewPortExtra *cm_vpe; APTR LowColorBits; UBYTE TransparencyPlane; UBYTE SpriteResolution; UBYTE SpriteResDefault; /* what resolution you get when you have set SPRITERESN_DEFAULT */ UBYTE AuxFlags; struct ViewPort *cm_vp; APTR NormalDisplayInfo; APTR CoerceDisplayInfo; struct TagItem *cm_batch_items; ULONG VPModeID; struct PaletteExtra *PalExtra; UWORD SpriteBase_Even; UWORD SpriteBase_Odd; UWORD Bp_0_base; UWORD Bp_1_base; }; /* if Type == 0 then ColorMap is V1.2/V1.3 compatible */ /* if Type != 0 then ColorMap is V38 compatible */ /* the system will never create other than V39 type colormaps when running V39 */ #define COLORMAP_TYPE_V1_2 0x00 #define COLORMAP_TYPE_V1_4 0x01 #define COLORMAP_TYPE_V36 COLORMAP_TYPE_V1_4 /* use this definition */ #define COLORMAP_TYPE_V39 0x02 /* Flags variable */ #define COLORMAP_TRANSPARENCY 0x01 #define COLORPLANE_TRANSPARENCY 0x02 #define BORDER_BLANKING 0x04 #define BORDER_NOTRANSPARENCY 0x08 #define VIDEOCONTROL_BATCH 0x10 #define USER_COPPER_CLIP 0x20 #define BORDERSPRITES 0x40 #define CMF_CMTRANS 0 #define CMF_CPTRANS 1 #define CMF_BRDRBLNK 2 #define CMF_BRDNTRAN 3 #define CMF_BRDRSPRT 6 #define SPRITERESN_ECS 0 /* ^140ns, except in 35ns viewport, where it is 70ns. */ #define SPRITERESN_140NS 1 #define SPRITERESN_70NS 2 #define SPRITERESN_35NS 3 #define SPRITERESN_DEFAULT -1 /* AuxFlags : */ #define CMAB_FULLPALETTE 0 #define CMAF_FULLPALETTE (1<<CMAB_FULLPALETTE) #define CMAB_NO_INTERMED_UPDATE 1 #define CMAF_NO_INTERMED_UPDATE (1<<CMAB_NO_INTERMED_UPDATE) #define CMAB_NO_COLOR_LOAD 2 #define CMAF_NO_COLOR_LOAD (1 << CMAB_NO_COLOR_LOAD) #define CMAB_DUALPF_DISABLE 3 #define CMAF_DUALPF_DISABLE (1 << CMAB_DUALPF_DISABLE) struct PaletteExtra /* structure may be extended so watch out! */ { struct SignalSemaphore pe_Semaphore; /* shared semaphore for arbitration */ UWORD pe_FirstFree; /* *private* */ UWORD pe_NFree; /* number of free colors */ UWORD pe_FirstShared; /* *private* */ UWORD pe_NShared; /* *private* */ UBYTE *pe_RefCnt; /* *private* */ UBYTE *pe_AllocList; /* *private* */ struct ViewPort *pe_ViewPort; /* back pointer to viewport */ UWORD pe_SharableColors; /* the number of sharable colors. */ }; /* flags values for ObtainPen */ #define PENB_EXCLUSIVE 0 #define PENB_NO_SETCOLOR 1 #define PENF_EXCLUSIVE (1l<<PENB_EXCLUSIVE) #define PENF_NO_SETCOLOR (1l<<PENB_NO_SETCOLOR) /* obsolete names for PENF_xxx flags: */ #define PEN_EXCLUSIVE PENF_EXCLUSIVE #define PEN_NO_SETCOLOR PENF_NO_SETCOLOR /* precision values for ObtainBestPen : */ #define PRECISION_EXACT -1 #define PRECISION_IMAGE 0 #define PRECISION_ICON 16 #define PRECISION_GUI 32 /* tags for ObtainBestPen: */ #define OBP_Precision 0x84000000 #define OBP_FailIfBad 0x84000001 /* From V39, MakeVPort() will return an error if there is not enough memory, * or the requested mode cannot be opened with the requested depth with the * given bitmap (for higher bandwidth alignments). */ #define MVP_OK 0 /* you want to see this one */ #define MVP_NO_MEM 1 /* insufficient memory for intermediate workspace */ #define MVP_NO_VPE 2 /* ViewPort does not have a ViewPortExtra, and * insufficient memory to allocate a temporary one. */ #define MVP_NO_DSPINS 3 /* insufficient memory for intermidiate copper * instructions. */ #define MVP_NO_DISPLAY 4 /* BitMap data is misaligned for this viewport's * mode and depth - see AllocBitMap(). */ #define MVP_OFF_BOTTOM 5 /* PRIVATE - you will never see this. */ /* From V39, MrgCop() will return an error if there is not enough memory, * or for some reason MrgCop() did not need to make any copper lists. */ #define MCOP_OK 0 /* you want to see this one */ #define MCOP_NO_MEM 1 /* insufficient memory to allocate the system * copper lists. */ #define MCOP_NOP 2 /* MrgCop() did not merge any copper lists * (eg, no ViewPorts in the list, or all marked as * hidden). */ struct DBufInfo { APTR dbi_Link1; ULONG dbi_Count1; struct Message dbi_SafeMessage; /* replied to when safe to write to old bitmap */ APTR dbi_UserData1; /* first user data */ APTR dbi_Link2; ULONG dbi_Count2; struct Message dbi_DispMessage; /* replied to when new bitmap has been displayed at least once */ APTR dbi_UserData2; /* second user data */ ULONG dbi_MatchLong; APTR dbi_CopPtr1; APTR dbi_CopPtr2; APTR dbi_CopPtr3; UWORD dbi_BeamPos1; UWORD dbi_BeamPos2; }; #endif /* GRAPHICS_VIEW_H */