27 APIs, for which the render stage plug-ins provide the concrete implementations. </p> |
27 APIs, for which the render stage plug-ins provide the concrete implementations. </p> |
28 <section id="GUID-B431C15F-B567-5A6F-8E3F-1A45CE2FACDE"><title>Architecture</title> <p>The |
28 <section id="GUID-B431C15F-B567-5A6F-8E3F-1A45CE2FACDE"><title>Architecture</title> <p>The |
29 following diagram shows where render stages fit into the Window Server architecture. </p> <fig id="GUID-B1321BD9-2EF4-5BB3-8226-880C460526C1"> |
29 following diagram shows where render stages fit into the Window Server architecture. </p> <fig id="GUID-B1321BD9-2EF4-5BB3-8226-880C460526C1"> |
30 <title> Window Server architecture showing render stages |
30 <title> Window Server architecture showing render stages |
31 </title> |
31 </title> |
32 <image href="GUID-25A63716-D637-589D-BAB7-B962455F2DC6_d0e246578_href.png" placement="inline"/> |
32 <image href="GUID-25A63716-D637-589D-BAB7-B962455F2DC6_d0e243458_href.png" placement="inline"/> |
33 </fig> <p>Symbian provides default render stage plug-ins, which are of production |
33 </fig> <p>Symbian provides default render stage plug-ins, which are of production |
34 quality and reproduce the rendering behavior in Symbian OS v9.4. In ScreenPlay, |
34 quality and reproduce the rendering behavior in Symbian OS v9.4. In ScreenPlay, |
35 device creators can replace the render stage plug-ins with their own bespoke |
35 device creators can replace the render stage plug-ins with their own bespoke |
36 plug-ins. In the non-ScreenPlay variant, the interfaces are prototypes and |
36 plug-ins. In the non-ScreenPlay variant, the interfaces are prototypes and |
37 the render stage plug-ins should not be replaced in a real device. Note that |
37 the render stage plug-ins should not be replaced in a real device. Note that |
46 relevant draw operations onto a TFX surface. Then later the TFX render stage |
46 relevant draw operations onto a TFX surface. Then later the TFX render stage |
47 could inject those captured drawing operations into the displayed scene over |
47 could inject those captured drawing operations into the displayed scene over |
48 a sequence of frames, in order to create the desired effect. </p> <fig id="GUID-75F4A91E-D764-5BF4-8B21-74689EB43E7A"> |
48 a sequence of frames, in order to create the desired effect. </p> <fig id="GUID-75F4A91E-D764-5BF4-8B21-74689EB43E7A"> |
49 <title> A typical render stage configuration, showing some of |
49 <title> A typical render stage configuration, showing some of |
50 the key interfaces </title> |
50 the key interfaces </title> |
51 <image href="GUID-0F2AE495-F6D8-5351-BD83-76D579564C2E_d0e246600_href.png" placement="inline"/> |
51 <image href="GUID-0F2AE495-F6D8-5351-BD83-76D579564C2E_d0e243480_href.png" placement="inline"/> |
52 </fig> <p>The render stages are stacked on top of each other—effectively they |
52 </fig> <p>The render stages are stacked on top of each other—effectively they |
53 are chained into a pipeline, in which the Window Server "talks" only to the |
53 are chained into a pipeline, in which the Window Server "talks" only to the |
54 first render stage. This render stage in turn talks only to the second render |
54 first render stage. This render stage in turn talks only to the second render |
55 stage. Notice that the second render stage uses a concrete rendering API to |
55 stage. Notice that the second render stage uses a concrete rendering API to |
56 control the UI surface. This is in contrast to the first render stage, which |
56 control the UI surface. This is in contrast to the first render stage, which |
96 Although this is the usual practice, it is not mandatory. The concrete render |
96 Although this is the usual practice, it is not mandatory. The concrete render |
97 stage could instead delegate the implementation of some of the interfaces |
97 stage could instead delegate the implementation of some of the interfaces |
98 to helper classes. </p> <fig id="GUID-84104CD3-C78C-50C7-9155-50596B3EE3EF"> |
98 to helper classes. </p> <fig id="GUID-84104CD3-C78C-50C7-9155-50596B3EE3EF"> |
99 <title> A concrete render stage class implementing key render |
99 <title> A concrete render stage class implementing key render |
100 stage interfaces </title> |
100 stage interfaces </title> |
101 <image href="GUID-973CF8E7-18C8-5E24-BC7A-97148FAEF3E4_d0e246669_href.png" placement="inline"/> |
101 <image href="GUID-973CF8E7-18C8-5E24-BC7A-97148FAEF3E4_d0e243549_href.png" placement="inline"/> |
102 </fig> </section> |
102 </fig> </section> |
103 <section id="GUID-5D81D1A7-26A0-5461-9AC5-3EF359D283CB"><title>Advanced use |
103 <section id="GUID-5D81D1A7-26A0-5461-9AC5-3EF359D283CB"><title>Advanced use |
104 case</title> <p>Render stages can optionally create their own <b>visuals tree</b> to |
104 case</title> <p>Render stages can optionally create their own <b>visuals tree</b> to |
105 mirror the structure of the Window Server's window tree. The render stage |
105 mirror the structure of the Window Server's window tree. The render stage |
106 can then temporarily change the attributes of nodes in the tree and introduce |
106 can then temporarily change the attributes of nodes in the tree and introduce |
115 stage must implement the <xref href="GUID-21240143-D578-3114-9836-F765F70A987C.dita"><apiname>MWsDrawAnnotationObserver</apiname></xref>. The |
115 stage must implement the <xref href="GUID-21240143-D578-3114-9836-F765F70A987C.dita"><apiname>MWsDrawAnnotationObserver</apiname></xref>. The |
116 Window Server uses this to communicate which node in the tree each batch of |
116 Window Server uses this to communicate which node in the tree each batch of |
117 drawing operations relates to. </p> <fig id="GUID-97D46D41-589A-504D-B7C0-9092E6E5DF17"> |
117 drawing operations relates to. </p> <fig id="GUID-97D46D41-589A-504D-B7C0-9092E6E5DF17"> |
118 <title> Render stage that has a visuals tree and visual stores |
118 <title> Render stage that has a visuals tree and visual stores |
119 </title> |
119 </title> |
120 <image href="GUID-3248A2B1-54D0-56E3-B770-DC595B01EA04_d0e246705_href.png" placement="inline"/> |
120 <image href="GUID-3248A2B1-54D0-56E3-B770-DC595B01EA04_d0e243585_href.png" placement="inline"/> |
121 </fig> <p>Render stages that implement their own visuals stores typically |
121 </fig> <p>Render stages that implement their own visuals stores typically |
122 use the Window Server's <b>change-tracking</b> rendering mode. This is an |
122 use the Window Server's <b>change-tracking</b> rendering mode. This is an |
123 optimization of the <xref href="GUID-22093E74-EFE7-5642-93DE-1573E18F7C08.dita">Window |
123 optimization of the <xref href="GUID-22093E74-EFE7-5642-93DE-1573E18F7C08.dita">Window |
124 Server rendering loop</xref> for render stages that build visuals stores. |
124 Server rendering loop</xref> for render stages that build visuals stores. |
125 The render stage is then responsible for playing back the drawing operations |
125 The render stage is then responsible for playing back the drawing operations |