1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
--- xjig.C.orig Wed Jul 24 13:14:28 1996
+++ xjig.C Tue Apr 7 15:34:34 1998
@@ -61,7 +61,8 @@
Window win;
GC gc;
-int texture_mode=0; // mode for texture mapping depending on depth
+int pixmap_depth = 0;
+int scanline_pad = 0;
Cursor normal_cursor, move_cursor, pull_cursor, idle_cursor, no_cursor;
@@ -324,7 +325,7 @@
printf( " -sa : shuffle angles\n" );
printf( " -sp : shuffle positions\n" );
printf( " -r : rotation demo\n" );
- printf( " -8 -16 -32 : manually select optimized texture mapping routine\n" );
+ printf( " -8 -16 -24 -32 : manually select optimized texture mapping routine\n" );
printf( " -dist <n> : distortion percentage\n" );
printf( " -maxang <n>: maximum rotation angle at startup\n" );
printf( " -rand <n> : seed for random generator\n" );
@@ -392,9 +393,10 @@
#ifdef PINUP_DEFAULT
else if (!strcmp(argv[i],"-pinup")) filename=PINUP_DEFAULT;
#endif
- else if (!strcmp(argv[i],"-8")) texture_mode=1;
- else if (!strcmp(argv[i],"-16")) texture_mode=2;
- else if (!strcmp(argv[i],"-32")) texture_mode=3;
+ else if (!strcmp(argv[i],"-8")) pixmap_depth=8;
+ else if (!strcmp(argv[i],"-16")) pixmap_depth=16;
+ else if (!strcmp(argv[i],"-32")) pixmap_depth=32;
+ else if (!strcmp(argv[i],"-24")) pixmap_depth=24;
else if (!strcmp(argv[i],"-shm")) shared=1;
else if (!strcmp(argv[i],"-no_shm")) shared=0;
else if (!strcmp(argv[i],"-shapes")) shapes=1;
@@ -465,30 +467,34 @@
printf( "xjig V2.4, by Helmut Hoenig, July-24-96\n" );
printf( "\n" );
- if (!texture_mode) {
- //
- // check screen depth to select function for texture mappings
- //
- switch(DefaultDepth(dpy,scr)) {
- case 8: texture_mode=1; break;
- case 16: texture_mode=2; break;
- case 24:
- case 32: texture_mode=3; break;
+ XPixmapFormatValues *pmf;
+
+ int n;
+ pmf = XListPixmapFormats (dpy, &n);
+ if (pmf) {
+ for (int i = 0; i < n; i++) {
+ if (pixmap_depth) {
+ if (pixmap_depth == pmf[i].depth) {
+ scanline_pad = pmf[i].scanline_pad;
+ break;
+ }
+ } else if (pmf[i].depth == DefaultDepth(dpy,scr)) {
+ pixmap_depth = pmf[i].depth;
+ scanline_pad = pmf[i].scanline_pad;
+ break;
+ }
}
+ XFree ((char *) pmf);
}
- if (!texture_mode) {
- fprintf( stderr, "*** Unable to select texture mode for Depth %d\n", DefaultDepth(dpy,scr) );
- fprintf( stderr, " You can manually select one by trying either -8, -16 or -32\n" );
- fprintf( stderr, " Good Luck.\n" );
- exit(0);
+
+
+ if (!scanline_pad) {
+ fprintf(stderr,"No matching depth mode found\n");
+ exit(1);
}
if (verbose) {
- switch( texture_mode ) {
- case 1: printf( "texture mode 1: 1 byte\n" ); break;
- case 2: printf( "texture mode 2: 2 byte\n" ); break;
- case 3: printf( "texture mode 3: 4 byte\n" ); break;
- }
+ printf("depth: %d pad: %d\n",pixmap_depth,scanline_pad);
}
old_handler=XSetErrorHandler( error_handler );
|