1 //******************************************************************************
2 ///
3 /// @file povms/povmsid.h
4 ///
5 /// This module contains all defines, typedefs, and prototypes for the POVMS
6 /// interface.
7 ///
8 /// @copyright
9 /// @parblock
10 ///
11 /// Persistence of Vision Ray Tracer ('POV-Ray') version 3.8.
12 /// Copyright 1991-2018 Persistence of Vision Raytracer Pty. Ltd.
13 ///
14 /// POV-Ray is free software: you can redistribute it and/or modify
15 /// it under the terms of the GNU Affero General Public License as
16 /// published by the Free Software Foundation, either version 3 of the
17 /// License, or (at your option) any later version.
18 ///
19 /// POV-Ray is distributed in the hope that it will be useful,
20 /// but WITHOUT ANY WARRANTY; without even the implied warranty of
21 /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22 /// GNU Affero General Public License for more details.
23 ///
24 /// You should have received a copy of the GNU Affero General Public License
25 /// along with this program.  If not, see <http://www.gnu.org/licenses/>.
26 ///
27 /// ----------------------------------------------------------------------------
28 ///
29 /// POV-Ray is based on the popular DKB raytracer version 2.12.
30 /// DKBTrace was originally written by David K. Buck.
31 /// DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
32 ///
33 /// @endparblock
34 ///
35 //******************************************************************************
36 
37 #ifndef POVMSID_H
38 #define POVMSID_H
39 
40 /*
41  * The following instructions are an example of how to add a POVMS option
42  * to POV-Ray, e.g. a new command-line switch or whatever. In this case we
43  * are discussing the best way to add the Render_Block_Size option; you
44  * should be able to extrapolate from this to whatever it is you intend doing.
45  *
46  * Take a look at frontend/processrenderoptions.cpp, i.e. Final_Frame in the
47  * RenderOptions_INI_Table table. As you see, apart from a name, you need a
48  * enum for POVMS. Those are in povms/povmsid.h . Please note that the Enums
49  * follow a strict convention there to allow easily tracing back a four
50  * character code to the variable. The block size is part of the view/rendered,
51  * so it goes into the section marked with the comment "// options handled by
52  * view/renderer". As you notice, options are groups by functions and separated
53  * by a blank line. Thread specs are a new option, so a new group would be
54  * appropriate (just add it at the end of that section).
55  *
56  * Now to the naming: The four characters are the initial characters of each
57  * word in the variable. However, Sometimes that isn't enough, so the rule is
58  * to use the initial characters except for the last word if there are less
59  * than four characters so far, the second and third characters of the last
60  * word are used as well, and those are lower case, for example:
61  *
62  * kPOVAttrib_DebugConsole -> Debug CONsole -> DCon
63  *
64  * However, sometimes this does not yield a valid difference, for example:
65  *
66  * kPOVAttrib_PreSceneCommand -> Pre Scene COmmand -> PSCo
67  * kPOVAttrib_PostSceneCommand -> Post Scene COmmand -> PSCo
68  *
69  * So the rule then goes that the word that makes a difference is expanded, so
70  * the "Post" and "Pre", which yields:
71  *
72  * kPOVAttrib_PreSceneCommand -> PRe Scene Command -> PrSC
73  * kPOVAttrib_PostSceneCommand -> POst Scene Command -> PoSC
74  *
75  * However, there are exptions to this rule as well because the names on the
76  * kPOVAttrib_xxx enums folow those in the INI file, which are not always
77  * consistent. Hence, for example there would be:
78  *
79  * kPOVAttrib_SamplingMethod -> Sampling METhod -> SMet
80  *
81  * BUT, this is an anit-aliasing option, just without a prepended AnitAliasing
82  * in the kPOVAttrib_xxx name (because it follows the option name). Thus, here
83  * the rule is to implicitly prepend the AnitAliasing, yielding:
84  *
85  * kPOVAttrib_SamplingMethod -> (Anti Aliasing) Sampling Method -> AASM
86  *
87  * Then there is yet another rule for files: They should be written with an
88  * implied "Name" at the end, i.e.:
89  *
90  * kPOVAttrib_DebugFile -> Debug File (NAme) -> DFNa
91  *
92  * The implied "Name" at the end is more for historic reasons, but as it is
93  * used throughout, it should be kept as is ;-)
94  *
95  * So, now that you know how to define it, make sure you select a useful name,
96  * i.e. "RenderBlockSize" in the INI option, so you would get "RBSi" for the
97  * four character code and an easy to read INI file.
98  *
99  * After this, also decide if you want an command-line option. Look at the
100  * RenderOptions_Cmd_Table table in frontend/processrenderoptions.cpp. Be
101  * aware that the order has to be alphabethical in that table, and with the
102  * shortest multicharacter option at the end. That is, for example the order
103  * is "KFF", "KFI", "KF", "K", ***NOT*** "K", "KF", "KFF", "KFI". The reason
104  * is really simple: The command-line parser picks the first match as that
105  * makes it easier to implement (no look-ahead).
106  *
107  * For each of the two tables, the second column defines the POVMS name and the
108  * third the POVMS type. There is the additional "kUseSpecialHandler" to
109  * support special handling of options - that is, parsing more complex options
110  * which commonly yield more than one POVMS attribute or different attributes.
111  *
112  * For the command-line argument table there is a fourth column. It provides
113  * an optional binary POVMS attribute to set depending on the switch, i.e. "-"
114  * sets it to "false" while a "+" and "/" set it to "true". I.e. the "UA"
115  * command-line option just works via the +/- and doesn't have an argument.
116  *
117  * NOTE: The default is not stored in the table at all, that is completely
118  * inside the core code. That is, if the option isn't specified, it just
119  * doesn't have a value.
120  *
121  * The parsers will automatically handle POVMS types kPOVMSType_Float,
122  * kPOVMSType_Int, kPOVMSType_CString and kPOVMSType_Bool and set POVMS
123  * attributes accordingly.
124  *
125  * So once you added the entries to one or both of the tables, the INI and
126  * command-line parser can handle the option.
127  */
128 
129 /*****************************************************************************
130 * NOTE: If you do not understand the code below, stay away! If your compiler
131 * warns you about the code below, your compiler warning configuration is
132 * incorrect. Turn off that warning! Do not, ever, mess with the code below to
133 * just please your compiler. Do not, ever, complain to the POV-Team about the
134 * code below! Just stay away from this code, please!!!
135 * RATIONALE: If you do understand the code below and are concerned about
136 * portability, please direct your attention to the file povms.cpp. There are
137 * several methods there that do determine the byteorder at runtime. Please
138 * refer to POVMSStream_Init, POVMSStream_ReadType and POVMSStream_WriteType
139 * in that file for details. If you have a failure of those functions to
140 * report, please include as many details about your platform and compiler
141 * as possible!
142 ******************************************************************************/
143 
144 // POV-Ray Object Classes
145 enum
146 {
147     kPOVObjectClass_Rectangle           = 'Rect',
148     kPOVObjectClass_ElapsedTime         = 'ETim',
149 
150     kPOVObjectClass_IsectStat           = 'ISta',
151     kPOVObjectClass_SceneCamera         = 'SCam',
152 
153     kPOVObjectClass_ShellCommand        = 'SCmd',
154     kPOVObjectClass_IniOptions          = 'IniO',
155     kPOVObjectClass_FrontendOptions     = 'FOpt',
156 
157     kPOVObjectClass_AnimationOptions    = 'AOpt',
158     kPOVObjectClass_OutputOptions       = 'OOpt',
159     kPOVObjectClass_ParserOptions       = 'POpt',
160     kPOVObjectClass_RenderOptions       = 'ROpt',
161     kPOVObjectClass_ParserStatistics    = 'PSta',
162     kPOVObjectClass_RenderStatistics    = 'RSta',
163 
164     kPOVObjectClass_PlatformData        = 'PlaD',
165     kPOVObjectClass_ControlData         = 'CtrD',
166     kPOVObjectClass_ResultData          = 'ResD',
167     kPOVObjectClass_PixelData           = 'PixD',
168     kPOVObjectClass_FileData            = 'FilD',
169 
170     kPOVObjectClass_ParserProgress      = 'ParP',
171     kPOVObjectClass_BoundingProgress    = 'BouP',
172     kPOVObjectClass_PhotonProgress      = 'PhoP',
173     kPOVObjectClass_RadiosityProgress   = 'RadP',
174     kPOVObjectClass_RenderProgress      = 'RenP',
175 };
176 
177 // POV-Ray Message Classes
178 enum
179 {
180     kPOVMsgClass_BackendControl      = 'BCtr',
181     kPOVMsgClass_SceneControl        = 'SCtr',
182     kPOVMsgClass_ViewControl         = 'VCtr',
183     kPOVMsgClass_SceneOutput         = 'SOut',
184     kPOVMsgClass_ViewOutput          = 'VOut',
185     kPOVMsgClass_ViewImage           = 'VImg',
186     kPOVMsgClass_FileAccess          = 'FAcc',
187 };
188 
189 // POV-Ray Message Identifiers
190 enum
191 {
192     // BackendControl
193     kPOVMsgIdent_InitInfo            = 'Info',
194 
195     kPOVMsgIdent_CreateScene         = 'CreS',
196     kPOVMsgIdent_CloseScene          = 'CloS',
197 
198     // SceneControl
199     kPOVMsgIdent_CreateView          = 'CreV',
200     kPOVMsgIdent_CloseView           = 'CloV',
201 
202     kPOVMsgIdent_StartParser         = 'StaP',
203     kPOVMsgIdent_StopParser          = 'StpP',
204     kPOVMsgIdent_PauseParser         = 'PauP',
205     kPOVMsgIdent_ResumeParser        = 'ResP',
206 
207     // SceneOutput
208     kPOVMsgIdent_ParserStatistics    = 'PSta',
209 
210     // ViewControl
211     kPOVMsgIdent_StartRender         = 'StaR',
212     kPOVMsgIdent_StopRender          = 'StpR',
213     kPOVMsgIdent_PauseRender         = 'PauR',
214     kPOVMsgIdent_ResumeRender        = 'ResR',
215 
216     // ViewOutput
217     kPOVMsgIdent_RenderStatistics    = 'RSta',
218 
219     // ViewImage
220     kPOVMsgIdent_PixelSet            = 'PxSe',
221     kPOVMsgIdent_PixelBlockSet       = 'PxBS',
222     kPOVMsgIdent_PixelRowSet         = 'RxRS',
223     kPOVMsgIdent_RectangleFrameSet   = 'ReFS',
224     kPOVMsgIdent_FilledRectangleSet  = 'FiRS',
225 
226     // SceneOutput, ViewOutput
227     kPOVMsgIdent_Warning             = 'Warn',
228     kPOVMsgIdent_Error               = 'ErrW',
229     kPOVMsgIdent_FatalError          = 'ErrF',
230     kPOVMsgIdent_Debug               = 'Dbug',
231 
232     kPOVMsgIdent_Progress            = 'Prog',
233 
234     // FileAccess
235     kPOVMsgIdent_FindFile            = 'FinF',
236     kPOVMsgIdent_ReadFile            = 'ReaF',
237     kPOVMsgIdent_CreatedFile         = 'CreF',
238 
239     // all
240     kPOVMsgIdent_Done                = 'Done',
241     kPOVMsgIdent_Failed              = 'Fail',
242 
243     // shell command
244     kPOVMsgIdent_CmdPreParse         = 'CPrP',
245     kPOVMsgIdent_CmdPostParse        = 'CPoP',
246     kPOVMsgIdent_CmdPreRender        = 'CPrR',
247     kPOVMsgIdent_CmdPostRender       = 'CPoR',
248     kPOVMsgIdent_CmdError            = 'CErr',
249     kPOVMsgIdent_CmdAbort            = 'CAbo',
250 
251     // other
252     kPOVMsgIdent_ParserOptions       = 'POpt',
253     kPOVMsgIdent_RenderOptions       = 'ROpt',
254 };
255 
256 // POV-Ray Message Attributes
257 enum
258 {
259     kPOVAttrib_ErrorNumber           = 'ErrN',
260 
261     kPOVAttrib_SceneId               = 'ScId',
262     kPOVAttrib_ViewId                = 'ViId',
263 
264     kPOVAttrib_PlatformData          = 'PlaD',
265     kPOVAttrib_MaxRenderThreads      = 'MRTh',
266     kPOVAttrib_SceneCamera           = 'SCam',
267 
268     // universal use
269     kPOVAttrib_EnglishText           = 'ETxt',
270 
271     // FileAccess
272     kPOVAttrib_ReadFile              = 'RFil',
273     kPOVAttrib_LocalFile             = 'LFil',
274     kPOVAttrib_FileURL               = 'FURL',
275     kPOVAttrib_CreatedFile           = 'CFil',
276 
277     // backend init
278     kPOVAttrib_CoreVersion           = 'Core',
279     kPOVAttrib_CoreGeneration        = 'CorG',
280     kPOVAttrib_PlatformName          = 'Plat',
281     kPOVAttrib_Official              = 'Offi',
282     kPOVAttrib_PrimaryDevs           = 'Prim',
283     kPOVAttrib_AssistingDevs         = 'Asst',
284     kPOVAttrib_ContributingDevs      = 'Cont',
285     kPOVAttrib_ImageLibVersions      = 'ILVe',
286     kPOVAttrib_Optimizations         = 'Opti',
287     kPOVAttrib_CPUInfo               = 'CPUI',
288     kPOVAttrib_CPUInfoDetails        = 'CPUD',
289 
290     // options handled by frontend
291     kPOVAttrib_TestAbort             = 'TstA', // currently not supported by code
292     kPOVAttrib_TestAbortCount        = 'TsAC', // currently not supported by code
293     kPOVAttrib_PauseWhenDone         = 'PWDo',
294 
295     kPOVAttrib_ContinueTrace         = 'ConT',
296     kPOVAttrib_BackupTrace           = 'BacT',
297 
298     kPOVAttrib_Verbose               = 'Verb',
299     kPOVAttrib_DebugConsole          = 'DCon',
300     kPOVAttrib_FatalConsole          = 'FCon',
301     kPOVAttrib_RenderConsole         = 'RCon',
302     kPOVAttrib_StatisticsConsole     = 'SCon',
303     kPOVAttrib_WarningConsole        = 'WCon',
304     kPOVAttrib_AllConsole            = 'ACon',
305     kPOVAttrib_DebugFile             = 'DFNa',
306     kPOVAttrib_FatalFile             = 'FFNa',
307     kPOVAttrib_RenderFile            = 'RFNa',
308     kPOVAttrib_StatisticsFile        = 'SFNa',
309     kPOVAttrib_WarningFile           = 'WFNa',
310     kPOVAttrib_AllFile               = 'AFNa',
311     kPOVAttrib_AppendConsoleFiles    = 'ACFi',
312 
313     kPOVAttrib_Display               = 'Disp',
314     kPOVAttrib_VideoMode             = 'VMod', // currently not supported by code
315     kPOVAttrib_Palette               = 'Palt', // currently not supported by code
316     kPOVAttrib_DisplayGamma          = 'DGam',
317     kPOVAttrib_DisplayGammaType      = 'DGaT',
318     kPOVAttrib_FileGamma             = 'FGam',
319     kPOVAttrib_FileGammaType         = 'FGaT',
320     kPOVAttrib_LegacyGammaMode       = 'LGaM',
321     kPOVAttrib_WorkingGammaType      = 'WGaT',
322     kPOVAttrib_WorkingGamma          = 'WGam',
323     kPOVAttrib_ViewingGamma          = 'VGam',
324     kPOVAttrib_DitherMethod          = 'DitM',
325     kPOVAttrib_Dither                = 'Dith',
326 
327     kPOVAttrib_InitialFrame          = 'IFrm',
328     kPOVAttrib_FinalFrame            = 'FFrm',
329     kPOVAttrib_InitialClock          = 'IClk',
330     kPOVAttrib_FinalClock            = 'FClk',
331     kPOVAttrib_SubsetStartFrame      = 'SStF',
332     kPOVAttrib_SubsetEndFrame        = 'SEnF',
333     kPOVAttrib_CyclicAnimation       = 'CylA',
334     kPOVAttrib_FieldRender           = 'FldR', // currently not supported by code
335     kPOVAttrib_OddField              = 'OddF', // currently not supported by code
336     kPOVAttrib_FrameStep             = 'FStp',
337 
338     kPOVAttrib_OutputToFile          = 'OToF',
339     kPOVAttrib_OutputFileType        = 'OFTy',
340     kPOVAttrib_OutputAlpha           = 'OAlp',
341     kPOVAttrib_BitsPerColor          = 'BPCo',
342     kPOVAttrib_GrayscaleOutput       = 'GOut',
343     kPOVAttrib_OutputFile            = 'OFNa',
344     kPOVAttrib_OutputPath            = 'OPat',
345     kPOVAttrib_Compression           = 'OFCo',
346 
347     kPOVAttrib_HistogramFileType     = 'HFTy', // currently not supported by code
348     kPOVAttrib_HistogramFile         = 'HFNa', // currently not supported by code
349     kPOVAttrib_HistogramGridSizeX    = 'HGSX', // currently not supported by code
350     kPOVAttrib_HistogramGridSizeY    = 'HGSY', // currently not supported by code
351 
352     kPOVAttrib_PreSceneCommand       = 'PrSC',
353     kPOVAttrib_PreFrameCommand       = 'PrFC',
354     kPOVAttrib_PostSceneCommand      = 'PoSc',
355     kPOVAttrib_PostFrameCommand      = 'PoFC',
356     kPOVAttrib_UserAbortCommand      = 'UAbC',
357     kPOVAttrib_FatalErrorCommand     = 'FErC',
358     kPOVAttrib_CommandString         = 'ComS',
359     kPOVAttrib_ReturnAction          = 'RAct',
360 
361     kPOVAttrib_CreateIni             = 'CIni',
362     kPOVAttrib_LibraryPath           = 'LibP',
363     kPOVAttrib_IncludeIni            = 'IncI',
364 
365     // options handled by scene/parser
366     kPOVAttrib_InputFile             = 'IFNa',
367     kPOVAttrib_IncludeHeader         = 'IncH',
368 
369     kPOVAttrib_WarningLevel          = 'WLev',
370     kPOVAttrib_Declare               = 'Decl',
371     kPOVAttrib_Clock                 = 'Clck',
372     kPOVAttrib_ClocklessAnimation    = 'Ckla',
373     kPOVAttrib_RealTimeRaytracing    = 'RTRa',
374     kPOVAttrib_Version               = 'Vers',
375 
376     // options handled by view/renderer
377     kPOVAttrib_Height                = 'Heig',
378     kPOVAttrib_Width                 = 'Widt',
379 
380     kPOVAttrib_Left                  = 'Left',
381     kPOVAttrib_Top                   = 'Top ',
382     kPOVAttrib_Right                 = 'Righ',
383     kPOVAttrib_Bottom                = 'Bott',
384 
385     kPOVAttrib_Antialias             = 'Anti',
386     kPOVAttrib_SamplingMethod        = 'AASM',
387     kPOVAttrib_AntialiasThreshold    = 'AATh',
388     kPOVAttrib_AntialiasConfidence   = 'AACo',
389     kPOVAttrib_AntialiasDepth        = 'AADe',
390     kPOVAttrib_Jitter                = 'AAJi',
391     kPOVAttrib_JitterAmount          = 'AAJA',
392     kPOVAttrib_AntialiasGamma        = 'AAGa',
393     kPOVAttrib_AntialiasGammaType    = 'AAGT', // currently not supported by code
394     kPOVAttrib_Quality               = 'Qual',
395     kPOVAttrib_HighReproducibility   = 'HRep',
396     kPOVAttrib_StochasticSeed        = 'Seed',
397 
398     kPOVAttrib_Bounding              = 'Boun',
399     kPOVAttrib_BoundingMethod        = 'BdMe',
400     kPOVAttrib_BoundingThreshold     = 'BdTh',
401     kPOVAttrib_BSP_MaxDepth          = 'BspD',
402     kPOVAttrib_BSP_ISectCost         = 'BspI',
403     kPOVAttrib_BSP_BaseAccessCost    = 'BspB',
404     kPOVAttrib_BSP_ChildAccessCost   = 'BspC',
405     kPOVAttrib_BSP_MissChance        = 'BspM',
406     kPOVAttrib_LightBuffer           = 'LBuf', // currently not supported by code
407     kPOVAttrib_VistaBuffer           = 'VBuf', // currently not supported by code
408     kPOVAttrib_RemoveBounds          = 'RmBd',
409     kPOVAttrib_SplitUnions           = 'SplU',
410 
411     kPOVAttrib_CreateHistogram       = 'CHis', // currently not supported by code
412     kPOVAttrib_DrawVistas            = 'DrVi', // currently not supported by code
413 
414     kPOVAttrib_PreviewStartSize      = 'PStS',
415     kPOVAttrib_PreviewEndSize        = 'PEnS',
416 
417     kPOVAttrib_RadiosityFileName     = 'RaFN',
418     kPOVAttrib_RadiosityFromFile     = 'RaFF',
419     kPOVAttrib_RadiosityToFile       = 'RaTF',
420     kPOVAttrib_RadiosityVainPretrace = 'RaVP',
421 
422     kPOVAttrib_RenderBlockSize       = 'RBSi',
423 
424     kPOVAttrib_MaxImageBufferMem     = 'MIBM', // [JG] for file backed image
425 
426     kPOVAttrib_CameraIndex           = 'CIdx',
427 
428     // time statistics generated by frontend
429     kPOVAttrib_TotalTime             = 'TotT',
430     kPOVAttrib_FrameTime             = 'FTim',
431     kPOVAttrib_AnimationTime         = 'ATim',
432 
433     // time statistics generated by backend
434     kPOVAttrib_ParseTime             = 'ParT',
435     kPOVAttrib_BoundingTime          = 'BouT',
436     kPOVAttrib_PhotonTime            = 'PhoT',
437     kPOVAttrib_RadiosityTime         = 'RadT',
438     kPOVAttrib_TraceTime             = 'TraT',
439 
440     // statistics generated by frontend
441     kPOVAttrib_CurrentFrame          = 'CurF',
442     kPOVAttrib_FrameCount            = 'FCnt',
443     kPOVAttrib_AbsoluteCurFrame      = 'AbsF',
444     kPOVAttrib_FirstClock            = 'FirC',
445     kPOVAttrib_CurrentClock          = 'CurC',
446     kPOVAttrib_LastClock             = 'LasC',
447 
448     // statistics generated by scene/parser
449     kPOVAttrib_FiniteObjects         = 'FiOb',
450     kPOVAttrib_InfiniteObjects       = 'InOb',
451     kPOVAttrib_LightSources          = 'LiSo',
452     kPOVAttrib_Cameras               = 'Cama',
453 
454     // statistics generated by scene/bounding
455     kPOVAttrib_BSPNodes              = 'BNod',
456     kPOVAttrib_BSPSplitNodes         = 'BSNo',
457     kPOVAttrib_BSPObjectNodes        = 'BONo',
458     kPOVAttrib_BSPEmptyNodes         = 'BENo',
459     kPOVAttrib_BSPMaxObjects         = 'BMOb',
460     kPOVAttrib_BSPAverageObjects     = 'BAOb',
461     kPOVAttrib_BSPMaxDepth           = 'BMDe',
462     kPOVAttrib_BSPAverageDepth       = 'BADe',
463     kPOVAttrib_BSPAborts             = 'BAbo',
464     kPOVAttrib_BSPAverageAborts      = 'BAAb',
465     kPOVAttrib_BSPAverageAbortObjects = 'BAAO',
466 
467     // statistics generated by view/render (radiosity)
468     kPOVAttrib_RadGatherCount        = 'RGCt',
469     kPOVAttrib_RadUnsavedCount       = 'RUCo',
470     kPOVAttrib_RadReuseCount         = 'RRCt',
471     kPOVAttrib_RadRayCount           = 'RYCt',
472     kPOVAttrib_RadTopLevelGatherCount= 'RGCT',
473     kPOVAttrib_RadTopLevelReuseCount = 'RRCT',
474     kPOVAttrib_RadTopLevelRayCount   = 'RYCT',
475     kPOVAttrib_RadFinalGatherCount   = 'RGCF',
476     kPOVAttrib_RadFinalReuseCount    = 'RRCF',
477     kPOVAttrib_RadFinalRayCount      = 'RYCF',
478     kPOVAttrib_RadOctreeNodes        = 'ROcN',
479     kPOVAttrib_RadOctreeLookups      = 'ROcL',
480     kPOVAttrib_RadOctreeAccepts0     = 'ROc0',
481     kPOVAttrib_RadOctreeAccepts1     = 'ROc1',
482     kPOVAttrib_RadOctreeAccepts2     = 'ROc2',
483     kPOVAttrib_RadOctreeAccepts3     = 'ROc3',
484     kPOVAttrib_RadOctreeAccepts4     = 'ROc4',
485     kPOVAttrib_RadOctreeAccepts5     = 'ROc5',
486     // [CLi] per-pass per-recursion sample count statistics
487     // (Note: Do not change the IDs of any of these "just for fun"; at several places they are computed from the first one)
488     kPOVAttrib_RadSamplesP1R0        = 'RS10',
489     kPOVAttrib_RadSamplesP1R1        = 'RS11',
490     kPOVAttrib_RadSamplesP1R2        = 'RS12',
491     kPOVAttrib_RadSamplesP1R3        = 'RS13',
492     kPOVAttrib_RadSamplesP1R4ff      = 'RS14',
493     kPOVAttrib_RadSamplesP2R0        = 'RS20',
494     kPOVAttrib_RadSamplesP2R1        = 'RS21',
495     kPOVAttrib_RadSamplesP2R2        = 'RS22',
496     kPOVAttrib_RadSamplesP2R3        = 'RS23',
497     kPOVAttrib_RadSamplesP2R4ff      = 'RS24',
498     kPOVAttrib_RadSamplesP3R0        = 'RS30',
499     kPOVAttrib_RadSamplesP3R1        = 'RS31',
500     kPOVAttrib_RadSamplesP3R2        = 'RS32',
501     kPOVAttrib_RadSamplesP3R3        = 'RS33',
502     kPOVAttrib_RadSamplesP3R4ff      = 'RS34',
503     kPOVAttrib_RadSamplesP4R0        = 'RS40',
504     kPOVAttrib_RadSamplesP4R1        = 'RS41',
505     kPOVAttrib_RadSamplesP4R2        = 'RS42',
506     kPOVAttrib_RadSamplesP4R3        = 'RS43',
507     kPOVAttrib_RadSamplesP4R4ff      = 'RS44',
508     kPOVAttrib_RadSamplesP5ffR0      = 'RS50',
509     kPOVAttrib_RadSamplesP5ffR1      = 'RS51',
510     kPOVAttrib_RadSamplesP5ffR2      = 'RS52',
511     kPOVAttrib_RadSamplesP5ffR3      = 'RS53',
512     kPOVAttrib_RadSamplesP5ffR4ff    = 'RS54',
513     kPOVAttrib_RadSamplesFR0         = 'RSF0',
514     kPOVAttrib_RadSamplesFR1         = 'RSF1',
515     kPOVAttrib_RadSamplesFR2         = 'RSF2',
516     kPOVAttrib_RadSamplesFR3         = 'RSF3',
517     kPOVAttrib_RadSamplesFR4ff       = 'RSF4',
518     kPOVAttrib_RadWeightR0           = 'RWt0',
519     kPOVAttrib_RadWeightR1           = 'RWt1',
520     kPOVAttrib_RadWeightR2           = 'RWt2',
521     kPOVAttrib_RadWeightR3           = 'RWt3',
522     kPOVAttrib_RadWeightR4ff         = 'RWt4',
523     kPOVAttrib_RadQueryCountR0       = 'RQC0',
524     kPOVAttrib_RadQueryCountR1       = 'RQC1',
525     kPOVAttrib_RadQueryCountR2       = 'RQC2',
526     kPOVAttrib_RadQueryCountR3       = 'RQC3',
527     kPOVAttrib_RadQueryCountR4ff     = 'RQC4',
528 
529     // statistics generated by view/render (photons)
530     kPOVAttrib_TotalPhotonCount      = 'TPCn',
531     kPOVAttrib_ObjectPhotonCount     = 'OPCn',
532     kPOVAttrib_MediaPhotonCount      = 'MPCn',
533     kPOVAttrib_PhotonXSamples        = 'PXSa',
534     kPOVAttrib_PhotonYSamples        = 'PYSa',
535     kPOVAttrib_PhotonsShot           = 'PSho',
536     kPOVAttrib_PhotonsStored         = 'PSto',
537     kPOVAttrib_GlobalPhotonsStored   = 'GPSt',
538     kPOVAttrib_MediaPhotonsStored    = 'MPSt',
539     kPOVAttrib_PhotonsPriQInsert     = 'PPQI',
540     kPOVAttrib_PhotonsPriQRemove     = 'PPQR',
541     kPOVAttrib_GatherPerformedCnt    = 'GPCn',
542     kPOVAttrib_GatherExpandedCnt     = 'GECn',
543 
544     // render progress and statistics generated by view/render (trace)
545     kPOVAttrib_Pixels                = 'Pixe',
546     kPOVAttrib_PixelSamples          = 'PixS',
547     kPOVAttrib_SuperSampleCount      = 'SSCn',
548 
549     // statistics generated by view/render (all)
550     kPOVAttrib_Rays                  = 'Rays',
551     kPOVAttrib_RaysSaved             = 'RSav',
552 
553     kPOVAttrib_TraceLevel            = 'TLev',
554     kPOVAttrib_MaxTraceLevel         = 'MaxL',
555 
556     kPOVAttrib_ShadowTest            = 'ShdT',
557     kPOVAttrib_ShadowTestSuc         = 'ShdS',
558     kPOVAttrib_ShadowCacheHits       = 'ShdC',
559 
560     kPOVAttrib_PolynomTest           = 'PnmT',
561     kPOVAttrib_RootsEliminated       = 'REli',
562 
563     kPOVAttrib_CallsToNoise          = 'CTNo',
564     kPOVAttrib_CallsToDNoise         = 'CTDN',
565 
566     kPOVAttrib_MediaSamples          = 'MeSa',
567     kPOVAttrib_MediaIntervals        = 'MeIn',
568 
569     kPOVAttrib_ReflectedRays         = 'RflR',
570     kPOVAttrib_InnerReflectedRays    = 'IReR',
571     kPOVAttrib_RefractedRays         = 'RfrT',
572     kPOVAttrib_TransmittedRays       = 'TraR',
573 
574     kPOVAttrib_IsoFindRoot           = 'IFRo',
575     kPOVAttrib_FunctionVMCalls       = 'FVMC',
576     kPOVAttrib_FunctionVMInstrEst    = 'FVMI',
577 
578     kPOVAttrib_CrackleCacheTest      = 'CrCT',
579     kPOVAttrib_CrackleCacheTestSuc   = 'CrCS',
580 
581     kPOVAttrib_ObjectIStats          = 'OISt',
582     kPOVAttrib_ISectsTests           = 'ITst',
583     kPOVAttrib_ISectsSucceeded       = 'ISuc',
584 
585     kPOVAttrib_MinAlloc              = 'MinA',
586     kPOVAttrib_MaxAlloc              = 'MaxA',
587     kPOVAttrib_CallsToAlloc          = 'CTAl',
588     kPOVAttrib_CallsToFree           = 'CTFr',
589     kPOVAttrib_PeakMemoryUsage       = 'PMUs',
590 
591     // subject to elimination
592     kPOVAttrib_BoundingQueues        = 'BQue',
593     kPOVAttrib_BoundingQueueResets   = 'BQRs',
594     kPOVAttrib_BoundingQueueResizes  = 'BQRz',
595     kPOVAttrib_IStackOverflow        = 'IStO',
596     kPOVAttrib_ObjectName            = 'ONam',
597     kPOVAttrib_ObjectID              = 'OIde',
598 
599     // time statistics and progress reporting
600     kPOVAttrib_RealTime              = 'ReaT',
601     kPOVAttrib_CPUTime               = 'CPUT',
602     kPOVAttrib_TimeSamples           = 'TSam',
603 
604     // parser progress
605     kPOVAttrib_CurrentTokenCount     = 'CTCo',
606 
607     // bounding progress
608     kPOVAttrib_CurrentNodeCount      = 'CNCo',
609 
610     // photon progress
611     kPOVAttrib_CurrentPhotonCount    = 'CPCo',
612 
613     // render progress
614     kPOVAttrib_PixelsPending         = 'PPen',
615     kPOVAttrib_PixelsCompleted       = 'PCom',
616 
617     // render pixel data/control
618     kPOVAttrib_PixelId               = 'PiId',  ///< (Int) ID of render block; only set if rendered to completion.
619     kPOVAttrib_PixelSize             = 'PiSi',
620     kPOVAttrib_PixelBlock            = 'PBlo',
621     kPOVAttrib_PixelColors           = 'PCol',
622     kPOVAttrib_PixelPositions        = 'PPos',
623     kPOVAttrib_PixelSkipList         = 'PSLi',
624     kPOVAttrib_PixelFinal            = 'PFin',  ///< (Void) Set if pixel data is relevant for final image.
625 
626     // scene/view error reporting and TBD
627     kPOVAttrib_CurrentLine           = 'CurL',
628     kPOVAttrib_LineCount             = 'LCnt',
629     kPOVAttrib_AbsoluteCurrentLine   = 'AbsL',
630     kPOVAttrib_FileName              = 'File',
631     kPOVAttrib_State                 = 'Stat',
632     kPOVAttrib_Warning               = 'Warn',
633     kPOVAttrib_Line                  = 'Line',
634     kPOVAttrib_Column                = 'Colu',
635     kPOVAttrib_FilePosition          = 'FPos',
636     kPOVAttrib_TokenName             = 'TokN',
637     kPOVAttrib_Error                 = 'Erro',
638     kPOVAttrib_INIFile               = 'IFil',
639     kPOVAttrib_RenderOptions         = 'ROpt',
640     kPOVAttrib_Identifier            = 'Iden',
641     kPOVAttrib_Value                 = 'Valu',
642     kPOVAttrib_ProgressStatus        = 'ProS',
643     kPOVAttrib_MosaicPreviewSize     = 'MPSi',
644 
645     // Rendering order
646     kPOVAttrib_RenderBlockStep       = 'RBSt',
647     kPOVAttrib_RenderPattern         = 'RPat',
648 
649     // helpers
650     kPOVAttrib_StartColumn           = kPOVAttrib_Left,
651     kPOVAttrib_EndColumn             = kPOVAttrib_Right,
652     kPOVAttrib_StartRow              = kPOVAttrib_Top,
653     kPOVAttrib_EndRow                = kPOVAttrib_Bottom
654 };
655 
656 enum
657 {
658     kPOVList_FileType_Unknown,
659     kPOVList_FileType_Targa,
660     kPOVList_FileType_CompressedTarga,
661     kPOVList_FileType_PNG,
662     kPOVList_FileType_JPEG,
663     kPOVList_FileType_PPM,
664     kPOVList_FileType_BMP,
665     kPOVList_FileType_OpenEXR,
666     kPOVList_FileType_RadianceHDR,
667     kPOVList_FileType_System,
668     kPOVList_FileType_CSV, // used for histogram file
669 };
670 
671 #endif // POVMSID_H
672