Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5131 clevermous 1
/*
2
Copyright (C) 1996-1997 Id Software, Inc.
3
 
4
This program is free software; you can redistribute it and/or
5
modify it under the terms of the GNU General Public License
6
as published by the Free Software Foundation; either version 2
7
of the License, or (at your option) any later version.
8
 
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
 
13
See the GNU General Public License for more details.
14
 
15
You should have received a copy of the GNU General Public License
16
along with this program; if not, write to the Free Software
17
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18
 
19
*/
20
// d_clear: clears a specified rectangle to the specified color
21
 
22
#include "quakedef.h"
23
 
24
 
25
/*
26
================
27
D_FillRect
28
================
29
*/
30
void D_FillRect (vrect_t *rect, int color)
31
{
32
	int				rx, ry, rwidth, rheight;
33
	unsigned char	*dest;
34
	unsigned		*ldest;
35
 
36
	rx = rect->x;
37
	ry = rect->y;
38
	rwidth = rect->width;
39
	rheight = rect->height;
40
 
41
	if (rx < 0)
42
	{
43
		rwidth += rx;
44
		rx = 0;
45
	}
46
	if (ry < 0)
47
	{
48
		rheight += ry;
49
		ry = 0;
50
	}
51
	if (rx+rwidth > vid.width)
52
		rwidth = vid.width - rx;
53
	if (ry+rheight > vid.height)
54
		rheight = vid.height - rx;
55
 
56
	if (rwidth < 1 || rheight < 1)
57
		return;
58
 
59
	dest = ((byte *)vid.buffer + ry*vid.rowbytes + rx);
60
 
61
	if (((rwidth & 0x03) == 0) && (((long)dest & 0x03) == 0))
62
	{
63
	// faster aligned dword clear
64
		ldest = (unsigned *)dest;
65
		color += color << 16;
66
 
67
		rwidth >>= 2;
68
		color += color << 8;
69
 
70
		for (ry=0 ; ry
71
		{
72
			for (rx=0 ; rx
73
				ldest[rx] = color;
74
			ldest = (unsigned *)((byte*)ldest + vid.rowbytes);
75
		}
76
	}
77
	else
78
	{
79
	// slower byte-by-byte clear for unaligned cases
80
		for (ry=0 ; ry
81
		{
82
			for (rx=0 ; rx
83
				dest[rx] = color;
84
			dest += vid.rowbytes;
85
		}
86
	}
87
}
88