Mercurial > audlegacy-plugins
annotate src/paranormal/xform.c @ 1942:f14d11bf9cbb
timidity: CONFIG_H define removal
author | William Pitcock <nenolod@atheme.org> |
---|---|
date | Mon, 01 Oct 2007 16:43:45 -0500 |
parents | 3b034150d31e |
children | 56bb18dd3fdd |
rev | line source |
---|---|
1892
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
1 /* |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
2 * paranormal: iterated pipeline-driven visualization plugin |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
3 * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org> |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
4 * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com> |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
5 * |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
6 * This program is free software; you can redistribute it and/or modify |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
7 * it under the terms of the GNU General Public License as published by |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
8 * the Free Software Foundation; under version 2 of the License. |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
9 * |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
10 * This program is distributed in the hope that it will be useful, |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
13 * GNU General Public License for more details. |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
14 * |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
15 * You should have received a copy of the GNU General Public License |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
16 * along with this program; if not, write to the Free Software |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
18 */ |
3b034150d31e
Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents:
367
diff
changeset
|
19 |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
20 /* FIXME: allow for only using an xform on part of the img? */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
21 /* FIXME: perhaps combine these into a single vector field |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
22 so that only 1 apply_xform needs to be done for as many |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
23 of these as someone wants to use */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
24 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
25 #ifdef HAVE_CONFIG_H |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
26 # include <config.h> |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
27 #endif |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
28 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
29 #include <math.h> |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
30 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
31 #include <glib.h> |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
32 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
33 #include "paranormal.h" |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
34 #include "actuators.h" |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
35 #include "pn_utils.h" |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
36 |
333 | 37 #include "libcalc/calc.h" |
38 | |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
39 struct xform_vector |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
40 { |
189
772ad5bc7050
[svn] - now working on amd64/little-endian. no idea how it was working in bigendian mode, though.
nenolod
parents:
188
diff
changeset
|
41 gint32 offset; /* the offset of the top left pixel */ |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
42 guint16 w; /* 4:4:4:4 NE, NW, SE, SW pixel weights |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
43 The total should be 16 */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
44 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
45 /* if offset < 0 then w is the color index to |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
46 which the pixel will be set */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
47 }; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
48 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
49 static void |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
50 xfvec (float x, float y, struct xform_vector *v) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
51 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
52 float xd, yd; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
53 int weight[4]; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
54 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
55 if (x >= pn_image_data->width-1 || y >= pn_image_data->height-1 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
56 || x < 0 || y < 0) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
57 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
58 v->offset = -1; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
59 v->w = 0; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
60 return; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
61 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
62 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
63 v->offset = PN_IMG_INDEX (floor(x), floor(y)); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
64 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
65 xd = x - floor (x); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
66 yd = y - floor (y); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
67 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
68 weight[3] = xd * yd * 16; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
69 weight[2] = (1-xd) * yd * 16; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
70 weight[1] = xd * (1-yd) * 16; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
71 weight[0] = 16 - weight[3] - weight[2] - weight[1]; /* just in case */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
72 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
73 v->w = (weight[0]<<12) | (weight[1]<<8) | (weight[2]<<4) | weight[3]; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
74 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
75 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
76 static void |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
77 apply_xform (struct xform_vector *vfield) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
78 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
79 int i; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
80 struct xform_vector *v; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
81 register guchar *srcptr; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
82 register guchar *destptr; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
83 register int color; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
84 |
334
a9f1bd76a3e6
[svn] - apply_xform(): check for NULL vfield (broken scripts)
nenolod
parents:
333
diff
changeset
|
85 if (vfield == NULL) |
a9f1bd76a3e6
[svn] - apply_xform(): check for NULL vfield (broken scripts)
nenolod
parents:
333
diff
changeset
|
86 return; |
a9f1bd76a3e6
[svn] - apply_xform(): check for NULL vfield (broken scripts)
nenolod
parents:
333
diff
changeset
|
87 |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
88 for (i=0, v=vfield, destptr=pn_image_data->surface[1]; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
89 i<pn_image_data->width*pn_image_data->height; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
90 i++, v++, destptr++) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
91 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
92 /* off the screen */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
93 if (v->offset < 0) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
94 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
95 *destptr = (guchar)v->w; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
96 continue; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
97 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
98 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
99 srcptr = pn_image_data->surface[0] + v->offset; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
100 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
101 /* exactly on the pixel */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
102 if (v->w == 0) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
103 *destptr = *srcptr; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
104 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
105 /* gotta blend the points */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
106 else |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
107 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
108 color = *srcptr * (v->w>>12); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
109 color += *++srcptr * ((v->w>>8) & 0x0f); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
110 color += *(srcptr+=pn_image_data->width) * (v->w & 0x0f); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
111 color += *(--srcptr) * ((v->w>>4) & 0x0f); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
112 color >>= 4; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
113 *destptr = (guchar)color; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
114 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
115 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
116 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
117 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
118 /* **************** xform_spin **************** */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
119 /* FIXME: Describe these better, how they are backwards */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
120 /* FIXME: better name? */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
121 struct pn_actuator_option_desc xform_spin_opts[] = |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
122 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
123 { "angle", "The angle of rotation", OPT_TYPE_FLOAT, { fval: -8.0 } }, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
124 { "r_add", "The number of pixels by which the r coordinate will be " |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
125 "increased (before scaling)", OPT_TYPE_FLOAT, { fval: 0.0 } }, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
126 { "r_scale", "The amount by which the r coordinate of each pixel will " |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
127 "be scaled", OPT_TYPE_FLOAT, { fval: 1.0 } }, |
188 | 128 { NULL } |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
129 }; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
130 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
131 struct xform_spin_data |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
132 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
133 int width, height; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
134 struct xform_vector *vfield; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
135 }; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
136 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
137 static void |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
138 xform_spin_init (gpointer *data) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
139 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
140 *data = g_new0 (struct xform_spin_data, 1); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
141 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
142 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
143 static void |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
144 xform_spin_cleanup (gpointer data) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
145 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
146 struct xform_spin_data *d = (struct xform_spin_data *) data; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
147 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
148 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
149 if (d) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
150 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
151 if (d->vfield) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
152 g_free (d->vfield); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
153 g_free (d); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
154 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
155 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
156 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
157 static void |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
158 xform_spin_exec (const struct pn_actuator_option *opts, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
159 gpointer data) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
160 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
161 struct xform_spin_data *d = (struct xform_spin_data*)data; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
162 float i, j; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
163 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
164 if (d->width != pn_image_data->width |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
165 || d->height != pn_image_data->height) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
166 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
167 d->width = pn_image_data->width; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
168 d->height = pn_image_data->height; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
169 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
170 if (d->vfield) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
171 g_free (d->vfield); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
172 |
188 | 173 d->vfield = g_malloc0 (sizeof(struct xform_vector) |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
174 * d->width * d->height); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
175 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
176 for (j=-(pn_image_data->height>>1)+1; j<=pn_image_data->height>>1; j++) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
177 for (i=-(pn_image_data->width>>1); i<pn_image_data->width>>1; i++) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
178 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
179 float r, t = 0; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
180 float x, y; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
181 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
182 r = sqrt (i*i + j*j); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
183 if (r) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
184 t = asin (j/r); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
185 if (i < 0) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
186 t = M_PI - t; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
187 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
188 t += opts[0].val.fval * M_PI/180.0; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
189 r += opts[1].val.fval; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
190 r *= opts[2].val.fval; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
191 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
192 x = (r * cos (t)) + (pn_image_data->width>>1); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
193 y = (pn_image_data->height>>1) - (r * sin (t)); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
194 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
195 xfvec (x, y, &d->vfield |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
196 [PN_IMG_INDEX ((pn_image_data->width>>1)+(int)rint(i), |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
197 ((pn_image_data->height>>1)-(int)rint(j)))]); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
198 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
199 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
200 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
201 apply_xform (d->vfield); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
202 pn_swap_surfaces (); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
203 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
204 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
205 struct pn_actuator_desc builtin_xform_spin = |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
206 { |
155
adf9f4b26039
[svn] - user-friendly names (UI side unimplemented still)
nenolod
parents:
149
diff
changeset
|
207 "xform_spin", "Spin Transform", |
adf9f4b26039
[svn] - user-friendly names (UI side unimplemented still)
nenolod
parents:
149
diff
changeset
|
208 "Rotates and radially scales the image", |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
209 0, xform_spin_opts, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
210 xform_spin_init, xform_spin_cleanup, xform_spin_exec |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
211 }; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
212 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
213 /* **************** xform_ripple **************** */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
214 struct pn_actuator_option_desc xform_ripple_opts[] = |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
215 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
216 { "angle", "The angle of rotation", OPT_TYPE_FLOAT, { fval: 0 } }, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
217 { "ripples", "The number of ripples that fit on the screen " |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
218 "(horizontally)", OPT_TYPE_FLOAT, { fval: 8 } }, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
219 { "base_speed", "The minimum number of pixels to move each pixel", |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
220 OPT_TYPE_FLOAT, { fval: 1 } }, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
221 { "mod_speed", "The maximum number of pixels by which base_speed" |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
222 " will be modified", OPT_TYPE_FLOAT, { fval: 1 } }, |
188 | 223 { NULL } |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
224 }; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
225 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
226 struct xform_ripple_data |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
227 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
228 int width, height; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
229 struct xform_vector *vfield; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
230 }; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
231 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
232 static void |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
233 xform_ripple_init (gpointer *data) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
234 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
235 *data = g_new0 (struct xform_ripple_data, 1); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
236 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
237 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
238 static void |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
239 xform_ripple_cleanup (gpointer data) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
240 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
241 struct xform_ripple_data *d = (struct xform_ripple_data*) data; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
242 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
243 if (d) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
244 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
245 if (d->vfield) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
246 g_free (d->vfield); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
247 g_free (d); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
248 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
249 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
250 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
251 static void |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
252 xform_ripple_exec (const struct pn_actuator_option *opts, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
253 gpointer data) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
254 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
255 struct xform_ripple_data *d = (struct xform_ripple_data*)data; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
256 float i, j; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
257 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
258 if (d->width != pn_image_data->width |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
259 || d->height != pn_image_data->height) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
260 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
261 d->width = pn_image_data->width; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
262 d->height = pn_image_data->height; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
263 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
264 if (d->vfield) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
265 g_free (d->vfield); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
266 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
267 d->vfield = g_malloc (sizeof(struct xform_vector) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
268 * d->width * d->height); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
269 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
270 for (j=-(pn_image_data->height>>1)+1; j<=pn_image_data->height>>1; j++) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
271 for (i=-(pn_image_data->width>>1); i<pn_image_data->width>>1; i++) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
272 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
273 float r, t = 0; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
274 float x, y; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
275 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
276 r = sqrt (i*i + j*j); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
277 if (r) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
278 t = asin (j/r); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
279 if (i < 0) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
280 t = M_PI - t; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
281 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
282 t += opts[0].val.fval * M_PI/180.0; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
283 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
284 if (r > 4)//(pn_image_data->width/(2*opts[1].val.fval))) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
285 r -= opts[2].val.fval + (opts[3].val.fval/2) * |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
286 (1 + sin ((r/(pn_image_data->width/(2*opts[1].val.fval)))*M_PI)); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
287 /* else if (r > 4) */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
288 /* r *= r/(pn_image_data->width/opts[1].val.fval); */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
289 else /* don't let it explode */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
290 r = 1000000; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
291 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
292 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
293 x = (r * cos (t)) + (pn_image_data->width>>1); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
294 y = (pn_image_data->height>>1) - (r * sin (t)); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
295 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
296 xfvec (x, y, &d->vfield |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
297 [PN_IMG_INDEX ((pn_image_data->width>>1)+(int)rint(i), |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
298 ((pn_image_data->height>>1)-(int)rint(j)))]); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
299 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
300 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
301 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
302 apply_xform (d->vfield); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
303 pn_swap_surfaces (); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
304 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
305 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
306 struct pn_actuator_desc builtin_xform_ripple = |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
307 { |
155
adf9f4b26039
[svn] - user-friendly names (UI side unimplemented still)
nenolod
parents:
149
diff
changeset
|
308 "xform_ripple", "Ripple Transform", "Creates an ripple effect", |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
309 0, xform_ripple_opts, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
310 xform_ripple_init, xform_ripple_cleanup, xform_ripple_exec |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
311 }; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
312 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
313 /* **************** xform_bump_spin **************** */ |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
314 struct pn_actuator_option_desc xform_bump_spin_opts[] = |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
315 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
316 { "angle", "The angle of rotation", OPT_TYPE_FLOAT, { fval: 0 } }, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
317 { "bumps", "The number of bumps that on the image", |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
318 OPT_TYPE_FLOAT, { fval: 8 } }, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
319 { "base_scale", "The base radial scale", |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
320 OPT_TYPE_FLOAT, { fval: 0.95 } }, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
321 { "mod_scale", "The maximum amount that should be " |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
322 "added to the base_scale to create the 'bump' effect", |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
323 OPT_TYPE_FLOAT, { fval: .1 } }, |
188 | 324 { NULL } |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
325 }; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
326 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
327 struct xform_bump_spin_data |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
328 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
329 int width, height; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
330 struct xform_vector *vfield; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
331 }; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
332 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
333 static void |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
334 xform_bump_spin_init (gpointer *data) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
335 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
336 *data = g_new0 (struct xform_bump_spin_data, 1); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
337 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
338 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
339 static void |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
340 xform_bump_spin_cleanup (gpointer data) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
341 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
342 struct xform_bump_spin_data *d = (struct xform_bump_spin_data*) data; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
343 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
344 if (d) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
345 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
346 if (d->vfield) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
347 g_free (d->vfield); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
348 g_free (d); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
349 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
350 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
351 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
352 static void |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
353 xform_bump_spin_exec (const struct pn_actuator_option *opts, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
354 gpointer data) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
355 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
356 struct xform_bump_spin_data *d = (struct xform_bump_spin_data*)data; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
357 float i, j; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
358 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
359 if (d->width != pn_image_data->width |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
360 || d->height != pn_image_data->height) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
361 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
362 d->width = pn_image_data->width; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
363 d->height = pn_image_data->height; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
364 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
365 if (d->vfield) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
366 g_free (d->vfield); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
367 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
368 d->vfield = g_malloc (sizeof(struct xform_vector) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
369 * d->width * d->height); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
370 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
371 for (j=-(pn_image_data->height>>1)+1; j<=pn_image_data->height>>1; j++) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
372 for (i=-(pn_image_data->width>>1); i<pn_image_data->width>>1; i++) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
373 { |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
374 float r, t = 0; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
375 float x, y; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
376 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
377 r = sqrt (i*i + j*j); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
378 if (r) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
379 t = asin (j/r); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
380 if (i < 0) |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
381 t = M_PI - t; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
382 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
383 t += opts[0].val.fval * M_PI/180.0; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
384 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
385 r *= opts[2].val.fval + opts[3].val.fval |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
386 * (1 + sin (t*opts[1].val.fval)); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
387 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
388 x = (r * cos (t)) + (pn_image_data->width>>1); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
389 y = (pn_image_data->height>>1) - (r * sin (t)); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
390 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
391 xfvec (x, y, &d->vfield |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
392 [PN_IMG_INDEX ((pn_image_data->width>>1)+(int)rint(i), |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
393 ((pn_image_data->height>>1)-(int)rint(j)))]); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
394 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
395 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
396 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
397 apply_xform (d->vfield); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
398 pn_swap_surfaces (); |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
399 } |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
400 |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
401 struct pn_actuator_desc builtin_xform_bump_spin = |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
402 { |
155
adf9f4b26039
[svn] - user-friendly names (UI side unimplemented still)
nenolod
parents:
149
diff
changeset
|
403 "xform_bump_spin", "Bump Transform", |
adf9f4b26039
[svn] - user-friendly names (UI side unimplemented still)
nenolod
parents:
149
diff
changeset
|
404 "Rotate the image at a varying speed to create " |
149
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
405 "the illusion of bumps", |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
406 0, xform_bump_spin_opts, |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
407 xform_bump_spin_init, xform_bump_spin_cleanup, xform_bump_spin_exec |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
408 }; |
fd9c0a5871ac
[svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff
changeset
|
409 |
273
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
410 /* **************** xform_halfrender **************** */ |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
411 struct pn_actuator_option_desc xform_halfrender_opts[] = |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
412 { |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
413 { "direction", "Negative is horizontal, positive is vertical.", |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
414 OPT_TYPE_INT, { ival: 1 } }, |
275
a1517b09cb3a
[svn] - add an option to make it only render the downscaled image.
nenolod
parents:
273
diff
changeset
|
415 { "render_twice", "Render the second image.", |
a1517b09cb3a
[svn] - add an option to make it only render the downscaled image.
nenolod
parents:
273
diff
changeset
|
416 OPT_TYPE_BOOLEAN, { bval: TRUE } }, |
273
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
417 { NULL } |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
418 }; |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
419 |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
420 static void |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
421 xform_halfrender_exec (const struct pn_actuator_option *opts, |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
422 gpointer data) |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
423 { |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
424 gint x, y; |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
425 |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
426 if (opts[0].val.ival < 0) |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
427 { |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
428 for (y = 0; y < pn_image_data->height; y += 2) |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
429 { |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
430 for (x = 0; x < pn_image_data->width; x++) |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
431 { |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
432 pn_image_data->surface[1][PN_IMG_INDEX(x, y / 2)] = |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
433 pn_image_data->surface[0][PN_IMG_INDEX(x, y)]; |
275
a1517b09cb3a
[svn] - add an option to make it only render the downscaled image.
nenolod
parents:
273
diff
changeset
|
434 if (opts[1].val.bval) |
a1517b09cb3a
[svn] - add an option to make it only render the downscaled image.
nenolod
parents:
273
diff
changeset
|
435 { |
a1517b09cb3a
[svn] - add an option to make it only render the downscaled image.
nenolod
parents:
273
diff
changeset
|
436 pn_image_data->surface[1][PN_IMG_INDEX(x, (y / 2) + (pn_image_data->height / 2))] = |
a1517b09cb3a
[svn] - add an option to make it only render the downscaled image.
nenolod
parents:
273
diff
changeset
|
437 pn_image_data->surface[0][PN_IMG_INDEX(x, y)]; |
a1517b09cb3a
[svn] - add an option to make it only render the downscaled image.
nenolod
parents:
273
diff
changeset
|
438 } |
273
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
439 } |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
440 } |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
441 } |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
442 else |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
443 { |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
444 for (y = 0; y < pn_image_data->height; y++) |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
445 { |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
446 for (x = 0; x < pn_image_data->width; x += 2) |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
447 { |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
448 pn_image_data->surface[1][PN_IMG_INDEX(x / 2, y)] = |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
449 pn_image_data->surface[0][PN_IMG_INDEX(x, y)]; |
275
a1517b09cb3a
[svn] - add an option to make it only render the downscaled image.
nenolod
parents:
273
diff
changeset
|
450 if (opts[1].val.bval) |
a1517b09cb3a
[svn] - add an option to make it only render the downscaled image.
nenolod
parents:
273
diff
changeset
|
451 { |
a1517b09cb3a
[svn] - add an option to make it only render the downscaled image.
nenolod
parents:
273
diff
changeset
|
452 pn_image_data->surface[1][PN_IMG_INDEX((x / 2) + (pn_image_data->width / 2), y)] = |
a1517b09cb3a
[svn] - add an option to make it only render the downscaled image.
nenolod
parents:
273
diff
changeset
|
453 pn_image_data->surface[0][PN_IMG_INDEX(x, y)]; |
a1517b09cb3a
[svn] - add an option to make it only render the downscaled image.
nenolod
parents:
273
diff
changeset
|
454 } |
273
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
455 } |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
456 } |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
457 } |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
458 |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
459 pn_swap_surfaces (); |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
460 } |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
461 |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
462 struct pn_actuator_desc builtin_xform_halfrender = |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
463 { |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
464 "xform_halfrender", "Halfrender Transform", |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
465 "Divides the surface in half and renders it twice.", |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
466 0, xform_halfrender_opts, |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
467 NULL, NULL, xform_halfrender_exec |
fac0b72ee0de
[svn] - add halfrender transform, and a new preset which demonstrates what it can do.
nenolod
parents:
189
diff
changeset
|
468 }; |
333 | 469 |
470 /* **************** xform_movement **************** */ | |
471 struct pn_actuator_option_desc xform_movement_opts[] = | |
472 { | |
473 { "formula", "The formula to evaluate.", | |
365 | 474 OPT_TYPE_STRING, { sval: "r = r * cos(r); d = sin(d);" } }, |
475 { "polar", "Whether the coordinates are polar or not.", | |
476 OPT_TYPE_BOOLEAN, { bval: TRUE } }, | |
333 | 477 { NULL } |
478 }; | |
479 | |
480 typedef struct { | |
481 int width, height; /* Previous width and height. */ | |
482 struct xform_vector *vfield; | |
483 } PnMovementData; | |
484 | |
485 static void | |
486 xform_movement_init (gpointer *data) | |
487 { | |
488 *data = g_new0(PnMovementData, 1); | |
489 } | |
490 | |
491 static void | |
492 xform_movement_cleanup (gpointer data) | |
493 { | |
494 PnMovementData *d = (PnMovementData *) data; | |
495 | |
496 if (d) | |
497 { | |
498 if (d->vfield) | |
499 g_free (d->vfield); | |
500 g_free (d); | |
501 } | |
502 } | |
503 | |
365 | 504 inline void |
505 xform_trans_polar (struct xform_vector *vfield, gint x, gint y, | |
506 expression_t *expr, symbol_dict_t *dict) | |
507 { | |
508 gdouble *rf, *df; | |
509 gdouble xf, yf; | |
510 gint xn, yn; | |
511 | |
512 rf = dict_variable(dict, "r"); | |
513 df = dict_variable(dict, "d"); | |
514 | |
515 /* Points (xf, yf) must be in a (-1..1) square. */ | |
516 xf = 2.0 * x / (pn_image_data->width - 1) - 1.0; | |
517 yf = 2.0 * y / (pn_image_data->height - 1) - 1.0; | |
518 | |
519 /* Now, convert to polar coordinates r and d. */ | |
520 *rf = hypot(xf, yf); | |
521 *df = atan2(yf, xf); | |
522 | |
523 /* Run the script. */ | |
524 expr_execute(expr, dict); | |
525 | |
526 /* Back to (-1..1) square. */ | |
527 xf = (*rf) * cos ((*df)); | |
528 yf = (*rf) * sin ((*df)); | |
529 | |
530 /* Convert back to physical coordinates. */ | |
531 xn = (int)(((xf + 1.0) * (pn_image_data->width - 1) / 2) + 0.5); | |
532 yn = (int)(((yf + 1.0) * (pn_image_data->height - 1) / 2) + 0.5); | |
533 | |
534 if (xn < 0 || xn >= pn_image_data->width || yn < 0 || yn >= pn_image_data->height) | |
535 { | |
536 xn = x; yn = y; | |
537 } | |
538 | |
539 xfvec (xn, yn, &vfield[PN_IMG_INDEX (x, y)]); | |
540 } | |
541 | |
542 inline void | |
543 xform_trans_literal (struct xform_vector *vfield, gint x, gint y, | |
544 expression_t *expr, symbol_dict_t *dict) | |
545 { | |
546 gdouble rf, df; | |
547 gdouble *xf, *yf; | |
548 gint xn, yn; | |
549 | |
550 xf = dict_variable(dict, "x"); | |
551 yf = dict_variable(dict, "y"); | |
552 | |
553 /* Points (xf, yf) must be in a (-1..1) square. */ | |
554 *xf = 2.0 * x / (pn_image_data->width - 1) - 1.0; | |
555 *yf = 2.0 * y / (pn_image_data->height - 1) - 1.0; | |
556 | |
557 /* Run the script. */ | |
558 expr_execute(expr, dict); | |
559 | |
560 /* Convert back to physical coordinates. */ | |
561 xn = (int)(((*xf + 1.0) * (pn_image_data->width - 1) / 2) + 0.5); | |
562 yn = (int)(((*yf + 1.0) * (pn_image_data->height - 1) / 2) + 0.5); | |
563 | |
564 if (xn < 0 || xn >= pn_image_data->width || yn < 0 || yn >= pn_image_data->height) | |
565 { | |
566 xn = x; yn = y; | |
567 } | |
568 | |
569 xfvec (xn, yn, &vfield[PN_IMG_INDEX (x, y)]); | |
570 } | |
571 | |
333 | 572 static void |
573 xform_movement_exec (const struct pn_actuator_option *opts, | |
574 gpointer odata) | |
575 { | |
576 PnMovementData *d = (PnMovementData *) odata; | |
365 | 577 void (*transform_func)(struct xform_vector *, gint, gint, expression_t *, symbol_dict_t *) = |
578 opts[1].val.bval == TRUE ? xform_trans_polar : xform_trans_literal; | |
333 | 579 |
580 if (d->width != pn_image_data->width | |
581 || d->height != pn_image_data->height) | |
582 { | |
583 gint i, j; | |
584 gdouble *rf, *df; | |
585 gdouble xf, yf; | |
586 gint xn, yn; | |
587 expression_t *expr; | |
588 symbol_dict_t *dict; | |
589 | |
590 d->width = pn_image_data->width; | |
591 d->height = pn_image_data->height; | |
592 | |
593 if (d->vfield) | |
594 { | |
595 g_free (d->vfield); | |
596 d->vfield = NULL; | |
597 } | |
598 | |
599 if (opts[0].val.sval == NULL) | |
600 return; | |
601 | |
602 dict = dict_new(); | |
603 expr = expr_compile_string(opts[0].val.sval, dict); | |
604 if (!expr) | |
605 { | |
606 dict_free(dict); | |
607 return; | |
608 } | |
609 | |
610 rf = dict_variable(dict, "r"); | |
611 df = dict_variable(dict, "d"); | |
612 | |
613 d->vfield = g_malloc (sizeof(struct xform_vector) | |
614 * d->width * d->height); | |
615 | |
616 for (j = 0; j < pn_image_data->height; j++) | |
617 for (i = 0; i < pn_image_data->width; i++) | |
618 { | |
365 | 619 transform_func(d->vfield, i, j, expr, dict); |
333 | 620 } |
621 } | |
622 | |
623 apply_xform (d->vfield); | |
624 pn_swap_surfaces (); | |
625 } | |
626 | |
627 struct pn_actuator_desc builtin_xform_movement = | |
628 { | |
629 "xform_movement", "Movement Transform", | |
630 "A customizable blitter.", | |
631 0, xform_movement_opts, | |
632 xform_movement_init, xform_movement_cleanup, xform_movement_exec | |
633 }; | |
336
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
634 |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
635 /* **************** xform_dynmovement **************** */ |
337 | 636 /* FIXME: really slow */ |
336
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
637 struct pn_actuator_option_desc xform_dynmovement_opts[] = |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
638 { |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
639 { "init_script", "The formula to evaluate on init.", |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
640 OPT_TYPE_STRING, { sval: "" } }, |
366 | 641 { "beat_script", "The formula to evaluate on each beat.", |
642 OPT_TYPE_STRING, { sval: "" } }, | |
336
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
643 { "frame_script", "The formula to evaluate on each frame.", |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
644 OPT_TYPE_STRING, { sval: "" } }, |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
645 { "point_script", "The formula to evaluate.", |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
646 OPT_TYPE_STRING, { sval: "d = 0.15;" } }, |
365 | 647 { "polar", "Whether or not the coordinates to use are polar.", |
648 OPT_TYPE_BOOLEAN, { bval: TRUE } }, | |
336
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
649 { NULL } |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
650 }; |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
651 |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
652 typedef struct { |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
653 int width, height; /* Previous width and height. */ |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
654 expression_t *expr_init; |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
655 expression_t *expr_frame; |
366 | 656 expression_t *expr_beat; |
336
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
657 expression_t *expr_point; |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
658 symbol_dict_t *dict; |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
659 struct xform_vector *vfield; |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
660 } PnDynMovementData; |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
661 |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
662 static void |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
663 xform_dynmovement_init (gpointer *data) |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
664 { |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
665 *data = g_new0(PnDynMovementData, 1); |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
666 } |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
667 |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
668 static void |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
669 xform_dynmovement_cleanup (gpointer data) |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
670 { |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
671 PnDynMovementData *d = (PnDynMovementData *) data; |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
672 |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
673 if (d) |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
674 { |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
675 if (d->expr_init) |
337 | 676 expr_free (d->expr_init); |
367 | 677 if (d->expr_beat) |
678 expr_free (d->expr_beat); | |
336
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
679 if (d->expr_frame) |
337 | 680 expr_free (d->expr_frame); |
336
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
681 if (d->expr_point) |
337 | 682 expr_free (d->expr_point); |
336
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
683 if (d->dict) |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
684 dict_free (d->dict); |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
685 if (d->vfield) |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
686 g_free (d->vfield); |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
687 g_free (d); |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
688 } |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
689 } |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
690 |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
691 static void |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
692 xform_dynmovement_exec (const struct pn_actuator_option *opts, |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
693 gpointer odata) |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
694 { |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
695 PnDynMovementData *d = (PnDynMovementData *) odata; |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
696 gint i, j; |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
697 gdouble *rf, *df; |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
698 gdouble xf, yf; |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
699 gint xn, yn; |
365 | 700 void (*transform_func)(struct xform_vector *, gint, gint, expression_t *, symbol_dict_t *) = |
367 | 701 opts[4].val.bval == TRUE ? xform_trans_polar : xform_trans_literal; |
702 gboolean make_table = FALSE; | |
336
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
703 |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
704 if (d->width != pn_image_data->width |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
705 || d->height != pn_image_data->height) |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
706 { |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
707 d->width = pn_image_data->width; |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
708 d->height = pn_image_data->height; |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
709 |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
710 if (d->vfield) |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
711 { |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
712 g_free (d->vfield); |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
713 d->vfield = NULL; |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
714 } |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
715 |
367 | 716 if (opts[3].val.sval == NULL) |
336
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
717 return; |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
718 |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
719 if (!d->dict) |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
720 d->dict = dict_new(); |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
721 else |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
722 { |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
723 dict_free(d->dict); |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
724 d->dict = dict_new(); |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
725 } |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
726 |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
727 if (d->expr_init) |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
728 { |
337 | 729 expr_free(d->expr_init); |
336
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
730 d->expr_init = NULL; |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
731 } |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
732 |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
733 /* initialize */ |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
734 d->expr_init = expr_compile_string(opts[0].val.sval, d->dict); |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
735 |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
736 if (d->expr_init != NULL) |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
737 { |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
738 expr_execute(d->expr_init, d->dict); |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
739 } |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
740 |
367 | 741 d->expr_beat = expr_compile_string(opts[1].val.sval, d->dict); |
742 d->expr_frame = expr_compile_string(opts[2].val.sval, d->dict); | |
743 d->expr_point = expr_compile_string(opts[3].val.sval, d->dict); | |
336
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
744 |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
745 d->vfield = g_malloc (sizeof(struct xform_vector) |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
746 * d->width * d->height); |
367 | 747 |
748 make_table = TRUE; | |
336
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
749 } |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
750 |
337 | 751 rf = dict_variable(d->dict, "r"); |
752 df = dict_variable(d->dict, "d"); | |
753 | |
367 | 754 if (*opts[2].val.sval != '\0' || pn_new_beat) |
755 make_table = TRUE; | |
756 | |
336
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
757 /* run the on-frame script. */ |
367 | 758 if (make_table == TRUE) |
366 | 759 { |
367 | 760 if (d->expr_beat != NULL) |
366 | 761 expr_execute(d->expr_beat, d->dict); |
336
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
762 |
366 | 763 if (d->expr_frame != NULL) |
764 expr_execute(d->expr_frame, d->dict); | |
765 | |
766 for (j = 0; j < pn_image_data->height; j++) | |
767 for (i = 0; i < pn_image_data->width; i++) | |
768 { | |
769 transform_func(d->vfield, i, j, d->expr_point, d->dict); | |
770 } | |
771 } | |
336
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
772 |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
773 apply_xform (d->vfield); |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
774 pn_swap_surfaces (); |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
775 } |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
776 |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
777 struct pn_actuator_desc builtin_xform_dynmovement = |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
778 { |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
779 "xform_dynmovement", "Dynamic Movement Transform", |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
780 "A customizable blitter.", |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
781 0, xform_dynmovement_opts, |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
782 xform_dynmovement_init, xform_dynmovement_cleanup, xform_dynmovement_exec |
8554beb862c0
[svn] - implement AVS-like Trans / Dynamic Movement
nenolod
parents:
334
diff
changeset
|
783 }; |