2 * Copyright © 2004 David Reveman
4 * Permission to use, copy, modify, distribute, and sell this software
5 * and its documentation for any purpose is hereby granted without
6 * fee, provided that the above copyright notice appear in all copies
7 * and that both that copyright notice and this permission notice
8 * appear in supporting documentation, and that the name of
9 * David Reveman not be used in advertising or publicity pertaining to
10 * distribution of the software without specific, written prior permission.
11 * David Reveman makes no representations about the suitability of this
12 * software for any purpose. It is provided "as is" without express or
15 * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
16 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
17 * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
18 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
19 * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
20 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
21 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23 * Author: David Reveman <davidr@novell.com>
29 xglParseFindNext (char *cur
,
34 while (*cur
&& !strchr (delim
, *cur
))
47 xglParseScreen (char *arg
)
53 xglScreenInfo
.width
= 0;
54 xglScreenInfo
.height
= 0;
55 xglScreenInfo
.widthMm
= 0;
56 xglScreenInfo
.heightMm
= 0;
61 if (strlen (arg
) >= sizeof (save
))
64 for (i
= 0; i
< 2; i
++)
66 arg
= xglParseFindNext (arg
, "x/", save
, &delim
);
75 arg
= xglParseFindNext (arg
, "x", save
, &delim
);
84 xglScreenInfo
.width
= pixels
;
85 xglScreenInfo
.widthMm
= mm
;
89 xglScreenInfo
.height
= pixels
;
90 xglScreenInfo
.heightMm
= mm
;
99 xglParseAccel (char *arg
)
101 xglAccelInfoPtr pAccel
;
108 if (strlen (arg
) >= sizeof (save
))
111 arg
= xglParseFindNext (arg
, "@:", save
, &delim
);
115 if (strcasecmp (save
, "pixmap") == 0)
116 pAccel
= &xglScreenInfo
.accel
.pixmap
;
117 else if (strcasecmp (save
, "window") == 0)
118 pAccel
= &xglScreenInfo
.accel
.window
;
119 else if (strcasecmp (save
, "glx") == 0)
120 pAccel
= &xglScreenInfo
.accel
.glx
;
121 else if (strcasecmp (save
, "xv") == 0)
122 pAccel
= &xglScreenInfo
.accel
.xv
;
128 arg
= xglParseFindNext (arg
, "/x:", save
, &delim
);
132 pAccel
->size
.aboveWidth
= pAccel
->size
.minWidth
= atoi (save
);
136 arg
= xglParseFindNext (arg
, "x:", save
, &delim
);
140 pAccel
->size
.aboveWidth
= atoi (save
);
145 arg
= xglParseFindNext (arg
, "/:", save
, &delim
);
149 pAccel
->size
.aboveHeight
= pAccel
->size
.minHeight
= atoi (save
);
153 arg
= xglParseFindNext (arg
, ":", save
, &delim
);
157 pAccel
->size
.aboveHeight
= atoi (save
);
162 pAccel
->enabled
= TRUE
;
163 pAccel
->pbuffer
= FALSE
;
167 if (strcasecmp (arg
, "fbo") == 0)
169 else if (strcasecmp (arg
, "off") == 0 ||
170 strncasecmp (arg
, "0", 1) == 0 ||
171 strncasecmp (arg
, "f", 1) == 0 ||
172 strncasecmp (arg
, "n", 1) == 0)
174 pAccel
->enabled
= FALSE
;
175 pAccel
->pbuffer
= FALSE
;
177 else if (strcasecmp (arg
, "pbuffer") == 0)
179 pAccel
->pbuffer
= TRUE
;
187 ErrorF ("-vertextype [short|float] set vertex data type\n");
188 ErrorF ("-yinverted Y is upside-down\n");
190 "accelerate lines that are not vertical or horizontal\n");
192 "use vertex buffer objects for streaming of vertex data\n");
193 ErrorF ("-pbomask [1|4|8|16|32] "
194 "set bpp's to use with pixel buffer objects\n");
195 ErrorF ("-accel TYPE[@WIDTH[/MIN]xHEIGHT[/MIN]][:METHOD] "
196 "offscreen acceleration\n");
200 xglProcessArgument (int argc
,
204 if (!strcmp (argv
[i
], "-vertextype"))
208 if (!strcasecmp (argv
[i
+ 1], "short"))
209 xglScreenInfo
.geometryDataType
= GEOMETRY_DATA_TYPE_SHORT
;
210 else if (!strcasecmp (argv
[i
+ 1], "float"))
211 xglScreenInfo
.geometryDataType
= GEOMETRY_DATA_TYPE_FLOAT
;
218 else if (!strcmp (argv
[i
], "-yinverted"))
220 xglScreenInfo
.yInverted
= TRUE
;
223 else if (!strcmp (argv
[i
], "-lines"))
225 xglScreenInfo
.lines
= TRUE
;
228 else if (!strcmp (argv
[i
], "-vbo"))
230 xglScreenInfo
.geometryUsage
= GEOMETRY_USAGE_STREAM
;
233 else if (!strcmp (argv
[i
], "-pbomask"))
237 xglScreenInfo
.pboMask
= atoi (argv
[i
+ 1]);
244 else if (!strcmp (argv
[i
], "-accel"))
248 xglParseAccel (argv
[i
+ 1]);