File: CastleTextureImages.TTexturesVideosCache.html

package info (click to toggle)
castle-game-engine 5.2.0-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 185,428 kB
  • sloc: pascal: 260,781; cpp: 1,363; objc: 713; makefile: 537; xml: 496; sh: 480; php: 4
file content (159 lines) | stat: -rw-r--r-- 11,579 bytes parent folder | download
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> &mdash; 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">
&nbsp;</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">
&nbsp;</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">
&nbsp;</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">
&nbsp;</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">
&nbsp;</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">
&nbsp;</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">
&nbsp;</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&amp;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>