/*
	This file is part of Warzone 2100.
	Copyright (C) 1999-2004  Eidos Interactive
	Copyright (C) 2005-2007  Warzone Resurrection Project

	Warzone 2100 is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation; either version 2 of the License, or
	(at your option) any later version.

	Warzone 2100 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. See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with Warzone 2100; if not, write to the Free Software
	Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
// vid.c 0.1 10-01-96.22-11-96
#ifndef _rendmode_h_
#define _rendmode_h_
#include "ivisdef.h"
#include "pieblitfunc.h"
#include "bitimage.h"
#include "textdraw.h"

//*************************************************************************
//patch

#define iV_RenderBegin			pie_LocalRenderBegin
#define iV_RenderEnd			pie_LocalRenderEnd
#define	iV_Line				pie_Line	
#define	iV_Box				pie_Box	
#define	iV_BoxFill			pie_BoxFillIndex
#define	iV_TransBoxFill			pie_TransBoxFill		
#define	iV_UniTransBoxFill		pie_UniTransBoxFill		
#define	iV_DrawImage			pie_ImageFileID
#define	iV_DrawImageRect		pie_ImageFileIDTile
#define	iV_DrawTransImage		pie_ImageFileID
#define	iV_DrawTransImageRect		pie_ImageFileIDTile
#define	iV_DrawStretchImage		pie_ImageFileIDStretch
#define iV_UploadDisplayBuffer		pie_UploadDisplayBuffer
#define iV_DownloadDisplayBuffer	pie_DownloadDisplayBuffer
#define iV_ScaleBitmapRGB		pie_ScaleBitmapRGB

//*************************************************************************

#define REND_D3D_RGB		0x133			// Direct3D 640x480x16bit RGB renderer (mmx)
#define REND_D3D_HAL		0x143			// Direct3D 640x480x16bit hardware
#define REND_D3D_REF		0x153			// Direct3D 640x480x16bit hardware
#define REND_GLIDE_3DFX		0x200			// 3dfx Glide API
#define REND_16BIT		0x400			// 16bit software mode for video
#define iV_MODE_SURFACE		0x10000			// off-screen surface
#define REND_PSX		0x20000			// PlayStation - added by tjc
#define REND_UNDEFINED		-1			// undefined mode

//*************************************************************************
// polygon flags	b0..b7: col, b24..b31: anim index

//#define PIE_FLAT			0x00000100
#define PIE_TEXTURED			0x00000200
//#define PIE_WIRE			0x00000400
#define PIE_COLOURKEYED			0x00000800
//#define PIE_GOURAUD			0x00001000
#define PIE_NO_CULL			0x00002000
//#define PIE_TEXANIM			0x00004000	// PIE_TEX must be set also
#define PIE_PSXTEX			0x00008000	// - use playstation texture allocation method
#define PIE_BSPFRESH			0x00010000	// Freshly created by the BSP 
#define PIE_NOHALFPSXTEX		0x00020000
#define PIE_ALPHA			0x00040000

//*************************************************************************

#define REND_SURFACE_UNDEFINED		0
#define REND_SURFACE_SCREEN		1
#define REND_SURFACE_USR		2

#define REND_MAX_X			pie_GetVideoBufferWidth()
#define iV_SCREEN_Y_MAX			pie_GetVideoBufferHeight()
#define iV_SCREEN_SIZE_MAX		(iV_SCREEN_X_MAX * iV_SCREEN_Y_MAX)
#define iV_SCREEN_WIDTH			(rendSurface.width)
#define iV_SCREEN_HEIGHT		(rendSurface.height)
#define iV_SCREEN_BUFFER		(rendSurface.buffer)

//*************************************************************************

extern iSurface	rendSurface;
extern iSurface	*psRendSurface;

//*************************************************************************

extern void rend_AssignScreen(void);
extern void rend_Assign(iSurface *s);
extern void iV_RenderAssign(iSurface *s);
extern void iV_SurfaceDestroy(iSurface *s);
extern iSurface *iV_SurfaceCreate(uint32 flags, int width, int height, int xp, int yp, uint8 *buffer);

//*************************************************************************

extern int iV_GetDisplayWidth(void);
extern int iV_GetDisplayHeight(void);

//*************************************************************************
// vid stuff still to be cut down
//*************************************************************************

extern char* (*iV_ScreenDumpToDisk)(void);
extern void (*iV_ppBitmap)(iBitmap *bmp, int x, int y, int w, int h, int ow);
extern void (*iV_ppBitmapTrans)(iBitmap *bmp, int x, int y, int w, int h, int ow);
extern void (*iV_SetTransFilter)(UDWORD rgb,UDWORD tablenumber);
extern void (*iV_UniBitmapDepth)(int texPage, int u, int v, int srcWidth, int srcHeight, 
							int x, int y, int destWidth, int destHeight, unsigned char brightness, int depth);

extern void (*iV_SetTransImds)(BOOL trans);

//mapdisplay

/* Blit a transparent rectangle to the back buffer */
extern void	iVBlitTransRect(UDWORD x0, UDWORD x1, UDWORD y0, UDWORD y1);

/* Optimised DWORD read/write to memory */
extern void	iVFBlitTransRect(UDWORD x0, UDWORD y0, UDWORD x1, UDWORD y1);

/* Possible filter colours for the transparency rectangle blit */
#define TINT_BLUE	0
#define TRANS_GREY	1
#define TRANS_BLUE	2
#define TRANS_BRITE	3
#define TINT_DEEPBLUE	4

extern void iV_DrawMousePointer(int x,int y);
extern void iV_SetMousePointer(IMAGEFILE *ImageFile,UWORD ImageID);
extern void (*iV_ppBitmapColourTrans)(iBitmap *bmp, int x, int y, int w, int h, int ow,int ColourIndex);

#endif
