File: CastleVideos.TVideosCache.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 (165 lines) | stat: -rw-r--r-- 11,083 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
160
161
162
163
164
165
<!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: CastleVideos: Class TVideosCache</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="TVideosCache"></a><h1 class="cio">Class TVideosCache</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><a class="section" href="#PasDoc-Properties">Properties</a></td></tr></table>
<a name="PasDoc-Description"></a><h2 class="unit">Unit</h2>
<p class="unitlink">
<a  href="CastleVideos.html">CastleVideos</a></p>
<h2 class="declaration">Declaration</h2>
<p class="declaration">
<code>type TVideosCache = class(TObject)</code></p>
<h2 class="description">Description</h2>
<p>
A cache of loaded videos.

<p>The idea is that instead of creating <a class="normal" href="CastleVideos.TVideo.html">TVideo</a> instance and calling <a class="normal" href="CastleVideos.TVideo.html#LoadFromFile">TVideo.LoadFromFile</a>, you instead call <code>Video := Cache.Video_IncReference(...)</code>. Later, instead of freeing this video, call <code><a class="normal" href="CastleVideos.TVideosCache.html#Video_DecReference">Video_DecReference</a>(Video)</code>. From your point of view, things will work the same. But if you expect to load many videos from the same URL, then you will get a great speed and memory saving, because video will only be actually loaded once. This may happen e.g. if you have a VRML / X3D file with lots of MovieTexture nodes with the same urls.

<p>Notes:

<p></p>

<ul class="paragraph_spacing">
  <li><p>All passed here URLs must be absolute.</p></li>
  <li><p>Note that in case of problems with loading, <a class="normal" href="CastleVideos.TVideosCache.html#Video_IncReference">Video_IncReference</a> may raise an exception, just like normal <a class="normal" href="CastleVideos.TVideo.html#LoadFromFile">TVideo.LoadFromFile</a>. In this case it's guaranteed that no reference will be incremented, of course. If <a class="normal" href="CastleVideos.TVideosCache.html#Video_IncReference">Video_IncReference</a> returns in a normal way, then it will return something non-<code>Nil</code> for sure.</p></li>
  <li><p><a class="normal" href="CastleVideos.TVideosCache.html#Video_DecReference">Video_DecReference</a> alwas sets Video to <code>Nil</code>, like FreeAndNil.</p></li>
  <li><p>All videos handled here are always loaded. So <a class="normal" href="CastleVideos.TVideosCache.html#Video_IncReference">Video_IncReference</a> always returns <a class="normal" href="CastleVideos.TVideo.html">TVideo</a> with <a class="normal" href="CastleVideos.TVideo.html#Loaded">TVideo.Loaded</a> = <code>True</code>. And you are forbidden from closing this video by <a class="normal" href="CastleVideos.TVideo.html#Close">TVideo.Close</a> yourself.</p></li>
</ul>

<p>

<p>Note that before destroying this object you must free all videos, i.e. call <a class="normal" href="CastleVideos.TVideosCache.html#Video_DecReference">Video_DecReference</a> for all videos allocated by <a class="normal" href="CastleVideos.TVideosCache.html#Video_IncReference">Video_IncReference</a>. <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 videos 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="thisitem">TVideosCache</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="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><code>procedure <b><a  href="CastleVideos.TVideosCache.html#CheckEmpty">CheckEmpty</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>constructor <b><a  href="CastleVideos.TVideosCache.html#Create">Create</a></b>;</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>destructor <b><a  href="CastleVideos.TVideosCache.html#Destroy">Destroy</a></b>; override;</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="CastleVideos.TVideosCache.html#Video_IncReference">Video_IncReference</a></b>(const URL: string; out AlphaChannel: <a  href="CastleImages.html#TAlphaChannel">TAlphaChannel</a>): <a  href="CastleVideos.TVideo.html">TVideo</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="CastleVideos.TVideosCache.html#Video_DecReference">Video_DecReference</a></b>(var Video: <a  href="CastleVideos.TVideo.html">TVideo</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="CastleVideos.TVideosCache.html#Empty">Empty</a></b>: boolean; virtual;</code></td>
</tr>
</table>
<a name="PasDoc-Properties"></a><h3 class="summary">Properties</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>property <b><a  href="CastleVideos.TVideosCache.html#OnEmpty">OnEmpty</a></b>: TProcedure read FOnEmpty write FOnEmpty;</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="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><a name="CheckEmpty"></a><code>procedure <b>CheckEmpty</b>;</code></td>
</tr>
<tr><td colspan="2">
<p>
If cache is empty, calls <a class="normal" href="CastleVideos.TVideosCache.html#OnEmpty">OnEmpty</a>. Note that <a class="normal" href="CastleVideos.TVideosCache.html#OnEmpty">OnEmpty</a> may destroy current instance, so call <code>CheckEmpty</code> only when you finished processing &mdash; Self may be invalid afterwards.</p>
</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="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="Video_IncReference"></a><code>function <b>Video_IncReference</b>(const URL: string; out AlphaChannel: <a  href="CastleImages.html#TAlphaChannel">TAlphaChannel</a>): <a  href="CastleVideos.TVideo.html">TVideo</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="Video_DecReference"></a><code>procedure <b>Video_DecReference</b>(var Video: <a  href="CastleVideos.TVideo.html">TVideo</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; virtual;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<h3 class="detail">Properties</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="OnEmpty"></a><code>property <b>OnEmpty</b>: TProcedure read FOnEmpty write FOnEmpty;</code></td>
</tr>
<tr><td colspan="2">
<p>
Called when cache becomes empty. This is only for internal usage by <a class="normal" href="X3DNodes.html">X3DNodes</a> unit for now.</p>
</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:13</em>
</span>
</td></tr></table></body></html>