annotate src/paranormal/drawing.c @ 192:a7c823478180 trunk

[svn] - add fast linedrawing code
author nenolod
date Thu, 02 Nov 2006 22:19:05 -0800
parents
children 4b48e6e9b3cb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
192
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
1 #include "paranormal.h"
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
2 #include "actuators.h"
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
3 #include "pn_utils.h"
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
4
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
5 extern SDL_Surface *screen;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
6
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
7 void
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
8 pn_draw_line (guint _x0, guint _y0, guint _x1, guint _y1, guchar value)
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
9 {
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
10 gint x0 = _x0;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
11 gint y0 = _y0;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
12 gint x1 = _x1;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
13 gint y1 = _y1;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
14
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
15 gint dy = y1 - y0;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
16 gint dx = x1 - x0;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
17 gint stepx, stepy;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
18 gint fraction;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
19
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
20 if (dy < 0)
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
21 {
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
22 dy = -dy;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
23 stepy = -(screen->pitch >> 2);
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
24 }
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
25 else
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
26 {
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
27 stepy = screen->pitch>>2;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
28 }
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
29 if (dx < 0)
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
30 {
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
31 dx = -dx;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
32 stepx = -1;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
33 }
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
34 else
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
35 {
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
36 stepx = 1;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
37 }
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
38 dy <<= 1;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
39 dx <<= 1;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
40
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
41 y0 *= screen->pitch>>2;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
42 y1 *= screen->pitch>>2;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
43 pn_image_data->surface[0][PN_IMG_INDEX(x0, y0)] = value;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
44 if (dx > dy)
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
45 {
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
46 fraction = dy - (dx >> 1);
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
47 while (x0 != x1)
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
48 {
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
49 if (fraction >= 0)
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
50 {
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
51 y0 += stepy;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
52 fraction -= dx;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
53 }
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
54 x0 += stepx;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
55 fraction += dy;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
56 pn_image_data->surface[0][PN_IMG_INDEX(x0, y0)] = value;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
57 }
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
58 }
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
59 else
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
60 {
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
61 fraction = dx - (dy >> 1);
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
62 while (y0 != y1)
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
63 {
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
64 if (fraction >= 0)
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
65 {
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
66 x0 += stepx;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
67 fraction -= dy;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
68 }
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
69 y0 += stepy;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
70 fraction += dx;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
71 pn_image_data->surface[0][PN_IMG_INDEX(x0, y0)] = value;
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
72 }
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
73 }
a7c823478180 [svn] - add fast linedrawing code
nenolod
parents:
diff changeset
74 }