Files
picovga-cmake/docs/group__LayersGroup.html
2025-08-26 20:47:11 -07:00

728 lines
60 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>PicoVGA: Overlay Layers</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="custom.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">PicoVGA
&#160;<span id="projectnumber">1.2-cmake</span>
</div>
<div id="projectbrief">VGA/TV display on Raspberry Pico</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('group__LayersGroup.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#func-members">Functions</a> &#124;
<a href="#var-members">Variables</a> </div>
<div class="headertitle">
<div class="title">Overlay Layers</div> </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Description</h2>
<p>The display of the image by the PicoVGA library is performed by the PIO processor controller. PIO0 is used. The other controller, PIO1, is unused and can be used for other purposes. PIO0 contains a 4 state machines, SM0 to SM3. All PIO0 state machines use a common program of 32 instructions. Each state machine serves 1 overlay layer. SM0 services base layer 0, along with servicing the synchronization signal. The base layer service program consists of 15 instructions, starting at offset 17. This part of the program is immutable and is always used. However, the other 3 layers, 1 to 3, SM1 to SM3, use the other part of the program memory, 17 instructions starting at address 0. This part may change, depending on the mode of the overlay layers. All 3 overlay layers use a common program and must therefore operate in the same display mode. Some overlay modes use the same program and can be shared - see the table below for details. </p><dl class="section note"><dt>Note</dt><dd>Only base layer 0 can contain segments in different formats. Overlay layers 1 to 3 are independent of the base layer format, sharing only the total display area with the base layer, but using their own image format, for which only the coordinates and dimensions are specified.</dd></dl>
<h3>Overlay layers can use one of the following programs:</h3>
<ul>
<li><b>LAYERPROG_BASE</b> - The base layer 0 program. Cannot be used for overlay layers. Using the parameter for an overlay layer means that the layer is inactive (not using the program).</li>
<li><b>LAYERPROG_KEY</b> - Layer with key color. The specified color is replaced by transparency.</li>
<li><b>LAYERPROG_BLACK</b> - Transparency with black color. Black is replaced by transparency. Compared to the previous mode, the advantage is less demanding on processor speed.</li>
<li><b>LAYERPROG_WHITE</b> - transparency with white colour. It is faster like the previous function and is suitable for use where black needs to be preserved but white can be omitted. When preparing the image, the image is not copied from Flash to RAM with the memcpy function, but the <a class="el" href="group__UtilsGroup.html#ga49a4978da9e0f15dcdc9ebfc9d6c520e" title="Prepare image with white key transparency (copy and increment pixels)">CopyWhiteImg()</a> function is used. The function ensures that the pixels of the copied image are incremented by 1. This changes the white color (with a value of 255) to black (with a value of 0). From this point on, the image is treated as if it had transparency with black - e.g. the black color is specified for the sprite rendering function. Only when the image enters the program in PIO0, the program makes the pixel transparent as in the case of black, but at the same time decrements the pixel value. This reverts the colors back to the original value, the black color becomes black and the white color has been used as transparency.</li>
<li><b>LAYERPROG_MONO</b> - This programme includes 2 sub-programmes. The first is the display of a monochrome image. For each bit of image data, either the selected image color is displayed or the corresponding pixel is transparent. This mode is used in the Oscilloscope example to display a grid across the oscilloscope screen. The second subroutine is to display a color image without transparency. The color pixels are displayed as they are, with no transparency option, but the dimensions of the image rectangle and its coordinate on the display can be defined. Thus, a sort of analogy of a single rectangular sprite without transparency.</li>
<li><b>LAYERPROG_RLE</b> - RLE compression mode. RLE compression is not a universally valid format. It means that the data contains segment length information. In this case, the image data of PicoVGA library contain directly instructions for the PIO program. More specifically, the image data is interleaved with the jump addresses inside the program. The image is prepared using the RaspPicoRle program and is strongly coupled to the layer program used. If, for example, the instructions in the program were shifted, the RLE compression format would stop working. This is also why the program for base layer 0 is placed at the end of the program memory and the overlay layer programs at the beginning - to reduce the chance that changes in the program will change the location of the program in memory, at which point RLE compression would stop working. After modifying the RLE program in PIO, the conversion program must also be updated.</li>
</ul>
<p>The desired mode of each overlay layer is specified in the video mode definition using the <a class="el" href="group__VideoModeGroup.html#ga5a8c9c954becaf3532bb45f3801ca916" title="Calculate the structure for setting up the video mode.">VgaCfg()</a> function. The layer mode is used to derive the program and function used to operate the layer rendering. Multiple layer modes can share the same program type. Layer modes have different state machine timing requirements. The configuration function takes this into account and adjusts the processor frequency accordingly.</p>
<h3>Modes of overlay layers:</h3>
<p>*WHITE modes using white transparent color require image preparation using <a class="el" href="group__UtilsGroup.html#ga49a4978da9e0f15dcdc9ebfc9d6c520e" title="Prepare image with white key transparency (copy and increment pixels)">CopyWhiteImg()</a> as specified for LAYERPROG_WHITE.</p><ul>
<li><b>LAYERMODE_BASE</b> - Indicates base layer mode 0. Cannot be used for an overlay layer, but is used to indicate an inactive disabled overlay layer.</li>
<li><b>LAYERMODE_KEY</b> - The layer with the specified key color.</li>
<li><b>LAYERMODE_BLACK</b> - Layer with black key color.</li>
<li><b>LAYERMODE_WHITE</b> - Layer with white key color.</li>
<li><b>LAYERMODE_MONO</b> - Monochromatic image.</li>
<li><b>LAYERMODE_COLOR</b> - Colour image (without transparency).</li>
<li><b>LAYERMODE_RLE</b> - Image with RLE compression.</li>
<li><b>LAYERMODE_SPRITEKEY</b> - Sprays with the specified key color.</li>
<li><b>LAYERMODE_SPRITEBLACK</b> - Sprays with black key color.</li>
<li><b>LAYERMODE_SPRITEWHITE</b> - Sprays with white key color.</li>
<li><b>LAYERMODE_FASTSPRITEKEY</b> - Fast sprites with the specified key colour.</li>
<li><b>LAYERMODE_FASTSPRITEBLACK</b> - Fast sprites with black key colour.</li>
<li><b>LAYERMODE_FASTSPRITEWHITE</b> - Fast sprites with white key colour.</li>
<li><b>LAYERMODE_PERSPKEY</b> - Image with transformation matrix with specified key color.</li>
<li><b>LAYERMODE_PERSPBLACK</b> - Image with transformation matrix with black key color.</li>
<li><b>LAYERMODE_PERSPWHITE</b> - Image with transformation matrix with white key color.</li>
<li><b>LAYERMODE_PERSP2KEY</b> - Image with transformation matrix with specified key color and doubled width.</li>
<li><b>LAYERMODE_PERSP2BLACK</b> - Image with transformation matrix with black key color and doubled width.</li>
<li><b>LAYERMODE_PERSP2WHITE</b> - Image with transformation matrix with white key color and doubled width.</li>
</ul>
<h3>Shared overlay modes</h3>
<p>Layer modes can only be combined together if they use the same program. CPP is the minimum required number of SMx clock cycles per pixel. </p><table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone"></th><th class="markdownTableHeadCenter">PROG_BASE </th><th class="markdownTableHeadCenter">PROG_KEY </th><th class="markdownTableHeadCenter">PROG_BLACK </th><th class="markdownTableHeadCenter">PROG_WHITE </th><th class="markdownTableHeadCenter">PROG_MONO </th><th class="markdownTableHeadCenter">PROG_RLE </th><th class="markdownTableHeadCenter">CPP </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">LAYERMODE_BASE </td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">2 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">LAYERMODE_KEY </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">6 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">LAYERMODE_BLACK </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">4 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">LAYERMODE_WHITE </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">4 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">LAYERMODE_MONO </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">4 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">LAYERMODE_COLOR </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">2 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">LAYERMODE_RLE </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter">3 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">LAYERMODE_SPRITEKEY </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">6 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">LAYERMODE_SPRITEBLACK </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">4 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">LAYERMODE_SPRITEWHITE </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">4 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">LAYERMODE_FASTSPRITEKEY </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">6 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">LAYERMODE_FASTSPRITEBLACK </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">4 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">LAYERMODE_FASTSPRITEWHITE </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">4 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">LAYERMODE_PERSPKEY </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">6 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">LAYERMODE_PERSPBLACK </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">4 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">LAYERMODE_PERSPWHITE </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">4 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">LAYERMODE_PERSP2KEY </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">6 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">LAYERMODE_PERSP2BLACK </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">4 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">LAYERMODE_PERSP2WHITE </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">X </td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter"></td><td class="markdownTableBodyCenter">4 </td></tr>
</table>
<h3>Selection of write planes</h3>
<p>By default, the image is output from the layers to all output pins. This can be changed by redefining the LayerFirstPin and LayerNumPin fields (in vga_layer.cpp). It is possible to specify for each layer separately which output pins will be written to. This can create a kind of pseudo-transparency. For example, one layer will render curves in red, another layer in green, and the colors will blend independently. When redefining the pins, however, you must take into account that the offset of the pin mapping will shift. The output will always start from the lowest bits of the pixel.</p>
<h3>Configure overlay layers</h3>
<p>The first step for setting up the overlay layer is to specify the layer mode for the <a class="el" href="group__VideoModeGroup.html#ga5a8c9c954becaf3532bb45f3801ca916" title="Calculate the structure for setting up the video mode.">VgaCfg()</a> initialization function. The function detects the required program and the required timing. It does not check if the correct layer modes are combined together.</p>
<p>The second step is to initialize the layer descriptor - the <a class="el" href="structsLayer.html" title="Layer screen descriptor (on change update SLAYER_* in define.h)">sLayer</a> structure in the LayerScreen field. It is convenient to use the <a class="el" href="group__LayersGroup.html#ga49c057cb7d4fad1f4a9770c5bf035e83" title="Setup overlapped layer 1..3 (not for sprites or perspective mode)">LayerSetup()</a> initialization function for this. </p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsLayer.html">sLayer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer screen descriptor (on change update SLAYER_* in <a class="el" href="define_8h.html" title="VGA common definitions of C and ASM.">define.h</a>) <a href="structsLayer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsSprite.html">sSprite</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sprite (on change update SSPRITE_* in <a class="el" href="define_8h.html" title="VGA common definitions of C and ASM.">define.h</a>) <a href="structsSprite.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:gac97aa4e68f9c89b8c71d011b0956de1f"><td class="memItemLeft" align="right" valign="top"><a id="gac97aa4e68f9c89b8c71d011b0956de1f"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#gac97aa4e68f9c89b8c71d011b0956de1f">BASE_OFFSET</a>&#160;&#160;&#160;17</td></tr>
<tr class="memdesc:gac97aa4e68f9c89b8c71d011b0956de1f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Offset of base layer PIO program. <br /></td></tr>
<tr class="separator:gac97aa4e68f9c89b8c71d011b0956de1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa1c2d870b2d7a0a7a2c2341183342b21"><td class="memItemLeft" align="right" valign="top"><a id="gaa1c2d870b2d7a0a7a2c2341183342b21"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#gaa1c2d870b2d7a0a7a2c2341183342b21">LAYER_OFFSET</a>&#160;&#160;&#160;0</td></tr>
<tr class="memdesc:gaa1c2d870b2d7a0a7a2c2341183342b21"><td class="mdescLeft">&#160;</td><td class="mdescRight">Offset of overlapped layer PIO program. <br /></td></tr>
<tr class="separator:gaa1c2d870b2d7a0a7a2c2341183342b21"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5af95ed8e8967ef12787636b6b902924"><td class="memItemLeft" align="right" valign="top"><a id="ga5af95ed8e8967ef12787636b6b902924"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga5af95ed8e8967ef12787636b6b902924">LAYERPROG_BASE</a>&#160;&#160;&#160;0</td></tr>
<tr class="memdesc:ga5af95ed8e8967ef12787636b6b902924"><td class="mdescLeft">&#160;</td><td class="mdescRight">Program of base layer (overlapped layers are OFF) <br /></td></tr>
<tr class="separator:ga5af95ed8e8967ef12787636b6b902924"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7de97bc16e3da10d03796876b3132877"><td class="memItemLeft" align="right" valign="top"><a id="ga7de97bc16e3da10d03796876b3132877"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga7de97bc16e3da10d03796876b3132877">LAYERPROG_KEY</a>&#160;&#160;&#160;1</td></tr>
<tr class="memdesc:ga7de97bc16e3da10d03796876b3132877"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with key color. <br /></td></tr>
<tr class="separator:ga7de97bc16e3da10d03796876b3132877"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae652a56aab6bb8379ffa0ea9cbe50f57"><td class="memItemLeft" align="right" valign="top"><a id="gae652a56aab6bb8379ffa0ea9cbe50f57"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#gae652a56aab6bb8379ffa0ea9cbe50f57">LAYERPROG_BLACK</a>&#160;&#160;&#160;2</td></tr>
<tr class="memdesc:gae652a56aab6bb8379ffa0ea9cbe50f57"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with black key color. <br /></td></tr>
<tr class="separator:gae652a56aab6bb8379ffa0ea9cbe50f57"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga61636dd304a9b6a1569de441b7f347fa"><td class="memItemLeft" align="right" valign="top"><a id="ga61636dd304a9b6a1569de441b7f347fa"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga61636dd304a9b6a1569de441b7f347fa">LAYERPROG_WHITE</a>&#160;&#160;&#160;3</td></tr>
<tr class="memdesc:ga61636dd304a9b6a1569de441b7f347fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with white key color. <br /></td></tr>
<tr class="separator:ga61636dd304a9b6a1569de441b7f347fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf236b6b45739cbf708297f44278abf90"><td class="memItemLeft" align="right" valign="top"><a id="gaf236b6b45739cbf708297f44278abf90"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#gaf236b6b45739cbf708297f44278abf90">LAYERPROG_MONO</a>&#160;&#160;&#160;4</td></tr>
<tr class="memdesc:gaf236b6b45739cbf708297f44278abf90"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with mono pattern or simple color. <br /></td></tr>
<tr class="separator:gaf236b6b45739cbf708297f44278abf90"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7c7fb76948995d9fcc13e39732a29081"><td class="memItemLeft" align="right" valign="top"><a id="ga7c7fb76948995d9fcc13e39732a29081"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga7c7fb76948995d9fcc13e39732a29081">LAYERPROG_RLE</a>&#160;&#160;&#160;5</td></tr>
<tr class="memdesc:ga7c7fb76948995d9fcc13e39732a29081"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with RLE compression. <br /></td></tr>
<tr class="separator:ga7c7fb76948995d9fcc13e39732a29081"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab152ba7d55b966804711247ebac62b3a"><td class="memItemLeft" align="right" valign="top"><a id="gab152ba7d55b966804711247ebac62b3a"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#gab152ba7d55b966804711247ebac62b3a">LAYERPROG_NUM</a>&#160;&#160;&#160;6</td></tr>
<tr class="memdesc:gab152ba7d55b966804711247ebac62b3a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of layer programs. <br /></td></tr>
<tr class="separator:gab152ba7d55b966804711247ebac62b3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad69e79889f842c7e6b9d9bd2086b619d"><td class="memItemLeft" align="right" valign="top"><a id="gad69e79889f842c7e6b9d9bd2086b619d"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#gad69e79889f842c7e6b9d9bd2086b619d">LAYERMODE_BASE</a>&#160;&#160;&#160;0</td></tr>
<tr class="memdesc:gad69e79889f842c7e6b9d9bd2086b619d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base layer. <br /></td></tr>
<tr class="separator:gad69e79889f842c7e6b9d9bd2086b619d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab14875f1e26da3948ae9b943505130d6"><td class="memItemLeft" align="right" valign="top"><a id="gab14875f1e26da3948ae9b943505130d6"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#gab14875f1e26da3948ae9b943505130d6">LAYERMODE_KEY</a>&#160;&#160;&#160;1</td></tr>
<tr class="memdesc:gab14875f1e26da3948ae9b943505130d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with key color. <br /></td></tr>
<tr class="separator:gab14875f1e26da3948ae9b943505130d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga56f6135b5dae7aded17981543343c23c"><td class="memItemLeft" align="right" valign="top"><a id="ga56f6135b5dae7aded17981543343c23c"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga56f6135b5dae7aded17981543343c23c">LAYERMODE_BLACK</a>&#160;&#160;&#160;2</td></tr>
<tr class="memdesc:ga56f6135b5dae7aded17981543343c23c"><td class="mdescLeft">&#160;</td><td class="mdescRight">layer with black key color <br /></td></tr>
<tr class="separator:ga56f6135b5dae7aded17981543343c23c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa1d27c8389336e9cb8f898a32e3ddf49"><td class="memItemLeft" align="right" valign="top"><a id="gaa1d27c8389336e9cb8f898a32e3ddf49"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#gaa1d27c8389336e9cb8f898a32e3ddf49">LAYERMODE_WHITE</a>&#160;&#160;&#160;3</td></tr>
<tr class="memdesc:gaa1d27c8389336e9cb8f898a32e3ddf49"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with white key color. <br /></td></tr>
<tr class="separator:gaa1d27c8389336e9cb8f898a32e3ddf49"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6f9ee7939475d55ac335b33b0e4bc431"><td class="memItemLeft" align="right" valign="top"><a id="ga6f9ee7939475d55ac335b33b0e4bc431"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga6f9ee7939475d55ac335b33b0e4bc431">LAYERMODE_MONO</a>&#160;&#160;&#160;4</td></tr>
<tr class="memdesc:ga6f9ee7939475d55ac335b33b0e4bc431"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with mono pattern. <br /></td></tr>
<tr class="separator:ga6f9ee7939475d55ac335b33b0e4bc431"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2643e48ca17a8b7fcedab422104efd7e"><td class="memItemLeft" align="right" valign="top"><a id="ga2643e48ca17a8b7fcedab422104efd7e"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga2643e48ca17a8b7fcedab422104efd7e">LAYERMODE_COLOR</a>&#160;&#160;&#160;5</td></tr>
<tr class="memdesc:ga2643e48ca17a8b7fcedab422104efd7e"><td class="mdescLeft">&#160;</td><td class="mdescRight">layer with simple color <br /></td></tr>
<tr class="separator:ga2643e48ca17a8b7fcedab422104efd7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabca5b092d4f3af2a33cf67201c19155c"><td class="memItemLeft" align="right" valign="top"><a id="gabca5b092d4f3af2a33cf67201c19155c"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#gabca5b092d4f3af2a33cf67201c19155c">LAYERMODE_RLE</a>&#160;&#160;&#160;6</td></tr>
<tr class="memdesc:gabca5b092d4f3af2a33cf67201c19155c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with RLE compression. <br /></td></tr>
<tr class="separator:gabca5b092d4f3af2a33cf67201c19155c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga82cb899eedcf1830412578e4d2120982"><td class="memItemLeft" align="right" valign="top"><a id="ga82cb899eedcf1830412578e4d2120982"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga82cb899eedcf1830412578e4d2120982">LAYERMODE_SPRITEKEY</a>&#160;&#160;&#160;7</td></tr>
<tr class="memdesc:ga82cb899eedcf1830412578e4d2120982"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with sprites with key color. <br /></td></tr>
<tr class="separator:ga82cb899eedcf1830412578e4d2120982"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga409482cf739f166891b6c7de51ec8f50"><td class="memItemLeft" align="right" valign="top"><a id="ga409482cf739f166891b6c7de51ec8f50"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga409482cf739f166891b6c7de51ec8f50">LAYERMODE_SPRITEBLACK</a>&#160;&#160;&#160;8</td></tr>
<tr class="memdesc:ga409482cf739f166891b6c7de51ec8f50"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with sprites with black key color. <br /></td></tr>
<tr class="separator:ga409482cf739f166891b6c7de51ec8f50"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0da04f300787ea8fb6d282a06696e00b"><td class="memItemLeft" align="right" valign="top"><a id="ga0da04f300787ea8fb6d282a06696e00b"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga0da04f300787ea8fb6d282a06696e00b">LAYERMODE_SPRITEWHITE</a>&#160;&#160;&#160;9</td></tr>
<tr class="memdesc:ga0da04f300787ea8fb6d282a06696e00b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with sprites with white key color. <br /></td></tr>
<tr class="separator:ga0da04f300787ea8fb6d282a06696e00b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga14983620b33323dc5e9ad4c2f59a2674"><td class="memItemLeft" align="right" valign="top"><a id="ga14983620b33323dc5e9ad4c2f59a2674"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga14983620b33323dc5e9ad4c2f59a2674">LAYERMODE_FASTSPRITEKEY</a>&#160;&#160;&#160;10</td></tr>
<tr class="memdesc:ga14983620b33323dc5e9ad4c2f59a2674"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with fast sprites with key color. <br /></td></tr>
<tr class="separator:ga14983620b33323dc5e9ad4c2f59a2674"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga92bfc711a47d3e3db9d4f014b1a0ece4"><td class="memItemLeft" align="right" valign="top"><a id="ga92bfc711a47d3e3db9d4f014b1a0ece4"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga92bfc711a47d3e3db9d4f014b1a0ece4">LAYERMODE_FASTSPRITEBLACK</a>&#160;&#160;&#160;11</td></tr>
<tr class="memdesc:ga92bfc711a47d3e3db9d4f014b1a0ece4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with fast sprites with black key color. <br /></td></tr>
<tr class="separator:ga92bfc711a47d3e3db9d4f014b1a0ece4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga287d940367f5bf5ab746c8abe8d063c7"><td class="memItemLeft" align="right" valign="top"><a id="ga287d940367f5bf5ab746c8abe8d063c7"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga287d940367f5bf5ab746c8abe8d063c7">LAYERMODE_FASTSPRITEWHITE</a>&#160;&#160;&#160;12</td></tr>
<tr class="memdesc:ga287d940367f5bf5ab746c8abe8d063c7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with fast sprites with white key color. <br /></td></tr>
<tr class="separator:ga287d940367f5bf5ab746c8abe8d063c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga73f7e2111375c89d1df33b941154c9a4"><td class="memItemLeft" align="right" valign="top"><a id="ga73f7e2111375c89d1df33b941154c9a4"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga73f7e2111375c89d1df33b941154c9a4">LAYERMODE_PERSPKEY</a>&#160;&#160;&#160;13</td></tr>
<tr class="memdesc:ga73f7e2111375c89d1df33b941154c9a4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with key color and image with transformation matrix. <br /></td></tr>
<tr class="separator:ga73f7e2111375c89d1df33b941154c9a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab09c202d0ab364d040ca7ae19c26b909"><td class="memItemLeft" align="right" valign="top"><a id="gab09c202d0ab364d040ca7ae19c26b909"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#gab09c202d0ab364d040ca7ae19c26b909">LAYERMODE_PERSPBLACK</a>&#160;&#160;&#160;14</td></tr>
<tr class="memdesc:gab09c202d0ab364d040ca7ae19c26b909"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with black key color and image with transformation matrix. <br /></td></tr>
<tr class="separator:gab09c202d0ab364d040ca7ae19c26b909"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2f1510ca69e690efdf40ccf29dd9c85c"><td class="memItemLeft" align="right" valign="top"><a id="ga2f1510ca69e690efdf40ccf29dd9c85c"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga2f1510ca69e690efdf40ccf29dd9c85c">LAYERMODE_PERSPWHITE</a>&#160;&#160;&#160;15</td></tr>
<tr class="memdesc:ga2f1510ca69e690efdf40ccf29dd9c85c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with white key color and image with transformation matrix. <br /></td></tr>
<tr class="separator:ga2f1510ca69e690efdf40ccf29dd9c85c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga83bff69d7c9e7eaf3057f08bb6d2e043"><td class="memItemLeft" align="right" valign="top"><a id="ga83bff69d7c9e7eaf3057f08bb6d2e043"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga83bff69d7c9e7eaf3057f08bb6d2e043">LAYERMODE_PERSP2KEY</a>&#160;&#160;&#160;16</td></tr>
<tr class="memdesc:ga83bff69d7c9e7eaf3057f08bb6d2e043"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with key color and double-pixel image with transformation matrix. <br /></td></tr>
<tr class="separator:ga83bff69d7c9e7eaf3057f08bb6d2e043"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5da28651c3f331949810672da020b133"><td class="memItemLeft" align="right" valign="top"><a id="ga5da28651c3f331949810672da020b133"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga5da28651c3f331949810672da020b133">LAYERMODE_PERSP2BLACK</a>&#160;&#160;&#160;17</td></tr>
<tr class="memdesc:ga5da28651c3f331949810672da020b133"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with black key color and double-pixel image with transformation matrix. <br /></td></tr>
<tr class="separator:ga5da28651c3f331949810672da020b133"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf58ec226682fcb7d0b92d246ba23b38f"><td class="memItemLeft" align="right" valign="top"><a id="gaf58ec226682fcb7d0b92d246ba23b38f"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#gaf58ec226682fcb7d0b92d246ba23b38f">LAYERMODE_PERSP2WHITE</a>&#160;&#160;&#160;18</td></tr>
<tr class="memdesc:gaf58ec226682fcb7d0b92d246ba23b38f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Layer with white key color and double-pixel image with transformation matrix. <br /></td></tr>
<tr class="separator:gaf58ec226682fcb7d0b92d246ba23b38f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4a722f613a431cbe1c6416a4c06f12ef"><td class="memItemLeft" align="right" valign="top"><a id="ga4a722f613a431cbe1c6416a4c06f12ef"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga4a722f613a431cbe1c6416a4c06f12ef">LAYERMODE_NUM</a>&#160;&#160;&#160;19</td></tr>
<tr class="memdesc:ga4a722f613a431cbe1c6416a4c06f12ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of overlapped layer modes. <br /></td></tr>
<tr class="separator:ga4a722f613a431cbe1c6416a4c06f12ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gaf95ad14e461311fde045530e4fbc8c9f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#gaf95ad14e461311fde045530e4fbc8c9f">LayerOn</a> (u8 inx)</td></tr>
<tr class="memdesc:gaf95ad14e461311fde045530e4fbc8c9f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set overlapped layer 1..3 ON. <a href="group__LayersGroup.html#gaf95ad14e461311fde045530e4fbc8c9f">More...</a><br /></td></tr>
<tr class="separator:gaf95ad14e461311fde045530e4fbc8c9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7dddc715d66753f8907c7fd31259d5e8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga7dddc715d66753f8907c7fd31259d5e8">LayerOff</a> (u8 inx)</td></tr>
<tr class="memdesc:ga7dddc715d66753f8907c7fd31259d5e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set overlapped layer 1..3 OFF. <a href="group__LayersGroup.html#ga7dddc715d66753f8907c7fd31259d5e8">More...</a><br /></td></tr>
<tr class="separator:ga7dddc715d66753f8907c7fd31259d5e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6b80789b0fbfc305e1bd8974b89bd180"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga6b80789b0fbfc305e1bd8974b89bd180">LayerSetX</a> (u8 inx, s16 x)</td></tr>
<tr class="memdesc:ga6b80789b0fbfc305e1bd8974b89bd180"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set coordinate X of overlapped layer. <a href="group__LayersGroup.html#ga6b80789b0fbfc305e1bd8974b89bd180">More...</a><br /></td></tr>
<tr class="separator:ga6b80789b0fbfc305e1bd8974b89bd180"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga99aa7a28b0927e1f21411733b2f97fb5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga99aa7a28b0927e1f21411733b2f97fb5">LayerSetY</a> (u8 inx, s16 y)</td></tr>
<tr class="memdesc:ga99aa7a28b0927e1f21411733b2f97fb5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set coordinate Y of overlapped layer. <a href="group__LayersGroup.html#ga99aa7a28b0927e1f21411733b2f97fb5">More...</a><br /></td></tr>
<tr class="separator:ga99aa7a28b0927e1f21411733b2f97fb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga567585aea89fda9633750e7edc2eeece"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga567585aea89fda9633750e7edc2eeece">LayerSetW</a> (u8 inx, u16 w)</td></tr>
<tr class="memdesc:ga567585aea89fda9633750e7edc2eeece"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set width of image of overlapped layer. <a href="group__LayersGroup.html#ga567585aea89fda9633750e7edc2eeece">More...</a><br /></td></tr>
<tr class="separator:ga567585aea89fda9633750e7edc2eeece"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2e917a8d1386b82ba280d43938003146"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga2e917a8d1386b82ba280d43938003146">LayerSetH</a> (u8 inx, u16 h)</td></tr>
<tr class="memdesc:ga2e917a8d1386b82ba280d43938003146"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set height of image of overlapped layer. <a href="group__LayersGroup.html#ga2e917a8d1386b82ba280d43938003146">More...</a><br /></td></tr>
<tr class="separator:ga2e917a8d1386b82ba280d43938003146"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga49c057cb7d4fad1f4a9770c5bf035e83"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga49c057cb7d4fad1f4a9770c5bf035e83">LayerSetup</a> (u8 inx, const u8 *img, const <a class="el" href="structsVmode.html">sVmode</a> *vmode, u16 w, u16 h, u8 col=0, const void *par=NULL)</td></tr>
<tr class="memdesc:ga49c057cb7d4fad1f4a9770c5bf035e83"><td class="mdescLeft">&#160;</td><td class="mdescRight">Setup overlapped layer 1..3 (not for sprites or perspective mode) <a href="group__LayersGroup.html#ga49c057cb7d4fad1f4a9770c5bf035e83">More...</a><br /></td></tr>
<tr class="separator:ga49c057cb7d4fad1f4a9770c5bf035e83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3c24cc41746df64fa0719a6fb74b2a23"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga3c24cc41746df64fa0719a6fb74b2a23">LayerPerspSetup</a> (u8 inx, const u8 *img, const <a class="el" href="structsVmode.html">sVmode</a> *vmode, u16 w, u16 h, u8 xbits, u8 ybits, s8 horiz, const int *mat, u8 col=0)</td></tr>
<tr class="memdesc:ga3c24cc41746df64fa0719a6fb74b2a23"><td class="mdescLeft">&#160;</td><td class="mdescRight">Setup overlapped layer 1..3 for LAYERMODE_PERSP* modes. <a href="group__LayersGroup.html#ga3c24cc41746df64fa0719a6fb74b2a23">More...</a><br /></td></tr>
<tr class="separator:ga3c24cc41746df64fa0719a6fb74b2a23"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:gaa877ccc48068be12c150aee8be6d8d61"><td class="memItemLeft" align="right" valign="top"><a id="gaa877ccc48068be12c150aee8be6d8d61"></a>
<a class="el" href="structsLayer.html">sLayer</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#gaa877ccc48068be12c150aee8be6d8d61">LayerScreen</a> [LAYERS]</td></tr>
<tr class="memdesc:gaa877ccc48068be12c150aee8be6d8d61"><td class="mdescLeft">&#160;</td><td class="mdescRight">Current layer screens. <br /></td></tr>
<tr class="separator:gaa877ccc48068be12c150aee8be6d8d61"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga62b72ae320dd472ba5b900e0887adc47"><td class="memItemLeft" align="right" valign="top"><a id="ga62b72ae320dd472ba5b900e0887adc47"></a>
u8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga62b72ae320dd472ba5b900e0887adc47">LayerFirstPin</a> [LAYERS_MAX]</td></tr>
<tr class="memdesc:ga62b72ae320dd472ba5b900e0887adc47"><td class="mdescLeft">&#160;</td><td class="mdescRight">Index of first pin of layer (base layer should stay VGA_GPIO_FIRST) <br /></td></tr>
<tr class="separator:ga62b72ae320dd472ba5b900e0887adc47"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga38eec4beaa946b8f23abb6a49e66cbb3"><td class="memItemLeft" align="right" valign="top"><a id="ga38eec4beaa946b8f23abb6a49e66cbb3"></a>
u8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__LayersGroup.html#ga38eec4beaa946b8f23abb6a49e66cbb3">LayerNumPin</a> [LAYERS_MAX]</td></tr>
<tr class="memdesc:ga38eec4beaa946b8f23abb6a49e66cbb3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of pins of overlapped layer (base layer should stay VGA_GPIO_OUTNUM) <br /></td></tr>
<tr class="separator:ga38eec4beaa946b8f23abb6a49e66cbb3"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a id="gaf95ad14e461311fde045530e4fbc8c9f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf95ad14e461311fde045530e4fbc8c9f">&#9670;&nbsp;</a></span>LayerOn()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LayerOn </td>
<td>(</td>
<td class="paramtype">u8&#160;</td>
<td class="paramname"><em>inx</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set overlapped layer 1..3 ON. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">inx</td><td>Layer index </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga7dddc715d66753f8907c7fd31259d5e8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga7dddc715d66753f8907c7fd31259d5e8">&#9670;&nbsp;</a></span>LayerOff()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LayerOff </td>
<td>(</td>
<td class="paramtype">u8&#160;</td>
<td class="paramname"><em>inx</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set overlapped layer 1..3 OFF. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">inx</td><td>Layer index </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga6b80789b0fbfc305e1bd8974b89bd180"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga6b80789b0fbfc305e1bd8974b89bd180">&#9670;&nbsp;</a></span>LayerSetX()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LayerSetX </td>
<td>(</td>
<td class="paramtype">u8&#160;</td>
<td class="paramname"><em>inx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">s16&#160;</td>
<td class="paramname"><em>x</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set coordinate X of overlapped layer. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">inx</td><td>Layer index </td></tr>
<tr><td class="paramname">x</td><td>X coordinate </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga99aa7a28b0927e1f21411733b2f97fb5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga99aa7a28b0927e1f21411733b2f97fb5">&#9670;&nbsp;</a></span>LayerSetY()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LayerSetY </td>
<td>(</td>
<td class="paramtype">u8&#160;</td>
<td class="paramname"><em>inx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">s16&#160;</td>
<td class="paramname"><em>y</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set coordinate Y of overlapped layer. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">inx</td><td>Layer index </td></tr>
<tr><td class="paramname">y</td><td>Y coordinate </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga567585aea89fda9633750e7edc2eeece"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga567585aea89fda9633750e7edc2eeece">&#9670;&nbsp;</a></span>LayerSetW()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LayerSetW </td>
<td>(</td>
<td class="paramtype">u8&#160;</td>
<td class="paramname"><em>inx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u16&#160;</td>
<td class="paramname"><em>w</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set width of image of overlapped layer. </p>
<dl class="section note"><dt>Note</dt><dd>Uses auto pitch wb (full line). Set custom wb after calling this function. </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">inx</td><td>Layer index </td></tr>
<tr><td class="paramname">w</td><td>Width </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga2e917a8d1386b82ba280d43938003146"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2e917a8d1386b82ba280d43938003146">&#9670;&nbsp;</a></span>LayerSetH()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LayerSetH </td>
<td>(</td>
<td class="paramtype">u8&#160;</td>
<td class="paramname"><em>inx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u16&#160;</td>
<td class="paramname"><em>h</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set height of image of overlapped layer. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">inx</td><td>Layer index </td></tr>
<tr><td class="paramname">h</td><td>Height </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga49c057cb7d4fad1f4a9770c5bf035e83"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga49c057cb7d4fad1f4a9770c5bf035e83">&#9670;&nbsp;</a></span>LayerSetup()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LayerSetup </td>
<td>(</td>
<td class="paramtype">u8&#160;</td>
<td class="paramname"><em>inx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const u8 *&#160;</td>
<td class="paramname"><em>img</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structsVmode.html">sVmode</a> *&#160;</td>
<td class="paramname"><em>vmode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u16&#160;</td>
<td class="paramname"><em>w</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u16&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8&#160;</td>
<td class="paramname"><em>col</em> = <code>0</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>par</em> = <code>NULL</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Setup overlapped layer 1..3 (not for sprites or perspective mode) </p>
<p>The function sets the dimensions of the image and its address. The coordinates are cleared. The position of the image on the screen can be set by the LayetSetX() and <a class="el" href="group__LayersGroup.html#ga99aa7a28b0927e1f21411733b2f97fb5" title="Set coordinate Y of overlapped layer.">LayerSetY()</a> functions. The coordinates do not depend on the graphic modes of the base layer and refer to the upper left corner of the active screen area. After initialization, the layer remains disabled. Layer visibility must be turned on by calling the <a class="el" href="group__LayersGroup.html#gaf95ad14e461311fde045530e4fbc8c9f" title="Set overlapped layer 1..3 ON.">LayerOn()</a> function. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">inx</td><td>Layer index 1..3 </td></tr>
<tr><td class="paramname">img</td><td>Pointer to image data </td></tr>
<tr><td class="paramname">vmode</td><td>Pointer to initialized video configuration </td></tr>
<tr><td class="paramname">w</td><td>Image width in pixels (must be multiple of 4) </td></tr>
<tr><td class="paramname">h</td><td>Image height </td></tr>
<tr><td class="paramname">col</td><td>Key color (Needed for LAYERMODE_KEY and LAYERMODE_MONO. For both *BLACK and *WHITE modes, specify COL_BLACK or 0) </td></tr>
<tr><td class="paramname">par</td><td>Additional data (RLE index table, integer transformation matrix) </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga3c24cc41746df64fa0719a6fb74b2a23"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3c24cc41746df64fa0719a6fb74b2a23">&#9670;&nbsp;</a></span>LayerPerspSetup()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LayerPerspSetup </td>
<td>(</td>
<td class="paramtype">u8&#160;</td>
<td class="paramname"><em>inx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const u8 *&#160;</td>
<td class="paramname"><em>img</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structsVmode.html">sVmode</a> *&#160;</td>
<td class="paramname"><em>vmode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u16&#160;</td>
<td class="paramname"><em>w</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u16&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8&#160;</td>
<td class="paramname"><em>xbits</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8&#160;</td>
<td class="paramname"><em>ybits</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">s8&#160;</td>
<td class="paramname"><em>horiz</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int *&#160;</td>
<td class="paramname"><em>mat</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">u8&#160;</td>
<td class="paramname"><em>col</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Setup overlapped layer 1..3 for LAYERMODE_PERSP* modes. </p>
<p>In contrast to the <a class="el" href="group__LayersGroup.html#ga49c057cb7d4fad1f4a9770c5bf035e83" title="Setup overlapped layer 1..3 (not for sprites or perspective mode)">LayerSetup()</a> function, the dimensions of the source image in number of bits (the image dimensions must be a power of 2), the height of the horizon/4 (for a negative value the floor turns into a ceiling, for zero the perspective transformation is not applied) and the pointer to the transformation matrix in integer form are also specified. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">inx</td><td>Layer index 1..3 </td></tr>
<tr><td class="paramname">img</td><td>Pointer to source image data (image width and height must be power of 2) </td></tr>
<tr><td class="paramname">vmode</td><td>Pointer to initialized video configuration </td></tr>
<tr><td class="paramname">w</td><td>Destination image width in pixels (must be multiple of 4) </td></tr>
<tr><td class="paramname">h</td><td>Destination image height </td></tr>
<tr><td class="paramname">xbits</td><td>Number of bits of width of source image </td></tr>
<tr><td class="paramname">ybits</td><td>Number of bits of height of source image </td></tr>
<tr><td class="paramname">horiz</td><td>Horizon of perspective projection/4 (0=no perspecitve, &lt;0 ceilling) </td></tr>
<tr><td class="paramname">mat</td><td>Integer transformation matrix </td></tr>
<tr><td class="paramname">col</td><td>Key color (needed for LAYERMODE_PERSPKEY layer mode) </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
</ul>
</div>
</body>
</html>