1- # Architecture Overview {#architecture}
1+ @ page architecture Architecture Overview
22
33
4- Modules {#arch_modules}
4+ Modules
55=======
66
77The original architectural design of POV-Ray 3.7.0 identified POV-Ray as being comprised of two main entities, called
@@ -11,8 +11,8 @@ compute raw output image data from it. The front-end would then wait for the ima
1111write the collected data to an actual image file. The communication between the front- and back-end would use a
1212proprietary asynchronous message-passing protocol called _ POVMS_ .
1313
14- Each of these two entities resided in a separate sub-tree within the source tree, named @ ref source/backend and
15- @ ref source/frontend. A third sub-tree, @ ref source/base, contained code shared between back- and front-end.
14+ Each of these two entities resided in a separate sub-tree within the source tree, named ` source/backend ` and
15+ ` source/frontend ` . A third sub-tree, ` source/base ` , contained code shared between back- and front-end.
1616
1717@remark
1818 The ability to run and manage multiple back-end instances is a prerequisite for distributed rendering in a networked
@@ -28,20 +28,23 @@ Since the official release of POV-Ray 3.7.0, ongoing work has been put into furt
2828currently distinguishing the following _ modules_ , each of which again resides in its own separate source sub-tree:
2929
3030
31- Back-End Module {#arch_backend}
31+ Back-End Module
3232---------------
3333
3434The responsibility of the _ back-end_ module, residing in the @ref source/backend source sub-tree, is being trimmed down
3535to coordinating multi-threaded execution of the _ core_ and _ parser_ modules, as well as interfacing them to a --
3636possibly remote -- _ front-end_ instance via the _ POVMS_ protocol.
3737
38- @todo The exact line between the back-end module and the _ core_ module has not been finalized yet.
38+ @todo
39+ The exact line between the back-end module and the _ core_ module has not been finalized yet.
3940
4041The back-end module depends on the _ base_ , _ core_ , _ parser_ , _ povms_ and _ vm_ modules.
41- @todo At present, the back-end module also depends on the _ vfe_ module.
4242
43+ @todo
44+ At present, the back-end module also depends on the _ vfe_ module.
4345
44- Base Module {#arch_base}
46+
47+ Base Module
4548-----------
4649
4750The _ base_ module, still residing in the @ref source/base source sub-tree, continues to be a loose collection of
@@ -51,10 +54,11 @@ _core_ and _front-end_.
5154The base module is intended to be mostly unaware of multithreading, except that it makes provisions for sharing a few of
5255its data structures -- mostly related to performance optimizations -- among multiple threads.
5356
54- @todo At present, the base module depends on the _ vfe_ module.
57+ @todo
58+ At present, the base module depends on the _ vfe_ module.
5559
5660
57- Core Module {#arch_core}
61+ Core Module
5862-----------
5963
6064The _ core_ module, residing in the @ref source/core source sub-tree, is designated to contain the actual render engine
@@ -67,23 +71,27 @@ The core module is intended to be mostly unaware of multithreading, except that
6771its data structures -- mostly related to performance optimizations -- among multiple core threads.
6872
6973The core module depends on the _ base_ module.
70- @note Although the core module makes use of the _ vm_ module at run-time, the interface is entirely abstract, and
71- therefore does not constitute a formal dependency. From the perspective of the core module, the vm module could be
72- replaced any time with an entirely different implementation.
74+
75+ @note
76+ Although the core module makes use of the _ vm_ module at run-time, the interface is entirely abstract, and
77+ therefore does not constitute a formal dependency. From the perspective of the core module, the vm module could be
78+ replaced any time with an entirely different implementation.
7379
7480
75- Front-End Module {#arch_frontend}
81+ Front-End Module
7682----------------
7783
7884The _ front-end_ module, residing in the @ref source/frontend source sub-tree, currently retains its dual role of
7985providing high-level control of the rendering process as well as assembling the computed image data into an actual
8086result image file.
8187
8288The front-end module depends on the _ base_ and _ povms_ modules.
83- @todo At present, the front-end module also depends on the _ vfe_ module.
8489
90+ @todo
91+ At present, the front-end module also depends on the _ vfe_ module.
8592
86- Parser Module {#arch_parser}
93+
94+ Parser Module
8795-------------
8896
8997The _ parser_ , residing in the @ref source/parser source sub-tree, is responsible for parsing a scene file, reading in
@@ -94,10 +102,12 @@ The parser module is entirely unaware of multithreading: It does not seem to mak
94102to process the same file, nor to share data between multiple parser instances processing different files.
95103
96104The parser module depends on the _ base_ , _ core_ , and _ vm_ modules.
97- @todo At present, the parser module also depends on the _ back-end_ module.
105+
106+ @todo
107+ At present, the parser module also depends on the _ back-end_ module.
98108
99109
100- POVMS Module {#arch_povms}
110+ POVMS Module
101111------------
102112
103113The _ POVMS_ module, residing in the @ref source/povms source sub-tree, implements the message-passing interface used
@@ -106,7 +116,7 @@ between the _front-end_ and _back-end_ modules.
106116The povms module depends on the _ base_ module.
107117
108118
109- Virtual Machine Module {#arch_vm }
119+ Virtual Machine Module {#module_vm }
110120----------------------
111121
112122The _ virtual machine_ module, or _ VM_ , residing in the @ref source/vm source sub-tree, implements a virtual machine to
@@ -115,15 +125,41 @@ execute user-defined functions, both during parsing and at render time.
115125The vm module depends on the _ base_ and _ core_ modules.
116126
117127
118- Virtual Front-End Module {#arch_vfe}
128+ Platform-Specific Code {#module_sys}
129+ ----------------------
130+
131+ While the above modules are all designed to be portable, they rely on certain functionality that cannot be provided in a
132+ portable manner, and consequently require platform-specific adapter code; in addition, for some functionality optimized
133+ non-portable alternative implementations are provided. Such code resides in the separate @ref platform directory
134+ sub-tree, even when conceptually considered part of one of the above modules.
135+
136+ @note
137+ Platform-specific code should not be confused with _ user interface_ -specific code.
138+
139+ @todo
140+ At present, some platform-specific code also resides in the @ref vfe directory sub-tree.
141+
142+
143+ User Interface {#module_ui}
144+ --------------
145+
146+ The above modules are started and controlled by the _ user interface_ .
147+
148+ @note
149+ POV-Ray does not provide any portable user interface; instead, each family of platforms has its own user interface,
150+ and potentially even multiple entirely different user interfaces (such as the GUI and command-line versions of
151+ POV-Ray for Windows).
152+
153+
154+ Virtual Front-End Module
119155------------------------
120156
121- The _ virtual front-end_ module, or _ VFE_ , which resides outside the main source tree , contains code shared between most
122- platform-specific versions of POV-Ray to abstract away various details of the _ POVMS_ interface exposed by the official
123- _ front-end _ .
157+ The _ virtual front-end_ module, or _ VFE_ , residing in the @ ref vfe directory , contains code shared between several
158+ user interfaces for POV-Ray, designed to abstract away various details of the _ POVMS_ interface exposed by the
159+ _ front-end module _ .
124160
125161
126- Units {#arch_units}
162+ Units
127163=====
128164
129165The POV-Ray code is comprised of hundreds of code _ units_ -- that is, individual ` .cpp ` files and their respective
0 commit comments