ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/renderopts.c
(Generate patch)

Comparing ray/src/rt/renderopts.c (file contents):
Revision 2.18 by greg, Mon Mar 21 19:06:08 2016 UTC vs.
Revision 2.22 by greg, Tue Aug 15 01:19:37 2023 UTC

# Line 13 | Line 13 | static const char      RCSid[] = "$Id$";
13   #include  "paths.h"
14   #include  "pmapopt.h"
15  
16 + extern char     *progname;      /* global argv[0] */
17 +
18 + char    RFeatureList[2048] =    /* newline-separated feature list */
19 +                "VirtualSources\nSecondarySources\nSourceSubsampling\n"
20 +                "SourceVisibility\nAmbientModifierSelection\n"
21 +                "PathTracing\nRussianRoulette\nLowDiscrepancySeq\n"
22 +                "SpecularSampling\nMaterialMixtures\nAntimatter\nBackFaceVisibility\n"
23 +                "ScatteringModels=WGMD,Ashikhmin-Shirley\n"
24 +                "TabulatedBSDFs=DataFile,KlemsXML,TensorTreeXML,+ViewPeakExtraction\n"
25 +                "Instancing=Octree,TriangleMesh\nAliases\n"
26 + #if !defined(SHADCACHE) || SHADCACHE > 0
27 +                "ShadowCache\n"
28 + #endif
29 + #ifdef  DISPERSE
30 +                "DielectricDispersion\n"
31 + #endif
32 + /*              PMAP_FEATURES   XXX @Roland: need to define this in pmapopt.h */
33 + ;
34 +
35 +
36 + static char *
37 + get_feature(            /* find a specific feature (with optional sublist) */
38 +        const char *feat
39 + )
40 + {
41 +        char    *cp = RFeatureList;
42 +        int     n = 0;
43 +
44 +        while ((feat[n] != '\0') & (feat[n] != '='))
45 +                n++;
46 +        if (!n)
47 +                return(NULL);
48 +        while (*cp) {
49 +                if (!strncmp(cp, feat, n) && (cp[n] == '\n') | !feat[n] | (cp[n] == feat[n]))
50 +                        return(cp);
51 +                while (*cp++ != '\n')
52 +                        ;
53 +        }
54 +        return(NULL);
55 + }
56 +
57 +
58 + static int
59 + match_subfeatures(      /* check if subfeatures are supported */
60 +        char *mysublist,
61 +        char *reqs
62 + )
63 + {
64 +        if (mysublist)
65 +                mysublist = strchr(mysublist, '=');
66 +        if (!mysublist++ | !reqs)
67 +                return(0);              /* not a feature list */
68 +        while (*reqs) {                 /* check each of their subfeature requests */
69 +                char    subfeat[64];
70 +                char    *cp = subfeat;
71 +                int     n;
72 +                while (*reqs && (*cp = *reqs++) != ',')
73 +                        cp++;
74 +                *cp = '\0';
75 +                n = cp - subfeat;
76 +                if (!(cp = strstr(mysublist, subfeat)) ||
77 +                                (cp[-1] != ',') & (cp[-1] != '=') ||
78 +                                (cp[n] != ',') & (cp[n] != '\n'))
79 +                        return(0);      /* missing this one! */
80 +        }
81 +        return(1);                      /* matched them all */
82 + }
83 +
84 +
85 + int
86 + feature_status(         /* report active feature list / check specifics */
87 +        int  ac,
88 +        char  *av[]
89 + )
90 + {
91 +        if (ac <= 0)                    /* report entire list? */
92 +                fputs(RFeatureList, stdout);
93 +
94 +        for ( ; ac-- > 0; av++) {       /* check each argument */
95 +                char    *cp;
96 +                if (!*av[0]) continue;
97 +                if ((cp = strchr(av[0], '=')) != NULL) {
98 +                        if (!match_subfeatures(get_feature(av[0]), cp+1))
99 +                                goto missing_feature;
100 +                } else if ((cp = get_feature(av[0])) != NULL) {
101 +                        char    *tp = strchr(cp, '=');
102 +                        if (tp && tp < strchr(cp, '\n'))
103 +                                do
104 +                                        fputc(*cp, stdout);
105 +                                while (*cp++ != '\n');
106 +                } else
107 +                        goto missing_feature;
108 +        }
109 +        return(0);                      /* return satisfactory status */
110 + missing_feature:                        /* or report error */
111 +        fprintf(stderr, "%s: missing feature - %s\n", progname, av[0]);
112 +        return(1);
113 + }
114 +
115  
116   int
117   getrenderopt(           /* get next render option */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines