1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<title>Castle Game Engine: CastleTextureImages: Class TTexturesVideosCache</title>
<meta name="generator" content="PasDoc 0.13.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="StyleSheet" type="text/css" href="pasdoc.css">
</head>
<body>
<table class="container"><tr><td class="navigation">
<h2>Castle Game Engine</h2><p><a href="introduction.html" class="navigation">Introduction</a></p><p><a href="AllUnits.html" class="navigation">Units</a></p><p><a href="ClassHierarchy.html" class="navigation">Class Hierarchy</a></p><p><a href="AllClasses.html" class="navigation">Classes, Interfaces, Objects and Records</a></p><p><a href="AllTypes.html" class="navigation">Types</a></p><p><a href="AllVariables.html" class="navigation">Variables</a></p><p><a href="AllConstants.html" class="navigation">Constants</a></p><p><a href="AllFunctions.html" class="navigation">Functions and Procedures</a></p><p><a href="AllIdentifiers.html" class="navigation">Identifiers</a></p></td><td class="content">
<a name="TTexturesVideosCache"></a><h1 class="cio">Class TTexturesVideosCache</h1>
<table class="sections wide_list">
<tr>
<td><a class="section" href="#PasDoc-Description">Description</a></td><td><a class="section" href="#PasDoc-Hierarchy">Hierarchy</a></td><td>Fields</td><td><a class="section" href="#PasDoc-Methods">Methods</a></td><td>Properties</td></tr></table>
<a name="PasDoc-Description"></a><h2 class="unit">Unit</h2>
<p class="unitlink">
<a href="CastleTextureImages.html">CastleTextureImages</a></p>
<h2 class="declaration">Declaration</h2>
<p class="declaration">
<code>type TTexturesVideosCache = class(<a class="normal" href="CastleVideos.TVideosCache.html">TVideosCache</a>)</code></p>
<h2 class="description">Description</h2>
<p>
A cache of loaded images for textures.
<p>Load by <a class="normal" href="CastleTextureImages.TTexturesVideosCache.html#TextureImage_IncReference">TextureImage_IncReference</a>, free by <a class="normal" href="CastleTextureImages.TTexturesVideosCache.html#TextureImage_DecReference">TextureImage_DecReference</a>. These replace <a class="normal" href="CastleTextureImages.html#LoadTextureImage">LoadTextureImage</a>, and manual freeing of Image/DDS.
<p>If you used IncReference that returns DDS, then you should also free using DecReference that takes DDS. If you used IncReference without DDS parameter, then also free using DecReference without DDS parameter.
<p>The idea is that instead of <code><a class="normal" href="CastleTextureImages.html#LoadTextureImage">LoadTextureImage</a>(...)</code> call <code>Cache.TextureImage_IncReference(...)</code>. Later, instead of freeing this image, call <code><a class="normal" href="CastleTextureImages.TTexturesVideosCache.html#TextureImage_DecReference">TextureImage_DecReference</a>(Image)</code>. From your point of view, things will work the same. But if you expect to load many textures from the same URL, then you will get a great speed and memory saving, because image will only be actually loaded once. Notes:
<p></p>
<ul class="paragraph_spacing">
<li><p>Note that in case of problems with loading, <a class="normal" href="CastleTextureImages.TTexturesVideosCache.html#TextureImage_IncReference">TextureImage_IncReference</a> may raise an exception, just like normal <a class="normal" href="CastleTextureImages.html#LoadTextureImage">LoadTextureImage</a>. In this case it's guaranteed that no reference will be incremented, of course. If LoadTextureImage_IncReference returns in a normal way, then it will return something non-<code>Nil</code>, just like <a class="normal" href="CastleTextureImages.html#LoadTextureImage">LoadTextureImage</a> does.</p></li>
<li><p>LoadTextureImage_DecReference alwas sets Image to <code>Nil</code>, like FreeAndNil.</p></li>
<li><p>Since detecting image alpha channel type may be a little time-consuming (iteration over all pixels is needed), we also do it here and save in cache.</p></li>
</ul>
<p>
<p>Note that before destroying this object you must free all textures, i.e. call LoadTextureImage_DecReference for all images allocated by LoadTextureImage_IncReference. <i>This class is not a lousy way of avoiding memory leaks</i> — it would be a bad idea, because it would cause sloppy programming, where memory is unnecessarily allocated for a long time. In fact, this class asserts in destructor that no images are in cache anymore, so if you compiled with assertions enabled, this class does the job of memory-leak detector.</p>
<a name="PasDoc-Hierarchy"></a><h2 class="hierarchy">Hierarchy</h2>
<ul class="hierarchy"><li class="ancestor">TObject</li>
<li class="ancestor"><a class="normal" href="CastleVideos.TVideosCache.html">TVideosCache</a></li>
<li class="thisitem">TTexturesVideosCache</li></ul><h2 class="overview">Overview</h2>
<a name="PasDoc-Methods"></a><h3 class="summary">Methods</h3>
<table class="summary wide_list">
<tr class="list">
<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>constructor <b><a href="CastleTextureImages.TTexturesVideosCache.html#Create">Create</a></b>;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>destructor <b><a href="CastleTextureImages.TTexturesVideosCache.html#Destroy">Destroy</a></b>; override;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>function <b><a href="CastleTextureImages.TTexturesVideosCache.html#TextureImage_IncReference">TextureImage_IncReference</a></b>(const URL: string; out DDS: <a href="CastleDDS.TDDSImage.html">TDDSImage</a>; out AlphaChannel: <a href="CastleImages.html#TAlphaChannel">TAlphaChannel</a>): <a href="CastleImages.TEncodedImage.html">TEncodedImage</a>;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>function <b><a href="CastleTextureImages.TTexturesVideosCache.html#TextureImage_IncReference">TextureImage_IncReference</a></b>(const URL: string; out AlphaChannel: <a href="CastleImages.html#TAlphaChannel">TAlphaChannel</a>): <a href="CastleImages.TEncodedImage.html">TEncodedImage</a>;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>procedure <b><a href="CastleTextureImages.TTexturesVideosCache.html#TextureImage_DecReference">TextureImage_DecReference</a></b>(var Image: <a href="CastleImages.TEncodedImage.html">TEncodedImage</a>; var DDS: <a href="CastleDDS.TDDSImage.html">TDDSImage</a>);</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>procedure <b><a href="CastleTextureImages.TTexturesVideosCache.html#TextureImage_DecReference">TextureImage_DecReference</a></b>(var Image: <a href="CastleImages.TEncodedImage.html">TEncodedImage</a>);</code></td>
</tr>
<tr class="list">
<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>function <b><a href="CastleTextureImages.TTexturesVideosCache.html#Empty">Empty</a></b>: boolean; override;</code></td>
</tr>
</table>
<h2 class="description">Description</h2>
<h3 class="detail">Methods</h3>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Create"></a><code>constructor <b>Create</b>;</code></td>
</tr>
<tr><td colspan="2">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Destroy"></a><code>destructor <b>Destroy</b>; override;</code></td>
</tr>
<tr><td colspan="2">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="TextureImage_IncReference"></a><code>function <b>TextureImage_IncReference</b>(const URL: string; out DDS: <a href="CastleDDS.TDDSImage.html">TDDSImage</a>; out AlphaChannel: <a href="CastleImages.html#TAlphaChannel">TAlphaChannel</a>): <a href="CastleImages.TEncodedImage.html">TEncodedImage</a>;</code></td>
</tr>
<tr><td colspan="2">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="TextureImage_IncReference"></a><code>function <b>TextureImage_IncReference</b>(const URL: string; out AlphaChannel: <a href="CastleImages.html#TAlphaChannel">TAlphaChannel</a>): <a href="CastleImages.TEncodedImage.html">TEncodedImage</a>;</code></td>
</tr>
<tr><td colspan="2">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="TextureImage_DecReference"></a><code>procedure <b>TextureImage_DecReference</b>(var Image: <a href="CastleImages.TEncodedImage.html">TEncodedImage</a>; var DDS: <a href="CastleDDS.TDDSImage.html">TDDSImage</a>);</code></td>
</tr>
<tr><td colspan="2">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="TextureImage_DecReference"></a><code>procedure <b>TextureImage_DecReference</b>(var Image: <a href="CastleImages.TEncodedImage.html">TEncodedImage</a>);</code></td>
</tr>
<tr><td colspan="2">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a href="legend.html"><img src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Empty"></a><code>function <b>Empty</b>: boolean; override;</code></td>
</tr>
<tr><td colspan="2">
</td></tr>
</table>
<!-- Piwik -->
<script type="text/javascript">
var _paq = _paq || [];
_paq.push(["trackPageView"]);
_paq.push(["enableLinkTracking"]);
(function() {
var u=(("https:" == document.location.protocol) ? "https" : "http") + "://michalis.ii.uni.wroc.pl/piwik-castle-engine/";
_paq.push(["setTrackerUrl", u+"piwik.php"]);
_paq.push(["setSiteId", "1"]);
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Piwik Code -->
<noscript>
<!-- Piwik Image Tracker -->
<img src="http://michalis.ii.uni.wroc.pl/piwik-castle-engine/piwik.php?idsite=1&rec=1" style="border:0" alt="" />
<!-- End Piwik -->
</noscript>
<hr noshade size="1"><span class="appinfo"><em>Generated by <a href="http://pasdoc.sourceforge.net/">PasDoc 0.13.0</a> on 2015-06-15 04:43:12</em>
</span>
</td></tr></table></body></html>
|