mirror of
https://github.com/1dot13/source.git
synced 2026-07-29 13:52:17 +02:00
Error messages will now print the video object's file name when throwing the error, giving us an immediate starting point for debugging. Especially useful when those intermittent assertion errors happen.
281 lines
11 KiB
C
281 lines
11 KiB
C
#ifndef __VOBJECT_H
|
|
#define __VOBJECT_H
|
|
|
|
#include "types.h"
|
|
#include "container.h"
|
|
#include "himage.h"
|
|
|
|
// ************************************************************************************
|
|
//
|
|
// Video Object SGP Module
|
|
//
|
|
// ************************************************************************************
|
|
|
|
|
|
// This definition mimics what is found in WINDOWS.H ( for Direct Draw compatiblity )
|
|
typedef UINT32 COLORVAL;
|
|
|
|
// Defines for blitting
|
|
#define VO_BLT_SRCTRANSPARENCY 0x000000002
|
|
#define VO_BLT_DESTTRANSPARENCY 0x000000120
|
|
#define VO_BLT_SHADOW 0x000000200
|
|
#define VO_BLT_TRANSSHADOW 0x000000003
|
|
#define VO_BLT_UNCOMPRESSED 0x000004000
|
|
#define VO_BLT_CLIP 0x000000001
|
|
#define VO_BLT_MIRROR_Y 0x000001000 // must be the same as VS_BLT_MIRROR_Y for Wiz!!!
|
|
|
|
// Defines for HVOBJECT limits
|
|
#define HVOBJECT_SHADE_TABLES 48
|
|
|
|
#define HVOBJECT_GLOW_GREEN 0
|
|
#define HVOBJECT_GLOW_BLUE 1
|
|
#define HVOBJECT_GLOW_YELLOW 2
|
|
#define HVOBJECT_GLOW_RED 3
|
|
|
|
// Effects structure for specialized blitting
|
|
typedef struct
|
|
{
|
|
UINT32 uiShadowLevel;
|
|
SGPRect ClipRect;
|
|
|
|
} blt_fx;
|
|
|
|
|
|
// Z-buffer info structure for properly assigning Z values
|
|
typedef struct
|
|
{
|
|
INT8 bInitialZChange; // difference in Z value between the leftmost and base strips
|
|
UINT8 ubFirstZStripWidth; // # of pixels in the leftmost strip
|
|
UINT8 ubNumberOfZChanges; // number of strips (after the first)
|
|
INT8 * pbZChange; // change to the Z value in each strip (after the first)
|
|
} ZStripInfo;
|
|
|
|
typedef struct
|
|
{
|
|
UINT16 * p16BPPData;
|
|
UINT16 usRegionIndex;
|
|
UINT8 ubShadeLevel;
|
|
UINT16 usWidth;
|
|
UINT16 usHeight;
|
|
INT16 sOffsetX;
|
|
INT16 sOffsetY;
|
|
} SixteenBPPObjectInfo;
|
|
|
|
// This definition mimics what is found in WINDOWS.H ( for Direct Draw compatiblity )
|
|
// From RGB to COLORVAL
|
|
#define FROMRGB(r, g ,b) ((UINT32) (((UINT8) (r) | ((UINT16) (g) << 8)) | (((UINT32) (UINT8) (b)) << 16)))
|
|
|
|
|
|
// Video object creation flags
|
|
// Used in the VOBJECT_DESC structure to describe creation flags
|
|
|
|
#define VOBJECT_CREATE_DEFAULT 0x00000020 // Creates and empty object of given width, height and BPP
|
|
#define VOBJECT_CREATE_FROMFILE 0x00000040 // Creates a video object from a file ( using HIMAGE )
|
|
#define VOBJECT_CREATE_FROMHIMAGE 0x00000080 // Creates a video object from a pre-loaded hImage
|
|
#define VOBJECT_CREATE_FROMJPC 0x00010000 // replace file extension : sti -> jpc.7z
|
|
#define VOBJECT_CREATE_FROMPNG 0x00020000 // replace file extension : sti -> png
|
|
#define VOBJECT_CREATE_FROMJPC_FALLBACK 0x00100000 // replace file extension : sti -> jpc.7z, fall back to sti when it doesn't exist
|
|
#define VOBJECT_CREATE_FROMPNG_FALLBACK 0x00200000 // replace file extension : sti -> png, fall back to sti when it doesn't exist
|
|
|
|
// VOBJECT FLAGS
|
|
#define VOBJECT_FLAG_SHADETABLE_SHARED 0x00000100
|
|
|
|
// This structure is a video object.
|
|
// The video object contains different data based on it's type, compressed or not
|
|
typedef struct TAG_HVOBJECT
|
|
{
|
|
UINT32 fFlags; // Special flags
|
|
UINT32 uiSizePixData; // ETRLE data size
|
|
SGPPaletteEntry *pPaletteEntry; // 8BPP Palette
|
|
COLORVAL TransparentColor; // Defaults to 0,0,0
|
|
UINT16 *p16BPPPalette; // A 16BPP palette used for 8->16 blits
|
|
|
|
PTR pPixData; // ETRLE pixel data
|
|
ETRLEObject *pETRLEObject; // Object offset data etc
|
|
SixteenBPPObjectInfo *p16BPPObject;
|
|
UINT16 *pShades[HVOBJECT_SHADE_TABLES]; // Shading tables
|
|
UINT16 *pShadeCurrent;
|
|
UINT16 *pGlow; // glow highlight table
|
|
UINT8 *pShade8; // 8-bit shading index table
|
|
UINT8 *pGlow8; // 8-bit glow table
|
|
ZStripInfo **ppZStripInfo; // Z-value strip info arrays
|
|
|
|
UINT16 usNumberOf16BPPObjects;
|
|
UINT16 usNumberOfObjects; // Total number of objects
|
|
UINT8 ubBitDepth; // BPP
|
|
SGPFILENAME ImageFile;
|
|
} SGPVObject, *HVOBJECT;
|
|
|
|
|
|
// This structure describes the creation parameters for a Video Object
|
|
typedef struct
|
|
{
|
|
UINT32 fCreateFlags; // Specifies creation flags like from file or not
|
|
union
|
|
{
|
|
//struct
|
|
//{
|
|
SGPFILENAME ImageFile; // Filename of image data to use
|
|
//};
|
|
//struct
|
|
//{
|
|
HIMAGE hImage;
|
|
//};
|
|
};
|
|
UINT8 ubBitDepth; // BPP, ignored if given from file
|
|
} VOBJECT_DESC;
|
|
|
|
// **********************************************************************************
|
|
//
|
|
// Video Object Manager Functions
|
|
//
|
|
// **********************************************************************************
|
|
/*
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
*/
|
|
// Creates a list to contain video objects
|
|
BOOLEAN InitializeVideoObjectManager( );
|
|
|
|
int filter(unsigned int code, struct _EXCEPTION_POINTERS *ep);
|
|
|
|
// Deletes any video object placed into list
|
|
BOOLEAN ShutdownVideoObjectManager( );
|
|
|
|
// Creates and adds a video object to list
|
|
#ifdef SGP_VIDEO_DEBUGGING
|
|
void PerformVideoInfoDumpIntoFile( const STR8 filename, BOOLEAN fAppend );
|
|
void DumpVObjectInfoIntoFile( const STR8 filename, BOOLEAN fAppend );
|
|
BOOLEAN _AddAndRecordVObject( VOBJECT_DESC *VObjectDesc, UINT32 *uiIndex, UINT32 uiLineNum, const STR8 pSourceFile );
|
|
#define AddVideoObject( a, b ) _AddAndRecordVObject( a, b, __LINE__, __FILE__ )
|
|
#else
|
|
#define AddVideoObject( a, b ) AddStandardVideoObject( a, b )
|
|
#endif
|
|
|
|
BOOLEAN AddStandardVideoObject( VOBJECT_DESC *VObjectDesc, UINT32 *uiIndex );
|
|
|
|
// Removes a video object
|
|
BOOLEAN DeleteVideoObjectFromIndex( UINT32 uiVObject );
|
|
|
|
UINT16 CreateObjectPaletteTables(HVOBJECT pObj, UINT32 uiType);
|
|
|
|
// Returns a HVOBJECT for the specified index
|
|
BOOLEAN GetVideoObject( HVOBJECT *hVObject, UINT32 uiIndex );
|
|
|
|
// Blits a video object to another video object
|
|
BOOLEAN BltVideoObject( UINT32 uiDestVSurface,
|
|
HVOBJECT hVSrcObject,
|
|
UINT16 usRegionIndex,
|
|
INT32 iDestX,
|
|
INT32 iDestY,
|
|
UINT32 fBltFlags,
|
|
blt_fx *pBltFx );
|
|
BOOLEAN BltVideoObject(UINT32 uiDestVSurface, HVOBJECT hSrcVObject, UINT16 usRegionIndex, SGPRectangle Region, UINT32 fBltFlags, blt_fx* pBltFx);
|
|
|
|
BOOLEAN BltVideoObjectFromIndex( UINT32 uiDestVSurface,
|
|
UINT32 uiSrcVObject,
|
|
UINT16 usRegionIndex,
|
|
INT32 iDestX,
|
|
INT32 iDestY,
|
|
UINT32 fBltFlags,
|
|
blt_fx *pBltFx );
|
|
|
|
// Sets transparency
|
|
BOOLEAN SetVideoObjectTransparency( UINT32 uiIndex, COLORVAL TransColor );
|
|
|
|
|
|
// **********************************************************************************
|
|
//
|
|
// Video Object manipulation functions
|
|
//
|
|
// **********************************************************************************
|
|
|
|
|
|
// Created from a VOBJECT_DESC structure. Can be from a file via HIMAGE or empty.
|
|
HVOBJECT CreateVideoObject( VOBJECT_DESC *VObjectDesc );
|
|
|
|
// Sets Transparency color into HVOBJECT
|
|
BOOLEAN SetVideoObjectTransparencyColor( HVOBJECT hVObject, COLORVAL TransColor );
|
|
|
|
// Sets HVOBJECT palette, creates if nessessary. Also sets 16BPP palette
|
|
BOOLEAN SetVideoObjectPalette( HVOBJECT hVObject, SGPPaletteEntry *pSrcPalette );
|
|
|
|
// Deletes all data
|
|
BOOLEAN DeleteVideoObject( HVOBJECT hVObject );
|
|
|
|
// Deletes the 16-bit palette tables
|
|
BOOLEAN DestroyObjectPaletteTables(HVOBJECT hVObject);
|
|
|
|
// Sets the current object shade table
|
|
UINT16 SetObjectShade(HVOBJECT pObj, UINT32 uiShade);
|
|
|
|
// Sets the current object shade table using a vobject handle
|
|
UINT16 SetObjectHandleShade(UINT32 uiHandle, UINT32 uiShade);
|
|
|
|
// Fills a rectangular area of an object with a color
|
|
UINT16 FillObjectRect(UINT32 iObj, INT32 x1, INT32 y1, INT32 x2, INT32 y2, COLORVAL color32);
|
|
|
|
// Retrieves an HVOBJECT pixel value
|
|
BOOLEAN GetETRLEPixelValue( UINT8 * pDest, HVOBJECT hVObject, UINT16 usETLREIndex, UINT16 usX, UINT16 usY );
|
|
|
|
|
|
// ****************************************************************************
|
|
//
|
|
// Globals
|
|
//
|
|
// ****************************************************************************
|
|
extern HLIST ghVideoObjects;
|
|
|
|
// ****************************************************************************
|
|
//
|
|
// Macros
|
|
//
|
|
// ****************************************************************************
|
|
|
|
extern BOOLEAN gfVideoObjectsInit;
|
|
#define VideoObjectsInitialized() (gfVideoObjectsInit)
|
|
|
|
// ****************************************************************************
|
|
//
|
|
// Blt Functions
|
|
//
|
|
// ****************************************************************************
|
|
|
|
// These blitting functions more-or less encapsolate all of the functionality of DirectDraw
|
|
// Blitting, giving an API layer for portability.
|
|
|
|
BOOLEAN BltVideoObjectToBuffer( UINT16 *pBuffer, UINT32 uiDestPitchBYTES, HVOBJECT hSrcVObject, UINT16 usIndex, INT32 iDestX, INT32 iDestY, INT32 fBltFlags, blt_fx *pBltFx );
|
|
|
|
HVOBJECT GetPrimaryVideoObject( );
|
|
HVOBJECT GetBackBufferVideoObject( );
|
|
|
|
BOOLEAN GetVideoObjectETRLEProperties( HVOBJECT hVObject, ETRLEObject *pETRLEObject, UINT16 usIndex );
|
|
BOOLEAN GetVideoObjectETRLEPropertiesFromIndex( UINT32 uiVideoObject, ETRLEObject *pETRLEObject, UINT16 usIndex );
|
|
BOOLEAN GetVideoObjectETRLESubregionProperties( UINT32 uiVideoObject, UINT16 usIndex, UINT16 *pusWidth, UINT16 *pusHeight );
|
|
|
|
BOOLEAN SetVideoObjectPalette8BPP(INT32 uiVideoObject, SGPPaletteEntry *pPal8);
|
|
BOOLEAN SetVideoObjectPalette16BPP(INT32 uiVideoObject, UINT16 *pPal16);
|
|
BOOLEAN GetVideoObjectPalette16BPP(INT32 uiVideoObject, UINT16 **ppPal16);
|
|
BOOLEAN CopyVideoObjectPalette16BPP(INT32 uiVideoObject, UINT16 *ppPal16);
|
|
|
|
BOOLEAN ConvertVObjectRegionTo16BPP( HVOBJECT hVObject, UINT16 usRegionIndex, UINT8 ubShadeLevel );
|
|
BOOLEAN CheckFor16BPPRegion( HVOBJECT hVObject, UINT16 usRegionIndex, UINT8 ubShadeLevel, UINT16 * pusIndex );
|
|
|
|
BOOLEAN BltVideoObjectOutlineFromIndex(UINT32 uiDestVSurface, UINT32 uiSrcVObject, UINT16 usIndex, INT32 iDestX, INT32 iDestY, INT16 s16BPPColor, BOOLEAN fDoOutline );
|
|
BOOLEAN BltVideoObjectOutline(UINT32 uiDestVSurface, HVOBJECT hSrcVObject, UINT16 usIndex, INT32 iDestX, INT32 iDestY, INT16 s16BPPColor, BOOLEAN fDoOutline );
|
|
BOOLEAN BltVideoObjectOutlineShadowFromIndex(UINT32 uiDestVSurface, UINT32 uiSrcVObject, UINT16 usIndex, INT32 iDestX, INT32 iDestY );
|
|
BOOLEAN BltVideoObjectOutlineShadow(UINT32 uiDestVSurface, HVOBJECT hSrcVObject, UINT16 usIndex, INT32 iDestX, INT32 iDestY );
|
|
BOOLEAN PixelateVideoObjectRect( UINT32 uiDestVSurface, INT32 X1, INT32 Y1, INT32 X2, INT32 Y2);
|
|
|
|
// Flugente: retrieve width and height of video object
|
|
void GetVideoObjectDimensions( HVOBJECT hSrcVObject, UINT16 usIndex, UINT16& rusWidth, UINT16& rusHeight );
|
|
|
|
/*
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
*/
|
|
|
|
#endif
|