Symbian3/PDK/Source/GUID-053BADC7-858B-5D83-8FEE-BFB6C29AFB73.dita
author Dominic Pinkman <Dominic.Pinkman@Nokia.com>
Fri, 22 Jan 2010 18:26:19 +0000
changeset 1 25a17d01db0c
child 3 46218c8b8afa
permissions -rw-r--r--
Addition of the PDK content and example code for Documentation_content according to Feature bug 1607 and bug 1608

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies) All rights reserved. -->
<!-- This component and the accompanying materials are made available under the terms of the License 
"Eclipse Public License v1.0" which accompanies this distribution, 
and is available at the URL "http://www.eclipse.org/legal/epl-v10.html". -->
<!-- Initial Contributors:
    Nokia Corporation - initial contribution.
Contributors: 
-->
<!DOCTYPE concept
  PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd">
<concept xml:lang="en" id="GUID-053BADC7-858B-5D83-8FEE-BFB6C29AFB73"><title>Render Stages Plug-Ins</title><shortdesc>This topic provides information about render stage plug-ins in the non-ScreenPlay variant. </shortdesc><prolog><metadata><keywords/></metadata></prolog><conbody><p> <b>Variant</b>: <xref href="GUID-F64E6551-670E-5E12-8103-DE504D3EC94F.dita">Non-ScreenPlay</xref>. <b>Target audience</b>: Device creators. </p> <p> <note>In the non-ScreenPlay variant, the render stage interfaces are
        at a prototype stage of development. </note>  </p> <p>For information about render stages in ScreenPlay, see <xref href="GUID-3A2785D4-6185-50C3-8D7E-5D94CD2B7C98.dita">ScreenPlay Render Stages</xref>. </p> <section><title>Introduction</title> <p>The primary use case for render stages is transition effects. During transition effects, we want to capture draw operations for transition participants into an offscreen target. Then over a series of frames, we want to perform some transformation of the draw operations, and reintroduce them into the scene. For example, for a disappearing menu, we want to capture the draw operations for the menu, and then perhaps play them back but with different offsets, so that the menu appears to slide off the screen. </p> <p>Render stages make it possible to redirect the drawing, so that we can capture the draw operations. They also make it possible to introduce new draw operations into the stream, so that we can play back the transition effect. </p> <p>The default render stage does neither of these things, simply rendering the draw ops to the default screen target as expected. </p> </section> <section><title>Using render stages </title> <p>The high level steps to creating and using render stages are shown here: </p> <ol id="GUID-B7908ADF-6C53-55C1-977A-3EC221C73F75"><li id="GUID-A3F4F82D-4ABF-537F-82A4-FBA0671D05C4"><p>Screen creates render stage chain at construction time </p> </li> <li id="GUID-3BFDAA17-6392-530A-9FB1-8D0BDF6C1B3C"><p>Render stage performs custom rendering </p> </li> </ol> </section> <section><title>1. Screen creates render stage chain at construction
          time</title> <p><b>Setup in WSINI.INI file </b> </p> <p>The render stages to be used are specified on a per screen basis. </p> <p>For example: </p> <p> <codeph>[SCREEN 1] </codeph>  </p> <p> <codeph>RENDERSTAGES FLICKERFREE STD</codeph>  </p> <p>If no render stages are specified, the default render stages will be used. </p> <p><b>Process </b> </p> <p>The following code is required: </p> <p> <codeph>CScreenRedraw::ConstructL()</codeph> - this constructs a <xref href="GUID-D5E0D138-2206-3DE6-9681-2E7C06E9C0FA.dita"><apiname>CScreenRedraw</apiname></xref> object </p> <p> <codeph>WsIniFile-&gt;FindVar(iScreenNumber, “RENDERSTAGES”) </codeph> - this returns the list of render stages to be used on this screen </p> <p> <b>For</b> each specified render stage, call <codeph>CWsPluginManager::FindNamedImplementation&lt;MWsRenderStageFactory&gt;()</codeph> </p> <p> <b>For</b> each plug-in in the list: </p> <ul><li id="GUID-F2466555-6BBA-53CC-B825-BBDED289E600"><p>Call <codeph>ResolveObjectInterface(“MWsRenderStageFactory”)</codeph> on the <xref href="GUID-28DEFD88-3AB5-3F94-9A26-27B240294950.dita"><apiname>CWsPlugin</apiname></xref> instance. If the plug-in is a render stage factory, it is required to “<codeph>return this</codeph> ”, otherwise “<codeph>return NULL</codeph> ”. </p> </li> <li id="GUID-B802F1C8-D2B1-513D-802C-75F1F093E183"><p>If an <xref href="GUID-DE3DA8CA-437D-33B8-A747-941810A48897.dita"><apiname>MWsRenderStageFactory</apiname></xref> pointer is returned, and the plug-in has the correct name, return the <xref href="GUID-DE3DA8CA-437D-33B8-A747-941810A48897.dita"><apiname>MWsRenderStageFactory</apiname></xref>. </p> </li> </ul> <p> <b>Endfor</b> (plug-ins) </p> <p>Call <codeph>MWsRenderStageFactory::CreateStageL() </codeph> - this calls into the plug-in’s render stage factory. The implementor of the SPI is required to return a <xref href="GUID-B89CEF40-0139-3E6F-803D-F74E2BCB029A.dita"><apiname>CWsRenderStage</apiname></xref> * which is pointing to an instance of a custom subclass. </p> <p>Connect the output of one stage to the input of the next </p> <p> <b>Endfor</b> (specified render stages) </p> </section> <section><title>2. Render stage performs custom rendering</title> <p><b>Process </b> </p> <p>The following code is required: </p> <p> <codeph>CScreenRedraw::OnAnimation()</codeph> - WSERV redraw scheduler causes rendering to occur </p> <p>Call <codeph>CWsRenderStage::Begin() </codeph> on the first render stage. This returns the <codeph>CFbsBitGc*</codeph> to be used for drawing </p> <p>Issue draw operations to the <codeph>CFbsBitGc*</codeph>  </p> <p>The render stage processes the draw operations </p> <p>Call <codeph>CWsRenderStage::End()</codeph> on the first render stage </p> <p> <note>Note that WSERV only talks to the first render stage. This may
          in turn talk to the second render stage and so on, but WSERV won’t know
          anything about this.</note>  </p> </section> </conbody><related-links><link href="GUID-39CFE2E2-9776-54EE-8E3B-8B85AFF1697A.dita"><linktext>Window Server Plug-in Framework in the
                Non-ScreenPlay Variant </linktext> </link> <link href="GUID-139F9E66-830D-5B94-8674-2F90152EBC4A.dita"><linktext> Fader Plug-ins</linktext> </link> <link href="GUID-434F690E-738A-51DF-80CC-8A6CC067DA6C.dita"><linktext>Miscellaneous Plug-in
                Interfaces</linktext> </link> <link href="GUID-E7F6DD98-9080-50E9-B071-56247EBBF570.dita"><linktext>Window Server Plugins Component</linktext> </link> <link href="GUID-3A2785D4-6185-50C3-8D7E-5D94CD2B7C98.dita"><linktext>Render Stages</linktext> </link> </related-links></concept>