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