/* Emacs style mode select   -*- C++ -*- */
/*-----------------------------------------------------------------------------*/

/* $Id:$*/

/* Copyright (C) 1993-1996 by id Software, Inc.*/

/* This source is available for distribution and/or modification*/
/* only under the terms of the DOOM Source Code License as*/
/* published by id Software. All rights reserved.*/

/* The source is distributed in the hope that it will be useful,*/
/* but WITHOUT ANY WARRANTY; without even the implied warranty of*/
/* FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License*/
/* for more details.*/

/* DESCRIPTION:*/
/*	Gamma correction LUT.*/
/*	Functions to draw patches (by post) directly to screen.*/
/*	Functions to blit a block to the screen.*/

/*-----------------------------------------------------------------------------*/


#ifndef __V_VIDEO__
#define __V_VIDEO__

#include "doomtype.h"

#include "doomdef.h"

/* Needed because we are refering to patches.*/
#include "r_data.h"


/* VIDEO*/


#define CENTERY			(SCREENHEIGHT/2)


/* Screen 0 is the screen updated by I_Update screen.*/
/* Screen 1 is an extra buffer.*/



extern	pixel_t*	screens[5];


extern  int		dirtybox[4];

extern const byte	gammatable[5][256];
extern	int		usegamma;



/* Allocates buffer screens, call before R_Init.*/
void V_Init (void);


void
V_CopyRect
( int		srcx,
  int		srcy,
  int		srcscrn,
  int		width,
  int		height,
  int		destx,
  int		desty,
  int		destscrn );

void
V_DrawPatch
( int		x,
  int		y,
  int		scrn,
  const patch_t* patch);

void
V_DrawPatchFlipped
( int		x,
  int		y,
  int		scrn,
  const patch_t* patch);

/* Better than calling V_DrawPatch from V_DrawPatchDirect */
#ifdef DIYARMASS
#define V_DrawPatchDirect V_DrawPatch
#else
void
V_DrawPatchDirect
( int		x,
  int		y,
  int		scrn,
  const patch_t* patch );
#endif


/* Draw a linear block of pixels into the view buffer.*/
void
V_DrawBlock
( int		x,
  int		y,
  int		scrn,
  int		width,
  int		height,
  const pixel_t* src );

/* Reads a linear block of pixels into the view buffer.*/
void
V_GetBlock
( int		x,
  int		y,
  int		scrn,
  int		width,
  int		height,
  pixel_t*	dest );


void
V_MarkRect
( int		x,
  int		y,
  int		width,
  int		height );

#endif
/*-----------------------------------------------------------------------------*/

/* $Log:$*/

/*-----------------------------------------------------------------------------*/
