summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Thompson <dthompson@vistahigherlearning.com>2019-06-04 20:49:16 -0400
committerDavid Thompson <dthompson@vistahigherlearning.com>2019-06-04 20:49:16 -0400
commit279f17ac0e1b3d019c2b294098e834d249376686 (patch)
tree47be849d3b35635d167e00cd8448815a75167a23
parent7b808b9268ec735a7a176d10bf1887b3fa66d13e (diff)
Update chickadee manual.
-rw-r--r--manuals/chickadee/API-Reference.html4
-rw-r--r--manuals/chickadee/Agendas.html31
-rw-r--r--manuals/chickadee/Basics.html12
-rw-r--r--manuals/chickadee/Bezier-Curves.html22
-rw-r--r--manuals/chickadee/Blending.html137
-rw-r--r--manuals/chickadee/Buffers.html473
-rw-r--r--manuals/chickadee/Channels.html25
-rw-r--r--manuals/chickadee/Copying-This-Manual.html4
-rw-r--r--manuals/chickadee/Easings.html47
-rw-r--r--manuals/chickadee/Fonts.html84
-rw-r--r--manuals/chickadee/Framebuffers.html18
-rw-r--r--manuals/chickadee/GNU-Free-Documentation-License.html4
-rw-r--r--manuals/chickadee/Graphics.html30
-rw-r--r--manuals/chickadee/Grid.html32
-rw-r--r--manuals/chickadee/Index.html151
-rw-r--r--manuals/chickadee/Installation.html4
-rw-r--r--manuals/chickadee/Kernel.html65
-rw-r--r--manuals/chickadee/Lines-and-Shapes.html12
-rw-r--r--manuals/chickadee/Math.html4
-rw-r--r--manuals/chickadee/Matrices.html38
-rw-r--r--manuals/chickadee/Particles.html263
-rw-r--r--manuals/chickadee/Path-Finding.html8
-rw-r--r--manuals/chickadee/Quaternions.html16
-rw-r--r--manuals/chickadee/Rectangles.html83
-rw-r--r--manuals/chickadee/Rendering-Engine.html62
-rw-r--r--manuals/chickadee/Requirements.html4
-rw-r--r--manuals/chickadee/Scripting.html6
-rw-r--r--manuals/chickadee/Scripts.html29
-rw-r--r--manuals/chickadee/Shaders.html176
-rw-r--r--manuals/chickadee/Sprites.html87
-rw-r--r--manuals/chickadee/Textures.html110
-rw-r--r--manuals/chickadee/Tile-Maps.html254
-rw-r--r--manuals/chickadee/Tweening.html6
-rw-r--r--manuals/chickadee/Vectors.html90
-rw-r--r--manuals/chickadee/Viewports.html70
-rw-r--r--manuals/chickadee/index.html43
36 files changed, 2121 insertions, 383 deletions
diff --git a/manuals/chickadee/API-Reference.html b/manuals/chickadee/API-Reference.html
index d5fdbbe..67d2be0 100644
--- a/manuals/chickadee/API-Reference.html
+++ b/manuals/chickadee/API-Reference.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
diff --git a/manuals/chickadee/Agendas.html b/manuals/chickadee/Agendas.html
index eced92c..3580ade 100644
--- a/manuals/chickadee/Agendas.html
+++ b/manuals/chickadee/Agendas.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -115,11 +117,12 @@ the current time. This is where <code>after</code> comes in handy:
<p>Time units in the agenda are in no way connected to real time. It&rsquo;s
up to the programmer to decide what agenda time means. A simple and
-effective approach is to map each call of the update hook
+effective approach is to map each call of the update procedure
(see <a href="Kernel.html#Kernel">Kernel</a>) to 1 unit of agenda time, like so:
</p>
<div class="example">
-<pre class="example">(add-hook! update-hook (lambda (dt) (update-agenda 1)))
+<pre class="example">(define (update dt)
+ (update-agenda 1))
</pre></div>
<p>It is important to call <code>update-agenda</code> periodically, otherwise
@@ -147,19 +150,19 @@ scoped and can be changed using the <code>with-agenda</code> special form:
</p></dd></dl>
<dl>
-<dt><a name="index-agenda_003f"></a>Procedure: <strong>agenda?</strong> <em><var>obj</var></em></dt>
+<dt><a name="index-agenda_003f"></a>Procedure: <strong>agenda?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> is an agenda.
</p></dd></dl>
<dl>
<dt><a name="index-current_002dagenda"></a>Procedure: <strong>current-agenda</strong></dt>
-<dt><a name="index-current_002dagenda-1"></a>Procedure: <strong>current-agenda</strong> <em><var>agenda</var></em></dt>
+<dt><a name="index-current_002dagenda-1"></a>Procedure: <strong>current-agenda</strong> <em>agenda</em></dt>
<dd><p>When called with no arguments, return the current agenda. When called
with one argument, set the current agenda to <var>agenda</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-with_002dagenda"></a>Syntax: <strong>with-agenda</strong> <em><var>agenda</var> <var>body</var> &hellip;</em></dt>
+<dt><a name="index-with_002dagenda"></a>Syntax: <strong>with-agenda</strong> <em>agenda body &hellip;</em></dt>
<dd><p>Evaluate <var>body</var> with the current agenda set to <var>agenda</var>.
</p></dd></dl>
@@ -169,42 +172,42 @@ with one argument, set the current agenda to <var>agenda</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-update_002dagenda"></a>Procedure: <strong>update-agenda</strong> <em><var>dt</var></em></dt>
+<dt><a name="index-update_002dagenda"></a>Procedure: <strong>update-agenda</strong> <em>dt</em></dt>
<dd><p>Advance the current agenda by <var>dt</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-schedule_002dat"></a>Procedure: <strong>schedule-at</strong> <em><var>time</var> <var>thunk</var></em></dt>
+<dt><a name="index-schedule_002dat"></a>Procedure: <strong>schedule-at</strong> <em>time thunk</em></dt>
<dd><p>Schedule <var>thunk</var>, a procedure of zero arguments, to be run at
<var>time</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-schedule_002dafter"></a>Procedure: <strong>schedule-after</strong> <em><var>delay</var> <var>thunk</var></em></dt>
+<dt><a name="index-schedule_002dafter"></a>Procedure: <strong>schedule-after</strong> <em>delay thunk</em></dt>
<dd><p>Schedule <var>thunk</var>, a procedure of zero arguments, to be run after
<var>delay</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-schedule_002devery"></a>Procedure: <strong>schedule-every</strong> <em><var>interval</var> <var>thunk</var> [<var>n</var>]</em></dt>
+<dt><a name="index-schedule_002devery"></a>Procedure: <strong>schedule-every</strong> <em>interval thunk [n]</em></dt>
<dd><p>Schedule <var>thunk</var>, a procedure of zero arguments, to be run every
<var>interval</var> amount of time. Repeat this <var>n</var> times, or
indefinitely if not specified.
</p></dd></dl>
<dl>
-<dt><a name="index-at"></a>Syntax: <strong>at</strong> <em><var>time</var> <var>body</var> &hellip;</em></dt>
+<dt><a name="index-at"></a>Syntax: <strong>at</strong> <em>time body &hellip;</em></dt>
<dd><p>Schedule <var>body</var> to be evaluated at <var>time</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-after"></a>Syntax: <strong>after</strong> <em><var>delay</var> <var>body</var> &hellip;</em></dt>
+<dt><a name="index-after"></a>Syntax: <strong>after</strong> <em>delay body &hellip;</em></dt>
<dd><p>Schedule <var>body</var> to be evaluated after <var>delay</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-every"></a>Syntax: <strong>every</strong> <em><var>interval</var> <var>body</var> &hellip;</em></dt>
-<dt><a name="index-every-1"></a>Syntax: <strong>every</strong> <em>(<var>interval</var> <var>n</var>) <var>body</var> &hellip;</em></dt>
+<dt><a name="index-every"></a>Syntax: <strong>every</strong> <em>interval body &hellip;</em></dt>
+<dt><a name="index-every-1"></a>Syntax: <strong>every</strong> <em>(interval n) body &hellip;</em></dt>
<dd><p>Schedule <var>body</var> to be evaluated every <var>interval</var> amount of
time. Repeat this <var>n</var> times, or indefinitely if not specified.
</p></dd></dl>
diff --git a/manuals/chickadee/Basics.html b/manuals/chickadee/Basics.html
index dd3898c..4c2d313 100644
--- a/manuals/chickadee/Basics.html
+++ b/manuals/chickadee/Basics.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -98,9 +100,9 @@ Next: <a href="Vectors.html#Vectors" accesskey="n" rel="next">Vectors</a>, Up: <
<dl>
<dt><a name="index-pi"></a>Variable: <strong>pi</strong></dt>
-<dd><p>An essential constant for all trigonometry. <code>&#x03C0;</code> is the ratio
-of a circle&rsquo;s circumferences to its diameter. Since <code>&#x03C0;</code> is an
-irrational number, the <var>pi</var> in Chickadee is a mere floating point
+<dd><p>An essential constant for all trigonometry. Pi is the ratio of a
+circle&rsquo;s circumferences to its diameter. Since pi is an irrational
+number, the <var>pi</var> in Chickadee is a mere floating point
approximation that is &ldquo;good enough.&rdquo;
</p></dd></dl>
@@ -110,7 +112,7 @@ approximation that is &ldquo;good enough.&rdquo;
</p></dd></dl>
<dl>
-<dt><a name="index-cotan"></a>Procedure: <strong>cotan</strong> <em><var>z</var></em></dt>
+<dt><a name="index-cotan"></a>Procedure: <strong>cotan</strong> <em>z</em></dt>
<dd><p>Return the cotangent of <var>z</var>.
</p></dd></dl>
diff --git a/manuals/chickadee/Bezier-Curves.html b/manuals/chickadee/Bezier-Curves.html
index 6a49b59..ff04e6b 100644
--- a/manuals/chickadee/Bezier-Curves.html
+++ b/manuals/chickadee/Bezier-Curves.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -110,39 +112,39 @@ mostly for visualizing and debugging curves that would be unseen in
the final game. See See <a href="Lines-and-Shapes.html#Lines-and-Shapes">Lines and Shapes</a> for more information.
</p>
<dl>
-<dt><a name="index-make_002dbezier_002dcurve"></a>Procedure: <strong>make-bezier-curve</strong> <em><var>p0</var> <var>p1</var> <var>p2</var> <var>p3</var></em></dt>
+<dt><a name="index-make_002dbezier_002dcurve"></a>Procedure: <strong>make-bezier-curve</strong> <em>p0 p1 p2 p3</em></dt>
<dd><p>Return a new Bezier curve object whose starting point is <var>p0</var>,
ending point is <var>p3</var>, and control points are <var>p1</var> and
<var>p2</var>. All points are 2D vectors.
</p></dd></dl>
<dl>
-<dt><a name="index-bezier_002dcurve_003f"></a>Procedure: <strong>bezier-curve?</strong> <em><var>obj</var></em></dt>
+<dt><a name="index-bezier_002dcurve_003f"></a>Procedure: <strong>bezier-curve?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> is a Bezier curve.
</p></dd></dl>
<dl>
-<dt><a name="index-bezier_002dcurve_002dp0"></a>Procedure: <strong>bezier-curve-p0</strong> <em><var>bezier</var></em></dt>
+<dt><a name="index-bezier_002dcurve_002dp0"></a>Procedure: <strong>bezier-curve-p0</strong> <em>bezier</em></dt>
<dd><p>Return the starting point of <var>bezier</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-bezier_002dcurve_002dp1"></a>Procedure: <strong>bezier-curve-p1</strong> <em><var>bezier</var></em></dt>
+<dt><a name="index-bezier_002dcurve_002dp1"></a>Procedure: <strong>bezier-curve-p1</strong> <em>bezier</em></dt>
<dd><p>Return the first control point of <var>bezier</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-bezier_002dcurve_002dp2"></a>Procedure: <strong>bezier-curve-p2</strong> <em><var>bezier</var></em></dt>
+<dt><a name="index-bezier_002dcurve_002dp2"></a>Procedure: <strong>bezier-curve-p2</strong> <em>bezier</em></dt>
<dd><p>Return the second control point of <var>bezier</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-bezier_002dcurve_002dp3"></a>Procedure: <strong>bezier-curve-p3</strong> <em><var>bezier</var></em></dt>
+<dt><a name="index-bezier_002dcurve_002dp3"></a>Procedure: <strong>bezier-curve-p3</strong> <em>bezier</em></dt>
<dd><p>Return the end point of <var>bezier</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-bezier_002dpath"></a>Procedure: <strong>bezier-path</strong> <em>. <var>control-points</var></em></dt>
+<dt><a name="index-bezier_002dpath"></a>Procedure: <strong>bezier-path</strong> <em>. control-points</em></dt>
<dd><p>Return a list of connected bezier curves defined by
<var>control-points</var>. The first curve is defined by the first 4
arguments and every additional curve thereafter requires 3 additional
@@ -150,14 +152,14 @@ arguments.
</p></dd></dl>
<dl>
-<dt><a name="index-bezier_002dcurve_002dpoint_002dat"></a>Procedure: <strong>bezier-curve-point-at</strong> <em><var>bezier</var> <var>t</var></em></dt>
+<dt><a name="index-bezier_002dcurve_002dpoint_002dat"></a>Procedure: <strong>bezier-curve-point-at</strong> <em>bezier t</em></dt>
<dd><p>Return the coordinates for <var>bezier</var> at <var>t</var> (a value in the
range [0, 1] representing how far from the start of the curve to
check) as a 2D vector.
</p></dd></dl>
<dl>
-<dt><a name="index-bezier_002dcurve_002dpoint_002dat_0021"></a>Procedure: <strong>bezier-curve-point-at!</strong> <em><var>dest</var> <var>bezier</var> <var>t</var></em></dt>
+<dt><a name="index-bezier_002dcurve_002dpoint_002dat_0021"></a>Procedure: <strong>bezier-curve-point-at!</strong> <em>dest bezier t</em></dt>
<dd><p>Modify the 2D vector <var>dest</var> in-place to contain the coordinates
for <var>bezier</var> at <var>t</var>.
</p></dd></dl>
diff --git a/manuals/chickadee/Blending.html b/manuals/chickadee/Blending.html
new file mode 100644
index 0000000..6b3aa0d
--- /dev/null
+++ b/manuals/chickadee/Blending.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+A copy of the license is also available from the Free Software
+Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+
+
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
+The document was typeset with
+http://www.texinfo.org/ (GNU Texinfo).
+ -->
+<!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Blending (The Chickadee Game Toolkit)</title>
+
+<meta name="description" content="Blending (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Blending (The Chickadee Game Toolkit)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="makeinfo">
+<link href="index.html#Top" rel="start" title="Top">
+<link href="Index.html#Index" rel="index" title="Index">
+<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="Graphics.html#Graphics" rel="up" title="Graphics">
+<link href="Framebuffers.html#Framebuffers" rel="next" title="Framebuffers">
+<link href="Particles.html#Particles" rel="prev" title="Particles">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
+blockquote.smallquotation {font-size: smaller}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {margin-left: 3.2em}
+div.smalldisplay {margin-left: 3.2em}
+div.smallexample {margin-left: 3.2em}
+div.smalllisp {margin-left: 3.2em}
+kbd {font-style: oblique}
+pre.display {font-family: inherit}
+pre.format {font-family: inherit}
+pre.menu-comment {font-family: serif}
+pre.menu-preformatted {font-family: serif}
+pre.smalldisplay {font-family: inherit; font-size: smaller}
+pre.smallexample {font-size: smaller}
+pre.smallformat {font-family: inherit; font-size: smaller}
+pre.smalllisp {font-size: smaller}
+span.nolinebreak {white-space: nowrap}
+span.roman {font-family: initial; font-weight: normal}
+span.sansserif {font-family: sans-serif; font-weight: normal}
+ul.no-bullet {list-style: none}
+@media (min-width: 1140px) {
+ body {
+ margin-left: 14rem;
+ margin-right: 4rem;
+ max-width: 52rem;
+ }
+}
+
+@media (min-width: 800px) and (max-width: 1140px) {
+ body {
+ margin-left: 6rem;
+ margin-right: 4rem;
+ max-width: 52rem;
+ }
+}
+
+@media (max-width: 800px) {
+ body {
+ margin: 1rem;
+ }
+}
+
+-->
+</style>
+<link rel="stylesheet" type="text/css" href="https://dthompson.us/css/dthompson.css">
+
+
+</head>
+
+<body lang="en">
+<a name="Blending"></a>
+<div class="header">
+<p>
+Next: <a href="Framebuffers.html#Framebuffers" accesskey="n" rel="next">Framebuffers</a>, Previous: <a href="Particles.html#Particles" accesskey="p" rel="prev">Particles</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+</div>
+<hr>
+<a name="Blending-1"></a>
+<h4 class="subsection">2.3.7 Blending</h4>
+
+<p>Rendering a scene often involves drawing layers of objects that
+overlap each other. Blending determines how two overlapping pixels
+are combined in the final image that is rendered to the screen.
+Chickadee provides the following blend modes:
+</p>
+<ul>
+<li> <code>replace</code>
+Use the latest color, ignoring all others.
+
+</li><li> <code>alpha</code>
+Blend pixels according to the values of their alpha channels. This is
+the most commonly used blend mode and thus is Chickadee&rsquo;s default
+mode.
+
+</li><li> <code>add</code>
+Add all pixel color values together. The more colors blended
+together, the more white the final color becomes.
+
+</li><li> <code>subtract</code>
+Subtract all pixel color values. The more colors blended together,
+the more black the final color becomes.
+
+</li><li> <code>multiply</code>
+
+</li><li> <code>darken</code>
+
+</li><li> <code>lighten</code>
+
+</li><li> <code>screen</code>
+
+</li></ul>
+
+
+
+
+</body>
+</html>
diff --git a/manuals/chickadee/Buffers.html b/manuals/chickadee/Buffers.html
new file mode 100644
index 0000000..00e3cfe
--- /dev/null
+++ b/manuals/chickadee/Buffers.html
@@ -0,0 +1,473 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+A copy of the license is also available from the Free Software
+Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+
+
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
+The document was typeset with
+http://www.texinfo.org/ (GNU Texinfo).
+ -->
+<!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Buffers (The Chickadee Game Toolkit)</title>
+
+<meta name="description" content="Buffers (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Buffers (The Chickadee Game Toolkit)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="makeinfo">
+<link href="index.html#Top" rel="start" title="Top">
+<link href="Index.html#Index" rel="index" title="Index">
+<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="Graphics.html#Graphics" rel="up" title="Graphics">
+<link href="Shaders.html#Shaders" rel="next" title="Shaders">
+<link href="Rendering-Engine.html#Rendering-Engine" rel="prev" title="Rendering Engine">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
+blockquote.smallquotation {font-size: smaller}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {margin-left: 3.2em}
+div.smalldisplay {margin-left: 3.2em}
+div.smallexample {margin-left: 3.2em}
+div.smalllisp {margin-left: 3.2em}
+kbd {font-style: oblique}
+pre.display {font-family: inherit}
+pre.format {font-family: inherit}
+pre.menu-comment {font-family: serif}
+pre.menu-preformatted {font-family: serif}
+pre.smalldisplay {font-family: inherit; font-size: smaller}
+pre.smallexample {font-size: smaller}
+pre.smallformat {font-family: inherit; font-size: smaller}
+pre.smalllisp {font-size: smaller}
+span.nolinebreak {white-space: nowrap}
+span.roman {font-family: initial; font-weight: normal}
+span.sansserif {font-family: sans-serif; font-weight: normal}
+ul.no-bullet {list-style: none}
+@media (min-width: 1140px) {
+ body {
+ margin-left: 14rem;
+ margin-right: 4rem;
+ max-width: 52rem;
+ }
+}
+
+@media (min-width: 800px) and (max-width: 1140px) {
+ body {
+ margin-left: 6rem;
+ margin-right: 4rem;
+ max-width: 52rem;
+ }
+}
+
+@media (max-width: 800px) {
+ body {
+ margin: 1rem;
+ }
+}
+
+-->
+</style>
+<link rel="stylesheet" type="text/css" href="https://dthompson.us/css/dthompson.css">
+
+
+</head>
+
+<body lang="en">
+<a name="Buffers"></a>
+<div class="header">
+<p>
+Next: <a href="Shaders.html#Shaders" accesskey="n" rel="next">Shaders</a>, Previous: <a href="Rendering-Engine.html#Rendering-Engine" accesskey="p" rel="prev">Rendering Engine</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+</div>
+<hr>
+<a name="Buffers-1"></a>
+<h4 class="subsection">2.3.11 Buffers</h4>
+
+<p>Alright, let&rsquo;s brush aside all of those pretty high level abstractions
+and discuss what is going on under the hood. The GPU exists as a
+discrete piece of hardware separate from the CPU. In order to make it
+draw things, we must ship lots of data out of our memory space and
+into the GPU. The <code>(chickadee render buffer</code>) module provides an
+API for manipulating GPU buffers.
+</p>
+<p>In OpenGL terminology, a chunk of data allocated on the GPU is a
+&ldquo;vertex buffer object&rdquo; or VBO. For example, here is a bytevector
+that could be transformed into a GPU buffer that packs together vertex
+position and texture coordinates:
+</p>
+<div class="example">
+<pre class="example">(use-modules (chickadee render buffer) (srfi srfi-4))
+(define data
+ (f32vector -8.0 -8.0 ; 2D vertex
+ 0.0 0.0 ; 2D texture coordinate
+ 8.0 -8.0 ; 2D vertex
+ 1.0 0.0 ; 2D texture coordinate
+ 8.0 8.0 ; 2D vertex
+ 1.0 1.0 ; 2D texture coordinate
+ -8.0 8.0 ; 2D vertex
+ 0.0 1.0)) ; 2D texture coordinate
+</pre></div>
+
+<p>This data represents a textured 16x16 square centered on the
+origin. To send this data to the GPU, the <code>make-buffer</code> procedure
+is needed:
+</p>
+<div class="example">
+<pre class="example">(define buffer (make-buffer data #:stride 16))
+</pre></div>
+
+<p>The <code>#:stride</code> keyword argument indicates how many bytes make up
+each element of the buffer. In this case, there are 4 floats per
+element: 2 for the vertex, and 2 for the texture coordinate. A 32-bit
+float is 4 bytes in length, so the buffer&rsquo;s stride is 16.
+</p>
+<p>Within a VBO, one or more &ldquo;attributes&rdquo;, as OpenGL calls them, may be
+present. Attributes are subregions within the buffer that have a
+particular data type. In this case, there are two attributes packed
+into the buffer. To provided a typed view into a buffer, the
+<code>make-buffer-view</code> procedure is needed:
+</p>
+<div class="example">
+<pre class="example">(define vertices
+ (make-buffer-view #:buffer buffer
+ #:type 'vec2
+ #:component-type 'float
+ #:length 4))
+(define texcoords
+ (make-buffer-view #:buffer buffer
+ #:type 'vec2
+ #:component-type 'float
+ #:length 4
+ #:offset 8))
+</pre></div>
+
+<p>To render a square, the GPU needs to draw two triangles, which means
+we need 6 vertices in total. However, the above buffer only contains
+data for 4 vertices. This is becase there are only 4 unique vertices
+for a square, but 2 of them must be repeated for each triangle. To
+work with deduplicated vertex data, an &ldquo;index buffer&rdquo; must be
+created.
+</p>
+<div class="example">
+<pre class="example">(define index-buffer
+ (make-buffer (u32vector 0 3 2 0 2 1)
+ #:target 'index)
+(define indices
+ (make-buffer-view #:type 'scalar
+ #:component-type 'unsigned-int
+ #:buffer index-buffer))
+</pre></div>
+
+<p>Note the use of the <code>#:target</code> keyword argument. It is required
+because the GPU treats index data in a special way and must be told
+which data is index data.
+</p>
+<p>Now that the buffer views representing each attribute have been
+created, all that&rsquo;s left is to bind them all together in a &ldquo;vertex
+array object&rdquo;, or VAO. Vertex arrays associate each buffer view
+with an attribute index on the GPU. The indices that are chosen must
+correspond with the indices that the shader (see <a href="Shaders.html#Shaders">Shaders</a>) expects
+for each attribute.
+</p>
+<div class="example">
+<pre class="example">(define vertex-array
+ (make-vertex-array #:indices indices
+ #:attributes `((0 . ,vertices)
+ (1 . ,texcoords))))
+</pre></div>
+
+<p>With the vertex array created, the GPU is now fully aware of how to
+interpret the data that it has been given in the original buffer.
+Actually rendering this square is left as an exercise to the reader.
+See the <a href="Shaders.html#Shaders">Shaders</a> section and the <code>gpu-apply</code> procedure in
+<a href="Rendering-Engine.html#Rendering-Engine">Rendering Engine</a> for the remaining pieces of a successful draw
+call. Additionally, consider reading the source code for sprites,
+shapes, or particles to see GPU buffers in action.
+</p>
+<p>Without further ado, the API reference:
+</p>
+<dl>
+<dt><a name="index-make_002dbuffer"></a>Procedure: <strong>make-buffer</strong> <em>data [#:name &quot;anonymous&quot;] [#:length] [#:offset 0] [#:stride 0] [#:target <code>vertex</code>] [#:usage <code>static</code>]</em></dt>
+<dd>
+<p>Upload <var>data</var>, a bytevector, to the GPU. By default, the entire
+bytevector is uploaded. A subset of the data may be uploaded by
+specifying the <var>offset</var>, the index of the first byte to be
+uploaded, and <var>length</var>, the number of bytes to upload.
+</p>
+<p>If <var>data</var> is <code>#f</code>, allocate <var>length</var> bytes of fresh GPU
+memory instead.
+</p>
+<p><var>target</var> and <var>usage</var> are hints that tell the GPU how the
+buffer is intended to be used.
+</p>
+<p><var>target</var> may be:
+</p>
+<ul>
+<li> <code>vertex</code>
+Vertex attribute data.
+
+</li><li> <code>index</code>
+Index buffer data.
+
+</li></ul>
+
+<p><var>usage</var> may be:
+</p>
+<ul>
+<li> <code>static</code>
+The buffer data will not be modified after creation.
+
+</li><li> <code>stream</code>
+The buffer data will be modified frequently.
+
+</li></ul>
+
+<p><var>name</var> is simply an arbitrary string for debugging purposes that
+is never sent to the GPU.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-buffer_003f"></a>Procedure: <strong>buffer?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a GPU buffer.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-index_002dbuffer_003f"></a>Procedure: <strong>index-buffer?</strong> <em>buffer</em></dt>
+<dd><p>Return <code>#t</code> if <var>buffer</var> is an index buffer.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-null_002dbuffer"></a>Variable: <strong>null-buffer</strong></dt>
+<dd><p>Represents the absence of a buffer.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-buffer_002dname"></a>Procedure: <strong>buffer-name</strong> <em>buffer</em></dt>
+<dd><p>Return the name of <var>buffer</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-buffer_002dlength"></a>Procedure: <strong>buffer-length</strong> <em>buffer</em></dt>
+<dd><p>Return the length of <var>buffer</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-buffer_002dstride"></a>Procedure: <strong>buffer-stride</strong> <em>buffer</em></dt>
+<dd><p>Return the amount of space, in bytes, between each element in
+<var>buffer</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-buffer_002dtarget"></a>Procedure: <strong>buffer-target</strong> <em>buffer</em></dt>
+<dd><p>Return the the intended usage of <var>buffer</var>, either <code>vertex</code> or
+<code>index</code>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-buffer_002dusage"></a>Procedure: <strong>buffer-usage</strong> <em>buffer</em></dt>
+<dd><p>Return the intended usage of <var>buffer</var>, either <code>static</code> for
+buffer data that will not change once sent to the GPU, or
+<code>stream</code> for buffer data that will be frequently updated from the
+client-side.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-buffer_002ddata"></a>Procedure: <strong>buffer-data</strong> <em>buffer</em></dt>
+<dd><p>Return a bytevector containing all the data within <var>buffer</var>. If
+<var>buffer</var> has not been mapped (see <code>with-mapped-buffer</code>) then
+this procedure will return <code>#f</code>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-with_002dmapped_002dbuffer"></a>Syntax: <strong>with-mapped-buffer</strong> <em>buffer body &hellip;</em></dt>
+<dd><p>Evaluate <var>body</var> in the context of <var>buffer</var> having its data
+synced from GPU memory to RAM. In this context, <code>buffer-data</code>
+will return a bytevector of all the data stored in <var>buffer</var>. When
+program execution exits this form, the data (including any
+modifications) is synced back to the GPU.
+</p>
+<p>This form is useful for streaming buffers that need to update their
+contents dynamically, such as a sprite batch.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-make_002dbuffer_002dview"></a>Procedure: <strong>make-buffer-view</strong> <em>#:buffer #:type #:component-type #:length [#:offset <code>0</code>] [#:divisor <code>1</code>] [#:name <code>&quot;anonymous&quot;</code>]</em></dt>
+<dd>
+<p>Return a new buffer view for <var>buffer</var> starting at byte index
+<var>offset</var> of <var>length</var> elements, where each element is of
+<var>type</var> and composed of <var>component-type</var> values.
+</p>
+<p>Valid values for <var>type</var> are:
+</p>
+<ul>
+<li> <code>scalar</code>
+single number
+
+</li><li> <code>vec2</code>
+2D vector
+
+</li><li> <code>vec3</code>
+3D vector
+
+</li><li> <code>vec4</code>
+4D vector
+
+</li><li> <code>mat2</code>
+2x2 matrix
+
+</li><li> <code>mat3</code>
+3x3 matrix
+
+</li><li> <code>mat4</code>
+4x4 matrix
+</li></ul>
+
+<p>Valid values for <var>component-type</var> are:
+</p>
+<ul>
+<li> <code>byte</code>
+</li><li> <code>unsigned-byte</code>
+</li><li> <code>short</code>
+</li><li> <code>unsigned-short</code>
+</li><li> <code>int</code>
+</li><li> <code>unsigned-int</code>
+</li><li> <code>float</code>
+</li><li> <code>double</code>
+
+</li></ul>
+
+<p><var>divisor</var> is only needed for instanced rendering applications (see
+<code>gpu-apply/instanced</code> in <a href="Rendering-Engine.html#Rendering-Engine">Rendering Engine</a>) and represents
+how many instances each vertex element applies to. A divisor of 0
+means that a single element is used for every instance and is used for
+the data being instanced. A divisor of 1 means that each element is
+used for 1 instance. A divisor of 2 means that each element is used
+for 2 instances, and so on.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-buffer_002dview_003f"></a>Procedure: <strong>buffer-view?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a buffer view.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-buffer_002dview_002d_003ebuffer"></a>Procedure: <strong>buffer-view-&gt;buffer</strong> <em>buffer-view</em></dt>
+<dd><p>Return the buffer that <var>buffer-view</var> is using.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-buffer_002dview_002dname"></a>Procedure: <strong>buffer-view-name</strong> <em>buffer-view</em></dt>
+<dd><p>Return the name of <var>buffer-view</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-buffer_002dview_002doffset"></a>Procedure: <strong>buffer-view-offset</strong> <em>buffer-view</em></dt>
+<dd><p>Return the byte offset of <var>buffer-view</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-buffer_002dview_002dtype"></a>Procedure: <strong>buffer-view-type</strong> <em>buffer-view</em></dt>
+<dd><p>Return the data type of <var>buffer-view</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-buffer_002dview_002dcomponent_002dtype"></a>Procedure: <strong>buffer-view-component-type</strong> <em>buffer-view</em></dt>
+<dd><p>Return the component data type of <var>buffer-view</var>
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-buffer_002dview_002ddivisor"></a>Procedure: <strong>buffer-view-divisor</strong> <em>buffer-view</em></dt>
+<dd><p>Return the instance divisor for <var>buffer-view</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-with_002dmapped_002dbuffer_002dview"></a>Syntax: <strong>with-mapped-buffer-view</strong> <em>buffer-view body &hellip;</em></dt>
+<dd>
+<p>Evaluate <var>body</var> in the context of <var>buffer-view</var> having its
+data synced from GPU memory to RAM. See <code>with-mapped-buffer</code> for
+more information.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-make_002dvertex_002darray"></a>Procedure: <strong>make-vertex-array</strong> <em>#:indices #:attributes [#:mode <code>triangles</code>]</em></dt>
+<dd>
+<p>Return a new vertex array using the index data within the buffer view
+<var>indices</var> and the vertex attribute data within <var>attributes</var>.
+</p>
+<p><var>attributes</var> is an alist mapping shader attribute indices to typed
+buffers containing vertex data:
+</p>
+<div class="example">
+<pre class="example">`((1 . ,buffer-view-a)
+ (2 . ,buffer-view-b)
+ &hellip;)
+</pre></div>
+
+<p>By default, the vertex array is interpreted as containing a series of
+triangles. If another primtive type is desired, the <var>mode</var>
+keyword argument may be overridden. The following values are
+supported:
+</p>
+<ul>
+<li> <code>points</code>
+</li><li> <code>lines</code>
+</li><li> <code>line-loop</code>
+</li><li> <code>line-strip</code>
+</li><li> <code>triangles</code>
+</li><li> <code>triangle-strip</code>
+</li><li> <code>triangle-fan</code>
+</li></ul>
+
+</dd></dl>
+
+<dl>
+<dt><a name="index-null_002dvertex_002darray"></a>Variable: <strong>null-vertex-array</strong></dt>
+<dd><p>Represents the absence of a vertex array.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-vertex_002darray_003f"></a>Procedure: <strong>vertex-array?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a vertex array.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-vertex_002darray_002dindices"></a>Procedure: <strong>vertex-array-indices</strong> <em>vertex-array</em></dt>
+<dd><p>Return the buffer view containing index data for <var>vertex-array</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-vertex_002darray_002dattributes"></a>Procedure: <strong>vertex-array-attributes</strong> <em>vertex-array</em></dt>
+<dd><p>Return the attribute index -&gt; buffer view mapping of vertex attribute
+data for <var>vertex-array</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-vertex_002darray_002dmode"></a>Procedure: <strong>vertex-array-mode</strong> <em>vertex-array</em></dt>
+<dd><p>Return the primitive rendering mode for <var>vertex-array</var>.
+</p></dd></dl>
+
+<hr>
+<div class="header">
+<p>
+Next: <a href="Shaders.html#Shaders" accesskey="n" rel="next">Shaders</a>, Previous: <a href="Rendering-Engine.html#Rendering-Engine" accesskey="p" rel="prev">Rendering Engine</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+</div>
+
+
+
+</body>
+</html>
diff --git a/manuals/chickadee/Channels.html b/manuals/chickadee/Channels.html
index f313c4f..ece7ce5 100644
--- a/manuals/chickadee/Channels.html
+++ b/manuals/chickadee/Channels.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -123,22 +125,37 @@ someone on the other end of the line to complete the transaction.
</p></dd></dl>
<dl>
-<dt><a name="index-channel_003f"></a>Procedure: <strong>channel?</strong> <em><var>obj</var></em></dt>
+<dt><a name="index-channel_003f"></a>Procedure: <strong>channel?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> is a channel.
</p></dd></dl>
<dl>
-<dt><a name="index-channel_002dget-1"></a>Procedure: <strong>channel-get</strong> <em><var>channel</var></em></dt>
+<dt><a name="index-channel_002dget"></a>Procedure: <strong>channel-get</strong> <em>channel</em></dt>
<dd><p>Retrieve a value from <var>channel</var>. The current script suspends
until a value is available.
</p></dd></dl>
<dl>
-<dt><a name="index-channel_002dput"></a>Procedure: <strong>channel-put</strong> <em><var>channel</var> <var>data</var></em></dt>
+<dt><a name="index-channel_002dput"></a>Procedure: <strong>channel-put</strong> <em>channel data</em></dt>
<dd><p>Send <var>data</var> to <var>channel</var>. The current script suspends until
another script is available to retrieve the value.
</p></dd></dl>
+<p>A low-level API also exists for using channels outside of a script via
+callback procedures:
+</p>
+<dl>
+<dt><a name="index-channel_002dget_0021"></a>Procedure: <strong>channel-get!</strong> <em>channel proc</em></dt>
+<dd><p>Asynchronously retrieve a value from <var>channel</var> and call <var>proc</var>
+with that value.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-channel_002dput_0021"></a>Procedure: <strong>channel-put!</strong> <em>channel data [thunk]</em></dt>
+<dd><p>Asynchronously send <var>data</var> to <var>channel</var> and call <var>thunk</var>
+after it has been received.
+</p></dd></dl>
+
diff --git a/manuals/chickadee/Copying-This-Manual.html b/manuals/chickadee/Copying-This-Manual.html
index f9a7c77..d91e4bd 100644
--- a/manuals/chickadee/Copying-This-Manual.html
+++ b/manuals/chickadee/Copying-This-Manual.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
diff --git a/manuals/chickadee/Easings.html b/manuals/chickadee/Easings.html
index 55f385c..14207d0 100644
--- a/manuals/chickadee/Easings.html
+++ b/manuals/chickadee/Easings.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -96,72 +98,81 @@ Next: <a href="Bezier-Curves.html#Bezier-Curves" accesskey="n" rel="next">Bezier
<a name="Easings-1"></a>
<h4 class="subsection">2.2.7 Easings</h4>
+<p>Easing functions are essential for animation. Each easing function
+provides a different path to go from an initial value to a final
+value. These functions make an excellent companion to the
+<code>tween</code> procedure (see <a href="Tweening.html#Tweening">Tweening</a>). Experiment with them to
+figure out which function makes an animation look the best.
+</p>
+<p>Pro tip: <code>smoothstep</code> provides nice results most of the time and
+creates smoother animation than using <code>linear</code>.
+</p>
<dl>
-<dt><a name="index-linear"></a>Procedure: <strong>linear</strong> <em><var>t</var></em></dt>
+<dt><a name="index-linear"></a>Procedure: <strong>linear</strong> <em>t</em></dt>
</dl>
<dl>
-<dt><a name="index-smoothstep"></a>Procedure: <strong>smoothstep</strong> <em><var>t</var></em></dt>
+<dt><a name="index-smoothstep"></a>Procedure: <strong>smoothstep</strong> <em>t</em></dt>
</dl>
<dl>
-<dt><a name="index-ease_002din_002dquad"></a>Procedure: <strong>ease-in-quad</strong> <em><var>t</var></em></dt>
+<dt><a name="index-ease_002din_002dquad"></a>Procedure: <strong>ease-in-quad</strong> <em>t</em></dt>
</dl>
<dl>
-<dt><a name="index-ease_002dout_002dquad"></a>Procedure: <strong>ease-out-quad</strong> <em><var>t</var></em></dt>
+<dt><a name="index-ease_002dout_002dquad"></a>Procedure: <strong>ease-out-quad</strong> <em>t</em></dt>
</dl>
<dl>
-<dt><a name="index-ease_002din_002dout_002dquad"></a>Procedure: <strong>ease-in-out-quad</strong> <em><var>t</var></em></dt>
+<dt><a name="index-ease_002din_002dout_002dquad"></a>Procedure: <strong>ease-in-out-quad</strong> <em>t</em></dt>
</dl>
<dl>
-<dt><a name="index-ease_002din_002dcubic"></a>Procedure: <strong>ease-in-cubic</strong> <em><var>t</var></em></dt>
+<dt><a name="index-ease_002din_002dcubic"></a>Procedure: <strong>ease-in-cubic</strong> <em>t</em></dt>
</dl>
<dl>
-<dt><a name="index-ease_002dout_002dcubic"></a>Procedure: <strong>ease-out-cubic</strong> <em><var>t</var></em></dt>
+<dt><a name="index-ease_002dout_002dcubic"></a>Procedure: <strong>ease-out-cubic</strong> <em>t</em></dt>
</dl>
<dl>
-<dt><a name="index-ease_002din_002dout_002dcubic"></a>Procedure: <strong>ease-in-out-cubic</strong> <em><var>t</var></em></dt>
+<dt><a name="index-ease_002din_002dout_002dcubic"></a>Procedure: <strong>ease-in-out-cubic</strong> <em>t</em></dt>
</dl>
<dl>
-<dt><a name="index-ease_002din_002dquart"></a>Procedure: <strong>ease-in-quart</strong> <em><var>t</var></em></dt>
+<dt><a name="index-ease_002din_002dquart"></a>Procedure: <strong>ease-in-quart</strong> <em>t</em></dt>
</dl>
<dl>
-<dt><a name="index-ease_002dout_002dquart"></a>Procedure: <strong>ease-out-quart</strong> <em><var>t</var></em></dt>
+<dt><a name="index-ease_002dout_002dquart"></a>Procedure: <strong>ease-out-quart</strong> <em>t</em></dt>
</dl>
<dl>
-<dt><a name="index-ease_002din_002dout_002dquart"></a>Procedure: <strong>ease-in-out-quart</strong> <em><var>t</var></em></dt>
+<dt><a name="index-ease_002din_002dout_002dquart"></a>Procedure: <strong>ease-in-out-quart</strong> <em>t</em></dt>
</dl>
<dl>
-<dt><a name="index-ease_002din_002dquint"></a>Procedure: <strong>ease-in-quint</strong> <em><var>t</var></em></dt>
+<dt><a name="index-ease_002din_002dquint"></a>Procedure: <strong>ease-in-quint</strong> <em>t</em></dt>
</dl>
<dl>
-<dt><a name="index-ease_002dout_002dquint"></a>Procedure: <strong>ease-out-quint</strong> <em><var>t</var></em></dt>
+<dt><a name="index-ease_002dout_002dquint"></a>Procedure: <strong>ease-out-quint</strong> <em>t</em></dt>
</dl>
<dl>
-<dt><a name="index-ease_002din_002dout_002dquint"></a>Procedure: <strong>ease-in-out-quint</strong> <em><var>t</var></em></dt>
+<dt><a name="index-ease_002din_002dout_002dquint"></a>Procedure: <strong>ease-in-out-quint</strong> <em>t</em></dt>
</dl>
<dl>
-<dt><a name="index-ease_002din_002dsine"></a>Procedure: <strong>ease-in-sine</strong> <em><var>t</var></em></dt>
+<dt><a name="index-ease_002din_002dsine"></a>Procedure: <strong>ease-in-sine</strong> <em>t</em></dt>
</dl>
<dl>
-<dt><a name="index-ease_002dout_002dsine"></a>Procedure: <strong>ease-out-sine</strong> <em><var>t</var></em></dt>
+<dt><a name="index-ease_002dout_002dsine"></a>Procedure: <strong>ease-out-sine</strong> <em>t</em></dt>
</dl>
<dl>
-<dt><a name="index-ease_002din_002dout_002dsine"></a>Procedure: <strong>ease-in-out-sine</strong> <em><var>t</var></em></dt>
+<dt><a name="index-ease_002din_002dout_002dsine"></a>Procedure: <strong>ease-in-out-sine</strong> <em>t</em></dt>
</dl>
diff --git a/manuals/chickadee/Fonts.html b/manuals/chickadee/Fonts.html
index a4ed5c6..d65d67c 100644
--- a/manuals/chickadee/Fonts.html
+++ b/manuals/chickadee/Fonts.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -30,7 +32,7 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="Index.html#Index" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Graphics.html#Graphics" rel="up" title="Graphics">
-<link href="Blending-and-Depth-Testing.html#Blending-and-Depth-Testing" rel="next" title="Blending and Depth Testing">
+<link href="Particles.html#Particles" rel="next" title="Particles">
<link href="Lines-and-Shapes.html#Lines-and-Shapes" rel="prev" title="Lines and Shapes">
<style type="text/css">
<!--
@@ -90,91 +92,70 @@ ul.no-bullet {list-style: none}
<a name="Fonts"></a>
<div class="header">
<p>
-Next: <a href="Blending-and-Depth-Testing.html#Blending-and-Depth-Testing" accesskey="n" rel="next">Blending and Depth Testing</a>, Previous: <a href="Lines-and-Shapes.html#Lines-and-Shapes" accesskey="p" rel="prev">Lines and Shapes</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Particles.html#Particles" accesskey="n" rel="next">Particles</a>, Previous: <a href="Lines-and-Shapes.html#Lines-and-Shapes" accesskey="p" rel="prev">Lines and Shapes</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Fonts-1"></a>
-<h4 class="subsection">2.3.6 Fonts</h4>
-
-<p>Unlike the traditional TrueType font format that many are accustomed
-to, Chickadee loads and renders bitmap fonts in the
-<a href="http://www.angelcode.com/products/bmfont/doc/file_format.html">Angel Code format</a>. But why use this seemingly obscure format? It&rsquo;s
-easy to find TTFs but not easy to find FNTs (the canonical file
-extension used for Angel Code fonts) and bitmap fonts don&rsquo;t scale
-well. The reason is efficiency.
-</p>
-<p>If all of the glyphs of a font are pre-rendered and packed into an
-image file then it becomes possible to use a texture atlas
-(see <a href="Textures.html#Textures">Textures</a>) and a sprite batch (see <a href="Sprites.html#Sprites">Sprites</a>) when
-rendering, which is a more efficient way to render fonts than using,
-say, <a href="https://www.libsdl.org/projects/SDL_ttf/">SDL_ttf</a> or other
-solutions that involve using the FreeType library directly.
-</p>
-<p>Now what about scaling? In libraries that use TTF fonts, one must
-choose the size that the glyphs will be rasterized at up front. To
-use <code>n</code> sizes of the same font, one must load <code>n</code> variants
-of that font. If the size of the text is dynamic, some kind of
-texture scaling algorithm must be used and the text will inevitably
-look blurry. At first glance, using bitmap fonts seem to have an even
-worse issue. Instead of just loading the same font <code>n</code> times at
-different sizes, one would need to generate <code>n</code> image files for
-each font size needed. This is where the &ldquo;signed distance field&rdquo;
-rendering technique comes in. Introduced by
-<a href="http://www.valvesoftware.com/.../2007/SIGGRAPH2007_AlphaTestedMagnification.pdf">Valve</a> in 2007, signed distance field fonts can be efficiently stored
-in a bitmap and be rendered at arbitrary scale factors with good
-results.
+<h4 class="subsection">2.3.5 Fonts</h4>
+
+<p>Printing text to the screen is quite easy:
</p>
-<p>While Chickadee does not yet offer a tool for converting TTF fonts
-into FNT fonts, tools such as
-<a href="https://github.com/libgdx/libgdx/wiki/Hiero">Hiero</a> may be used
-in the meantime.
+<div class="example">
+<pre class="example">(draw-text &quot;Hello, world&quot; (vec2 100.0 100.0))
+</pre></div>
+
+<p>Chickadee loads and renders bitmap fonts in the
+<a href="http://www.angelcode.com/products/bmfont/doc/file_format.html">Angel Code format</a>. A default font named &ldquo;Good Neighbors&rdquo; is
+built-in to Chickadee and is used for all text rendering operations
+where a font is not specified, as is the case in the above example.
</p>
<p>The following procedures can be found in the <code>(chickadee render
-font)</code> module.
+font)</code> module:
</p>
<dl>
-<dt><a name="index-load_002dfont"></a>Procedure: <strong>load-font</strong> <em><var>file</var></em></dt>
-<dd><p>Load the Angel Code formatted XML document in <var>file</var> and return a
-new font object.
+<dt><a name="index-load_002dfont"></a>Procedure: <strong>load-font</strong> <em>file</em></dt>
+<dd><p>Load the Angel Code font (in either XML or FNT format) in <var>file</var>
+and return a new font object.
</p></dd></dl>
<dl>
-<dt><a name="index-font_003f"></a>Procedure: <strong>font?</strong> <em><var>obj</var></em></dt>
+<dt><a name="index-font_003f"></a>Procedure: <strong>font?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> is a font object.
</p></dd></dl>
<dl>
-<dt><a name="index-font_002dface"></a>Procedure: <strong>font-face</strong> <em><var>font</var></em></dt>
+<dt><a name="index-font_002dface"></a>Procedure: <strong>font-face</strong> <em>font</em></dt>
<dd><p>Return the name of <var>font</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-font_002dline_002dheight"></a>Procedure: <strong>font-line-height</strong> <em><var>font</var></em></dt>
+<dt><a name="index-font_002dline_002dheight"></a>Procedure: <strong>font-line-height</strong> <em>font</em></dt>
<dd><p>Return the line height of <var>font</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-font_002dline_002dheight-1"></a>Procedure: <strong>font-line-height</strong> <em><var>font</var></em></dt>
+<dt><a name="index-font_002dline_002dheight-1"></a>Procedure: <strong>font-line-height</strong> <em>font</em></dt>
<dd><p>Return the line height of <var>font</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-font_002dbold_003f"></a>Procedure: <strong>font-bold?</strong> <em><var>font</var></em></dt>
+<dt><a name="index-font_002dbold_003f"></a>Procedure: <strong>font-bold?</strong> <em>font</em></dt>
<dd><p>Return <code>#t</code> if <var>font</var> is a bold font.
</p></dd></dl>
<dl>
-<dt><a name="index-font_002ditalic_003f"></a>Procedure: <strong>font-italic?</strong> <em><var>font</var></em></dt>
+<dt><a name="index-font_002ditalic_003f"></a>Procedure: <strong>font-italic?</strong> <em>font</em></dt>
<dd><p>Return <code>#t</code> if <var>font</var> is an italicized font.
</p></dd></dl>
<dl>
-<dt><a name="index-draw_002dtext"></a>Procedure: <strong>draw-text</strong> <em><var>font</var> <var>text</var> <var>position</var></em></dt>
-<dd><p>[#:origin] [#:scale] [#:rotation] [#:blend-mode]
+<dt><a name="index-draw_002dtext"></a>Procedure: <strong>draw-text</strong> <em>text position</em></dt>
+<dd><p>[#:font] [#:origin] [#:scale] [#:rotation] [#:blend-mode]
[#:start 0] [#:end <code>(string-length text)</code>]
</p>
<p>Draw the string <var>text</var> with the first character starting at
-<var>position</var> using <var>font</var>.
+<var>position</var> using <var>font</var>. If <var>font</var> is not specified, a
+built-in font is used.
</p>
<div class="example">
<pre class="example">(draw-text font &quot;Hello, world!&quot; (vec2 128.0 128.0))
@@ -187,11 +168,6 @@ arguments.
the other arguments.
</p></dd></dl>
-<hr>
-<div class="header">
-<p>
-Next: <a href="Blending-and-Depth-Testing.html#Blending-and-Depth-Testing" accesskey="n" rel="next">Blending and Depth Testing</a>, Previous: <a href="Lines-and-Shapes.html#Lines-and-Shapes" accesskey="p" rel="prev">Lines and Shapes</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
-</div>
diff --git a/manuals/chickadee/Framebuffers.html b/manuals/chickadee/Framebuffers.html
index d7bedc4..8eb50ce 100644
--- a/manuals/chickadee/Framebuffers.html
+++ b/manuals/chickadee/Framebuffers.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -31,7 +33,7 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Graphics.html#Graphics" rel="up" title="Graphics">
<link href="Viewports.html#Viewports" rel="next" title="Viewports">
-<link href="Shaders.html#Shaders" rel="prev" title="Shaders">
+<link href="Blending.html#Blending" rel="prev" title="Blending">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
@@ -90,11 +92,11 @@ ul.no-bullet {list-style: none}
<a name="Framebuffers"></a>
<div class="header">
<p>
-Next: <a href="Viewports.html#Viewports" accesskey="n" rel="next">Viewports</a>, Previous: <a href="Shaders.html#Shaders" accesskey="p" rel="prev">Shaders</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Viewports.html#Viewports" accesskey="n" rel="next">Viewports</a>, Previous: <a href="Blending.html#Blending" accesskey="p" rel="prev">Blending</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Framebuffers-1"></a>
-<h4 class="subsection">2.3.10 Framebuffers</h4>
+<h4 class="subsection">2.3.8 Framebuffers</h4>
<p>A framebuffer is a chunk of memory that the GPU can render things
onto. By default, the framebuffer that is used for rendering is the
@@ -107,7 +109,7 @@ post-processing shader could do any number of things: scaling,
antialiasing, motion blur, etc.
</p>
<dl>
-<dt><a name="index-make_002dframebuffer"></a>Procedure: <strong>make-framebuffer</strong> <em><var>width</var> <var>height</var> [#:min-filter 'linear] [#:mag-filter 'linear] [#:wrap-s 'repeat] [#:wrap-t 'repeat]</em></dt>
+<dt><a name="index-make_002dframebuffer"></a>Procedure: <strong>make-framebuffer</strong> <em>width height [#:min-filter <code>linear</code>] [#:mag-filter <code>linear</code>] [#:wrap-s <code>repeat</code>] [#:wrap-t <code>repeat</code>]</em></dt>
<dd>
<p>Create a new framebuffer that is <var>width</var> pixels wide and <var>height</var> pixels high.
</p>
@@ -119,17 +121,17 @@ the best choice for pixel art games.
</p></dd></dl>
<dl>
-<dt><a name="index-framebuffer_003f"></a>Procedure: <strong>framebuffer?</strong> <em><var>obj</var></em></dt>
+<dt><a name="index-framebuffer_003f"></a>Procedure: <strong>framebuffer?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> is a framebuffer.
</p></dd></dl>
<dl>
-<dt><a name="index-framebuffer_002dtexture"></a>Procedure: <strong>framebuffer-texture</strong> <em><var>fb</var></em></dt>
+<dt><a name="index-framebuffer_002dtexture"></a>Procedure: <strong>framebuffer-texture</strong> <em>fb</em></dt>
<dd><p>Return the texture backing the framebuffer <var>fb</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-framebuffer_002dviewport"></a>Procedure: <strong>framebuffer-viewport</strong> <em><var>fb</var></em></dt>
+<dt><a name="index-framebuffer_002dviewport"></a>Procedure: <strong>framebuffer-viewport</strong> <em>fb</em></dt>
<dd><p>Return the default viewport (see <a href="Viewports.html#Viewports">Viewports</a>) used by the
framebuffer <var>fb</var>.
</p></dd></dl>
diff --git a/manuals/chickadee/GNU-Free-Documentation-License.html b/manuals/chickadee/GNU-Free-Documentation-License.html
index 3c9e2c5..f6ee6a6 100644
--- a/manuals/chickadee/GNU-Free-Documentation-License.html
+++ b/manuals/chickadee/GNU-Free-Documentation-License.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
diff --git a/manuals/chickadee/Graphics.html b/manuals/chickadee/Graphics.html
index f10cc89..86f8f68 100644
--- a/manuals/chickadee/Graphics.html
+++ b/manuals/chickadee/Graphics.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -30,7 +32,7 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="Index.html#Index" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="API-Reference.html#API-Reference" rel="up" title="API Reference">
-<link href="Rendering-Engine.html#Rendering-Engine" rel="next" title="Rendering Engine">
+<link href="Textures.html#Textures" rel="next" title="Textures">
<link href="Path-Finding.html#Path-Finding" rel="prev" title="Path Finding">
<style type="text/css">
<!--
@@ -106,27 +108,29 @@ tasks like rendering a sprite while also providing all of the building
blocks to implement additional rendering techniques.
</p>
<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="Rendering-Engine.html#Rendering-Engine" accesskey="1">Rendering Engine</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Rendering state management.
+<tr><td align="left" valign="top">&bull; <a href="Textures.html#Textures" accesskey="1">Textures</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">2D images.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="Sprites.html#Sprites" accesskey="2">Sprites</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Draw 2D images.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Textures.html#Textures" accesskey="2">Textures</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">2D images.
+<tr><td align="left" valign="top">&bull; <a href="Tile-Maps.html#Tile-Maps" accesskey="3">Tile Maps</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Draw 2D tile maps.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Sprites.html#Sprites" accesskey="3">Sprites</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Draw 2D images.
+<tr><td align="left" valign="top">&bull; <a href="Lines-and-Shapes.html#Lines-and-Shapes" accesskey="4">Lines and Shapes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Draw line segments and polygons.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Tile-Maps.html#Tile-Maps" accesskey="4">Tile Maps</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Draw 2D tile maps.
+<tr><td align="left" valign="top">&bull; <a href="Fonts.html#Fonts" accesskey="5">Fonts</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Drawing text.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Lines-and-Shapes.html#Lines-and-Shapes" accesskey="5">Lines and Shapes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Draw line segments and polygons.
+<tr><td align="left" valign="top">&bull; <a href="Particles.html#Particles" accesskey="6">Particles</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Pretty little flying pieces!
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Fonts.html#Fonts" accesskey="6">Fonts</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Drawing text.
+<tr><td align="left" valign="top">&bull; <a href="Blending.html#Blending" accesskey="7">Blending</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Control how pixels are combined.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Blending-and-Depth-Testing.html#Blending-and-Depth-Testing" accesskey="7">Blending and Depth Testing</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Control how pixels are combined.
+<tr><td align="left" valign="top">&bull; <a href="Framebuffers.html#Framebuffers" accesskey="8">Framebuffers</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Render to texture.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Vertex-Arrays.html#Vertex-Arrays" accesskey="8">Vertex Arrays</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Create 2D/3D models.
+<tr><td align="left" valign="top">&bull; <a href="Viewports.html#Viewports" accesskey="9">Viewports</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Restrict rendering to a particular area.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Shaders.html#Shaders" accesskey="9">Shaders</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Create custom GPU programs.
+<tr><td align="left" valign="top">&bull; <a href="Rendering-Engine.html#Rendering-Engine">Rendering Engine</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Rendering state management.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Framebuffers.html#Framebuffers">Framebuffers</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Render to texture.
+<tr><td align="left" valign="top">&bull; <a href="Buffers.html#Buffers">Buffers</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Send data to the GPU.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Viewports.html#Viewports">Viewports</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Restrict rendering to
+<tr><td align="left" valign="top">&bull; <a href="Shaders.html#Shaders">Shaders</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Create custom GPU programs.
</td></tr>
</table>
diff --git a/manuals/chickadee/Grid.html b/manuals/chickadee/Grid.html
index f6e1cbf..1b578ac 100644
--- a/manuals/chickadee/Grid.html
+++ b/manuals/chickadee/Grid.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -130,42 +132,42 @@ this filtering technique, a game can resolve collisions between
different objects in different ways.
</p>
<dl>
-<dt><a name="index-make_002dgrid"></a>Procedure: <strong>make-grid</strong> <em>[<var>cell-size</var> 64]</em></dt>
+<dt><a name="index-make_002dgrid"></a>Procedure: <strong>make-grid</strong> <em>[cell-size 64]</em></dt>
<dd><p>Return a new grid partitioned into <var>cell-size</var> tiles.
</p></dd></dl>
<dl>
-<dt><a name="index-grid_003f"></a>Procedure: <strong>grid?</strong> <em><var>obj</var></em></dt>
+<dt><a name="index-grid_003f"></a>Procedure: <strong>grid?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> is a grid.
</p></dd></dl>
<dl>
-<dt><a name="index-cell_003f"></a>Procedure: <strong>cell?</strong> <em><var>obj</var></em></dt>
+<dt><a name="index-cell_003f"></a>Procedure: <strong>cell?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> is a grid cell.
</p></dd></dl>
<dl>
-<dt><a name="index-cell_002dcount"></a>Procedure: <strong>cell-count</strong> <em><var>cell</var></em></dt>
+<dt><a name="index-cell_002dcount"></a>Procedure: <strong>cell-count</strong> <em>cell</em></dt>
<dd><p>Return the number of items in <var>cell</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-grid_002dcell_002dsize"></a>Procedure: <strong>grid-cell-size</strong> <em><var>grid</var></em></dt>
+<dt><a name="index-grid_002dcell_002dsize"></a>Procedure: <strong>grid-cell-size</strong> <em>grid</em></dt>
<dd><p>Return the cell size of <var>grid</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-grid_002dcell_002dcount"></a>Procedure: <strong>grid-cell-count</strong> <em><var>grid</var></em></dt>
+<dt><a name="index-grid_002dcell_002dcount"></a>Procedure: <strong>grid-cell-count</strong> <em>grid</em></dt>
<dd><p>Return the number of cells currently in <var>grid</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-grid_002ditem_002dcount"></a>Procedure: <strong>grid-item-count</strong> <em><var>grid</var></em></dt>
+<dt><a name="index-grid_002ditem_002dcount"></a>Procedure: <strong>grid-item-count</strong> <em>grid</em></dt>
<dd><p>Return the number of items in <var>grid</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-grid_002dadd"></a>Procedure: <strong>grid-add</strong> <em><var>grid</var> <var>item</var> <var>x</var> <var>y</var> <var>width</var> <var>height</var></em></dt>
+<dt><a name="index-grid_002dadd"></a>Procedure: <strong>grid-add</strong> <em>grid item x y width height</em></dt>
<dd>
<p>Add <var>item</var> to <var>grid</var> represented by the axis-aligned bounding
box whose lower-left corner is at (<var>x</var>, <var>y</var>) and is
@@ -173,17 +175,17 @@ box whose lower-left corner is at (<var>x</var>, <var>y</var>) and is
</p></dd></dl>
<dl>
-<dt><a name="index-grid_002dremove"></a>Procedure: <strong>grid-remove</strong> <em><var>grid</var> <var>item</var></em></dt>
+<dt><a name="index-grid_002dremove"></a>Procedure: <strong>grid-remove</strong> <em>grid item</em></dt>
<dd><p>Return <var>item</var> from <var>grid</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-grid_002dclear"></a>Procedure: <strong>grid-clear</strong> <em><var>grid</var></em></dt>
+<dt><a name="index-grid_002dclear"></a>Procedure: <strong>grid-clear</strong> <em>grid</em></dt>
<dd><p>Remove all items from <var>grid</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-grid_002dmove"></a>Procedure: <strong>grid-move</strong> <em><var>grid</var> <var>item</var> <var>position</var> <var>filter</var></em></dt>
+<dt><a name="index-grid_002dmove"></a>Procedure: <strong>grid-move</strong> <em>grid item position filter</em></dt>
<dd><p>Attempt to move <var>item</var> in <var>grid</var> to <var>position</var> (a 2D
vector) and check for collisions. For each collision, <var>filter</var>
will be called with two arguments: <var>item</var> and the item it collided
@@ -192,18 +194,18 @@ resolve the colliding objects.
</p></dd></dl>
<dl>
-<dt><a name="index-for_002deach_002dcell"></a>Procedure: <strong>for-each-cell</strong> <em><var>proc</var> <var>grid</var> [<var>rect</var>]</em></dt>
+<dt><a name="index-for_002deach_002dcell"></a>Procedure: <strong>for-each-cell</strong> <em>proc grid [rect]</em></dt>
<dd><p>Call <var>proc</var> with each cell in <var>grid</var> that intersects
<var>rect</var>, or every cell if <var>rect</var> is <code>#f</code>.
</p></dd></dl>
<dl>
-<dt><a name="index-for_002deach_002ditem"></a>Procedure: <strong>for-each-item</strong> <em><var>proc</var> <var>grid</var></em></dt>
+<dt><a name="index-for_002deach_002ditem"></a>Procedure: <strong>for-each-item</strong> <em>proc grid</em></dt>
<dd><p>Call <var>proc</var> for each item in <var>grid</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-slide"></a>Procedure: <strong>slide</strong> <em><var>item</var> <var>item-rect</var> <var>other</var> <var>other-rect</var> <var>goal</var></em></dt>
+<dt><a name="index-slide"></a>Procedure: <strong>slide</strong> <em>item item-rect other other-rect goal</em></dt>
<dd>
<p>Resolve the collision that occurs between <var>item</var> and <var>other</var>
when moving <var>item-rect</var> to <var>goal</var> by sliding <var>item-rect</var>
diff --git a/manuals/chickadee/Index.html b/manuals/chickadee/Index.html
index b5168e5..b11086b 100644
--- a/manuals/chickadee/Index.html
+++ b/manuals/chickadee/Index.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -109,6 +111,8 @@ Previous: <a href="Copying-This-Manual.html#Copying-This-Manual" accesskey="p" r
&nbsp;
<a class="summary-letter" href="#Index_fn_letter-G"><b>G</b></a>
&nbsp;
+<a class="summary-letter" href="#Index_fn_letter-I"><b>I</b></a>
+ &nbsp;
<a class="summary-letter" href="#Index_fn_letter-L"><b>L</b></a>
&nbsp;
<a class="summary-letter" href="#Index_fn_letter-M"><b>M</b></a>
@@ -142,10 +146,18 @@ Previous: <a href="Copying-This-Manual.html#Copying-This-Manual" accesskey="p" r
<tr><th><a name="Index_fn_letter-A">A</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="Path-Finding.html#index-a_002a"><code>a*</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Path-Finding.html#Path-Finding">Path Finding</a></td></tr>
<tr><td></td><td valign="top"><a href="Kernel.html#index-abort_002dgame"><code>abort-game</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Kernel.html#Kernel">Kernel</a></td></tr>
+<tr><td></td><td valign="top"><a href="Particles.html#index-add_002dparticle_002demitter"><code>add-particle-emitter</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Particles.html#Particles">Particles</a></td></tr>
<tr><td></td><td valign="top"><a href="Agendas.html#index-after"><code>after</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Agendas.html#Agendas">Agendas</a></td></tr>
<tr><td></td><td valign="top"><a href="Agendas.html#index-agenda_002dtime"><code>agenda-time</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Agendas.html#Agendas">Agendas</a></td></tr>
<tr><td></td><td valign="top"><a href="Agendas.html#index-agenda_003f"><code>agenda?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Agendas.html#Agendas">Agendas</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-animation_002dframe_002dduration"><code>animation-frame-duration</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-animation_002dframe_002dtile"><code>animation-frame-tile</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-animation_002dframe_003f"><code>animation-frame?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
<tr><td></td><td valign="top"><a href="Agendas.html#index-at"><code>at</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Agendas.html#Agendas">Agendas</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-attribute_002dlocation"><code>attribute-location</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html#Shaders">Shaders</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-attribute_002dname"><code>attribute-name</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html#Shaders">Shaders</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-attribute_002dtype"><code>attribute-type</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html#Shaders">Shaders</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-attribute_003f"><code>attribute?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html#Shaders">Shaders</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Index_fn_letter-B">B</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="Bezier-Curves.html#index-bezier_002dcurve_002dp0"><code>bezier-curve-p0</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Bezier-Curves.html#Bezier-Curves">Bezier Curves</a></td></tr>
@@ -156,14 +168,29 @@ Previous: <a href="Copying-This-Manual.html#Copying-This-Manual" accesskey="p" r
<tr><td></td><td valign="top"><a href="Bezier-Curves.html#index-bezier_002dcurve_002dpoint_002dat_0021"><code>bezier-curve-point-at!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Bezier-Curves.html#Bezier-Curves">Bezier Curves</a></td></tr>
<tr><td></td><td valign="top"><a href="Bezier-Curves.html#index-bezier_002dcurve_003f"><code>bezier-curve?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Bezier-Curves.html#Bezier-Curves">Bezier Curves</a></td></tr>
<tr><td></td><td valign="top"><a href="Bezier-Curves.html#index-bezier_002dpath"><code>bezier-path</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Bezier-Curves.html#Bezier-Curves">Bezier Curves</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-buffer_002ddata"><code>buffer-data</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-buffer_002dlength"><code>buffer-length</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-buffer_002dname"><code>buffer-name</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-buffer_002dstride"><code>buffer-stride</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-buffer_002dtarget"><code>buffer-target</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-buffer_002dusage"><code>buffer-usage</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-buffer_002dview_002d_003ebuffer"><code>buffer-view-&gt;buffer</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-buffer_002dview_002dcomponent_002dtype"><code>buffer-view-component-type</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-buffer_002dview_002ddivisor"><code>buffer-view-divisor</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-buffer_002dview_002dname"><code>buffer-view-name</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-buffer_002dview_002doffset"><code>buffer-view-offset</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-buffer_002dview_002dtype"><code>buffer-view-type</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-buffer_002dview_003f"><code>buffer-view?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-buffer_003f"><code>buffer?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Index_fn_letter-C">C</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="Scripts.html#index-cancel_002dscript"><code>cancel-script</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Scripts.html#Scripts">Scripts</a></td></tr>
<tr><td></td><td valign="top"><a href="Grid.html#index-cell_002dcount"><code>cell-count</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grid.html#Grid">Grid</a></td></tr>
<tr><td></td><td valign="top"><a href="Grid.html#index-cell_003f"><code>cell?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grid.html#Grid">Grid</a></td></tr>
-<tr><td></td><td valign="top"><a href="Scripts.html#index-channel_002dget"><code>channel-get</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Scripts.html#Scripts">Scripts</a></td></tr>
-<tr><td></td><td valign="top"><a href="Channels.html#index-channel_002dget-1"><code>channel-get</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Channels.html#Channels">Channels</a></td></tr>
+<tr><td></td><td valign="top"><a href="Channels.html#index-channel_002dget"><code>channel-get</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Channels.html#Channels">Channels</a></td></tr>
+<tr><td></td><td valign="top"><a href="Channels.html#index-channel_002dget_0021"><code>channel-get!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Channels.html#Channels">Channels</a></td></tr>
<tr><td></td><td valign="top"><a href="Channels.html#index-channel_002dput"><code>channel-put</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Channels.html#Channels">Channels</a></td></tr>
+<tr><td></td><td valign="top"><a href="Channels.html#index-channel_002dput_0021"><code>channel-put!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Channels.html#Channels">Channels</a></td></tr>
<tr><td></td><td valign="top"><a href="Channels.html#index-channel_003f"><code>channel?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Channels.html#Channels">Channels</a></td></tr>
<tr><td></td><td valign="top"><a href="Basics.html#index-cotan"><code>cotan</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Basics.html#Basics">Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="Agendas.html#index-current_002dagenda"><code>current-agenda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Agendas.html#Agendas">Agendas</a></td></tr>
@@ -180,7 +207,10 @@ Previous: <a href="Copying-This-Manual.html#Copying-This-Manual" accesskey="p" r
<tr><td></td><td valign="top"><a href="Lines-and-Shapes.html#index-draw_002dbezier_002dpath"><code>draw-bezier-path</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lines-and-Shapes.html#Lines-and-Shapes">Lines and Shapes</a></td></tr>
<tr><td></td><td valign="top"><a href="Lines-and-Shapes.html#index-draw_002dline"><code>draw-line</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lines-and-Shapes.html#Lines-and-Shapes">Lines and Shapes</a></td></tr>
<tr><td></td><td valign="top"><a href="Sprites.html#index-draw_002dnine_002dpatch"><code>draw-nine-patch</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Sprites.html#Sprites">Sprites</a></td></tr>
+<tr><td></td><td valign="top"><a href="Particles.html#index-draw_002dparticles"><code>draw-particles</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Particles.html#Particles">Particles</a></td></tr>
+<tr><td></td><td valign="top"><a href="Particles.html#index-draw_002dparticles_002a"><code>draw-particles*</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Particles.html#Particles">Particles</a></td></tr>
<tr><td></td><td valign="top"><a href="Sprites.html#index-draw_002dsprite"><code>draw-sprite</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Sprites.html#Sprites">Sprites</a></td></tr>
+<tr><td></td><td valign="top"><a href="Sprites.html#index-draw_002dsprite_002dbatch"><code>draw-sprite-batch</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Sprites.html#Sprites">Sprites</a></td></tr>
<tr><td></td><td valign="top"><a href="Fonts.html#index-draw_002dtext"><code>draw-text</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Fonts.html#Fonts">Fonts</a></td></tr>
<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-draw_002dtile_002dmap"><code>draw-tile-map</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
@@ -220,6 +250,8 @@ Previous: <a href="Copying-This-Manual.html#Copying-This-Manual" accesskey="p" r
<tr><th><a name="Index_fn_letter-G">G</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="Rendering-Engine.html#index-gpu_002dapply"><code>gpu-apply</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering-Engine.html#Rendering-Engine">Rendering Engine</a></td></tr>
<tr><td></td><td valign="top"><a href="Rendering-Engine.html#index-gpu_002dapply_002a"><code>gpu-apply*</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering-Engine.html#Rendering-Engine">Rendering Engine</a></td></tr>
+<tr><td></td><td valign="top"><a href="Rendering-Engine.html#index-gpu_002dapply_002finstanced"><code>gpu-apply/instanced</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering-Engine.html#Rendering-Engine">Rendering Engine</a></td></tr>
+<tr><td></td><td valign="top"><a href="Rendering-Engine.html#index-gpu_002dapply_002finstanced-1"><code>gpu-apply/instanced</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering-Engine.html#Rendering-Engine">Rendering Engine</a></td></tr>
<tr><td></td><td valign="top"><a href="Grid.html#index-grid_002dadd"><code>grid-add</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grid.html#Grid">Grid</a></td></tr>
<tr><td></td><td valign="top"><a href="Grid.html#index-grid_002dcell_002dcount"><code>grid-cell-count</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grid.html#Grid">Grid</a></td></tr>
<tr><td></td><td valign="top"><a href="Grid.html#index-grid_002dcell_002dsize"><code>grid-cell-size</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grid.html#Grid">Grid</a></td></tr>
@@ -229,15 +261,21 @@ Previous: <a href="Copying-This-Manual.html#Copying-This-Manual" accesskey="p" r
<tr><td></td><td valign="top"><a href="Grid.html#index-grid_002dremove"><code>grid-remove</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grid.html#Grid">Grid</a></td></tr>
<tr><td></td><td valign="top"><a href="Grid.html#index-grid_003f"><code>grid?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grid.html#Grid">Grid</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
+<tr><th><a name="Index_fn_letter-I">I</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-index_002dbuffer_003f"><code>index-buffer?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Index_fn_letter-L">L</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="Easings.html#index-linear"><code>linear</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Easings.html#Easings">Easings</a></td></tr>
<tr><td></td><td valign="top"><a href="Fonts.html#index-load_002dfont"><code>load-font</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Fonts.html#Fonts">Fonts</a></td></tr>
<tr><td></td><td valign="top"><a href="Textures.html#index-load_002dimage"><code>load-image</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html#Textures">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-load_002dshader"><code>load-shader</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html#Shaders">Shaders</a></td></tr>
<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-load_002dtile_002dmap"><code>load-tile-map</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Index_fn_letter-M">M</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="Agendas.html#index-make_002dagenda"><code>make-agenda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Agendas.html#Agendas">Agendas</a></td></tr>
<tr><td></td><td valign="top"><a href="Bezier-Curves.html#index-make_002dbezier_002dcurve"><code>make-bezier-curve</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Bezier-Curves.html#Bezier-Curves">Bezier Curves</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-make_002dbuffer"><code>make-buffer</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-make_002dbuffer_002dview"><code>make-buffer-view</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
<tr><td></td><td valign="top"><a href="Channels.html#index-make_002dchannel"><code>make-channel</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Channels.html#Channels">Channels</a></td></tr>
<tr><td></td><td valign="top"><a href="Framebuffers.html#index-make_002dframebuffer"><code>make-framebuffer</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Framebuffers.html#Framebuffers">Framebuffers</a></td></tr>
<tr><td></td><td valign="top"><a href="Grid.html#index-make_002dgrid"><code>make-grid</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grid.html#Grid">Grid</a></td></tr>
@@ -245,8 +283,20 @@ Previous: <a href="Copying-This-Manual.html#Copying-This-Manual" accesskey="p" r
<tr><td></td><td valign="top"><a href="Quaternions.html#index-make_002didentity_002dquaternion"><code>make-identity-quaternion</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quaternions.html#Quaternions">Quaternions</a></td></tr>
<tr><td></td><td valign="top"><a href="Matrices.html#index-make_002dmatrix4"><code>make-matrix4</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html#Matrices">Matrices</a></td></tr>
<tr><td></td><td valign="top"><a href="Matrices.html#index-make_002dnull_002dmatrix4"><code>make-null-matrix4</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html#Matrices">Matrices</a></td></tr>
+<tr><td></td><td valign="top"><a href="Particles.html#index-make_002dparticle_002demitter"><code>make-particle-emitter</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Particles.html#Particles">Particles</a></td></tr>
+<tr><td></td><td valign="top"><a href="Particles.html#index-make_002dparticles"><code>make-particles</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Particles.html#Particles">Particles</a></td></tr>
<tr><td></td><td valign="top"><a href="Path-Finding.html#index-make_002dpath_002dfinder"><code>make-path-finder</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Path-Finding.html#Path-Finding">Path Finding</a></td></tr>
<tr><td></td><td valign="top"><a href="Rectangles.html#index-make_002drect"><code>make-rect</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rectangles.html#Rectangles">Rectangles</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-make_002dshader"><code>make-shader</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html#Shaders">Shaders</a></td></tr>
+<tr><td></td><td valign="top"><a href="Sprites.html#index-make_002dsprite_002dbatch"><code>make-sprite-batch</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Sprites.html#Sprites">Sprites</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-make_002dvertex_002darray"><code>make-vertex-array</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Viewports.html#index-make_002dviewport"><code>make-viewport</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Viewports.html#Viewports">Viewports</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-map_002dobject_002did"><code>map-object-id</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-map_002dobject_002dname"><code>map-object-name</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-map_002dobject_002dproperties"><code>map-object-properties</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-map_002dobject_002dshape"><code>map-object-shape</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-map_002dobject_002dtype"><code>map-object-type</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-map_002dobject_003f"><code>map-object?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
<tr><td></td><td valign="top"><a href="Matrices.html#index-matrix4_002a"><code>matrix4*</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html#Matrices">Matrices</a></td></tr>
<tr><td></td><td valign="top"><a href="Matrices.html#index-matrix4_002d2d_002dtransform_0021"><code>matrix4-2d-transform!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html#Matrices">Matrices</a></td></tr>
<tr><td></td><td valign="top"><a href="Matrices.html#index-matrix4_002didentity_0021"><code>matrix4-identity!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html#Matrices">Matrices</a></td></tr>
@@ -262,16 +312,32 @@ Previous: <a href="Copying-This-Manual.html#Copying-This-Manual" accesskey="p" r
<tr><td></td><td valign="top"><a href="Matrices.html#index-matrix4_003f"><code>matrix4?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html#Matrices">Matrices</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Index_fn_letter-N">N</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-null_002dbuffer"><code>null-buffer</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
<tr><td></td><td valign="top"><a href="Framebuffers.html#index-null_002dframebuffer"><code>null-framebuffer</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Framebuffers.html#Framebuffers">Framebuffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-null_002dshader"><code>null-shader</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html#Shaders">Shaders</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-null_002dvertex_002darray"><code>null-vertex-array</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Index_fn_letter-O">O</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-object_002dlayer_002dname"><code>object-layer-name</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-object_002dlayer_002dobjects"><code>object-layer-objects</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-object_002dlayer_002dproperties"><code>object-layer-properties</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-object_002dlayer_003f"><code>object-layer?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
<tr><td></td><td valign="top"><a href="Matrices.html#index-orthographic_002dprojection"><code>orthographic-projection</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html#Matrices">Matrices</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Index_fn_letter-P">P</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="Particles.html#index-particle_002demitter_002ddone_003f"><code>particle-emitter-done?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Particles.html#Particles">Particles</a></td></tr>
+<tr><td></td><td valign="top"><a href="Particles.html#index-particle_002demitter_002dlife"><code>particle-emitter-life</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Particles.html#Particles">Particles</a></td></tr>
+<tr><td></td><td valign="top"><a href="Particles.html#index-particle_002demitter_002drate"><code>particle-emitter-rate</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Particles.html#Particles">Particles</a></td></tr>
+<tr><td></td><td valign="top"><a href="Particles.html#index-particle_002demitter_002dspawn_002darea"><code>particle-emitter-spawn-area</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Particles.html#Particles">Particles</a></td></tr>
+<tr><td></td><td valign="top"><a href="Particles.html#index-particle_002demitter_003f"><code>particle-emitter?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Particles.html#Particles">Particles</a></td></tr>
+<tr><td></td><td valign="top"><a href="Particles.html#index-particles_003f"><code>particles?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Particles.html#Particles">Particles</a></td></tr>
<tr><td></td><td valign="top"><a href="Path-Finding.html#index-path_002dfinder_003f"><code>path-finder?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Path-Finding.html#Path-Finding">Path Finding</a></td></tr>
<tr><td></td><td valign="top"><a href="Matrices.html#index-perspective_002dprojection"><code>perspective-projection</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html#Matrices">Matrices</a></td></tr>
<tr><td></td><td valign="top"><a href="Basics.html#index-pi"><code>pi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Basics.html#Basics">Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="Basics.html#index-pi_002f2"><code>pi/2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Basics.html#Basics">Basics</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-point_002d_003etile"><code>point-&gt;tile</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-polygon_002dpoints"><code>polygon-points</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-polygon_003f"><code>polygon?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Index_fn_letter-Q">Q</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="Quaternions.html#index-quaternion"><code>quaternion</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quaternions.html#Quaternions">Quaternions</a></td></tr>
@@ -282,6 +348,7 @@ Previous: <a href="Copying-This-Manual.html#Copying-This-Manual" accesskey="p" r
<tr><td></td><td valign="top"><a href="Quaternions.html#index-quaternion_003f"><code>quaternion?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quaternions.html#Quaternions">Quaternions</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Index_fn_letter-R">R</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="Rectangles.html#index-rect"><code>rect</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rectangles.html#Rectangles">Rectangles</a></td></tr>
<tr><td></td><td valign="top"><a href="Rectangles.html#index-rect_002darea"><code>rect-area</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rectangles.html#Rectangles">Rectangles</a></td></tr>
<tr><td></td><td valign="top"><a href="Rectangles.html#index-rect_002dbottom"><code>rect-bottom</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rectangles.html#Rectangles">Rectangles</a></td></tr>
<tr><td></td><td valign="top"><a href="Rectangles.html#index-rect_002dcenter_002dx"><code>rect-center-x</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rectangles.html#Rectangles">Rectangles</a></td></tr>
@@ -316,8 +383,9 @@ Previous: <a href="Copying-This-Manual.html#Copying-This-Manual" accesskey="p" r
<tr><td></td><td valign="top"><a href="Rectangles.html#index-rect_002dx"><code>rect-x</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rectangles.html#Rectangles">Rectangles</a></td></tr>
<tr><td></td><td valign="top"><a href="Rectangles.html#index-rect_002dy"><code>rect-y</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rectangles.html#Rectangles">Rectangles</a></td></tr>
<tr><td></td><td valign="top"><a href="Rectangles.html#index-rect_003f"><code>rect?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rectangles.html#Rectangles">Rectangles</a></td></tr>
+<tr><td></td><td valign="top"><a href="Particles.html#index-remove_002dparticle_002demitter"><code>remove-particle-emitter</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Particles.html#Particles">Particles</a></td></tr>
<tr><td></td><td valign="top"><a href="Kernel.html#index-run_002dgame"><code>run-game</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Kernel.html#Kernel">Kernel</a></td></tr>
-<tr><td></td><td valign="top"><a href="Kernel.html#index-run_002dgame_002fsdl"><code>run-game/sdl</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Kernel.html#Kernel">Kernel</a></td></tr>
+<tr><td></td><td valign="top"><a href="Kernel.html#index-run_002dgame-1"><code>run-game</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Kernel.html#Kernel">Kernel</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Index_fn_letter-S">S</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="Agendas.html#index-schedule_002dafter"><code>schedule-after</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Agendas.html#Agendas">Agendas</a></td></tr>
@@ -332,22 +400,81 @@ Previous: <a href="Copying-This-Manual.html#Copying-This-Manual" accesskey="p" r
<tr><td></td><td valign="top"><a href="Rectangles.html#index-set_002drect_002dwidth_0021"><code>set-rect-width!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rectangles.html#Rectangles">Rectangles</a></td></tr>
<tr><td></td><td valign="top"><a href="Rectangles.html#index-set_002drect_002dx_0021"><code>set-rect-x!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rectangles.html#Rectangles">Rectangles</a></td></tr>
<tr><td></td><td valign="top"><a href="Rectangles.html#index-set_002drect_002dy_0021"><code>set-rect-y!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rectangles.html#Rectangles">Rectangles</a></td></tr>
+<tr><td></td><td valign="top"><a href="Sprites.html#index-set_002dsprite_002dbatch_002dtexture_0021"><code>set-sprite-batch-texture!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Sprites.html#Sprites">Sprites</a></td></tr>
+<tr><td></td><td valign="top"><a href="Vectors.html#index-set_002dvec2_0021"><code>set-vec2!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-set_002dvec2_002dx_0021"><code>set-vec2-x!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-set_002dvec2_002dy_0021"><code>set-vec2-y!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html#Vectors">Vectors</a></td></tr>
+<tr><td></td><td valign="top"><a href="Vectors.html#index-set_002dvec3_0021"><code>set-vec3!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-set_002dvec3_002dx_0021"><code>set-vec3-x!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-set_002dvec3_002dy_0021"><code>set-vec3-y!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-set_002dvec3_002dz_0021"><code>set-vec3-z!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html#Vectors">Vectors</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-shader_002dattributes"><code>shader-attributes</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html#Shaders">Shaders</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-shader_002duniform"><code>shader-uniform</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html#Shaders">Shaders</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-shader_002duniforms"><code>shader-uniforms</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html#Shaders">Shaders</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-shader_003f"><code>shader?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html#Shaders">Shaders</a></td></tr>
<tr><td></td><td valign="top"><a href="Scripts.html#index-sleep"><code>sleep</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Scripts.html#Scripts">Scripts</a></td></tr>
<tr><td></td><td valign="top"><a href="Grid.html#index-slide"><code>slide</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grid.html#Grid">Grid</a></td></tr>
<tr><td></td><td valign="top"><a href="Easings.html#index-smoothstep"><code>smoothstep</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Easings.html#Easings">Easings</a></td></tr>
<tr><td></td><td valign="top"><a href="Scripts.html#index-spawn_002dscript"><code>spawn-script</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Scripts.html#Scripts">Scripts</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-split_002dtexture"><code>split-texture</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html#Textures">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Sprites.html#index-sprite_002dbatch_002dadd_0021"><code>sprite-batch-add!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Sprites.html#Sprites">Sprites</a></td></tr>
+<tr><td></td><td valign="top"><a href="Sprites.html#index-sprite_002dbatch_002dclear_0021"><code>sprite-batch-clear!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Sprites.html#Sprites">Sprites</a></td></tr>
+<tr><td></td><td valign="top"><a href="Sprites.html#index-sprite_002dbatch_002dtexture"><code>sprite-batch-texture</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Sprites.html#Sprites">Sprites</a></td></tr>
+<tr><td></td><td valign="top"><a href="Sprites.html#index-sprite_002dbatch_003f"><code>sprite-batch?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Sprites.html#Sprites">Sprites</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-strings_002d_003eshader"><code>strings-&gt;shader</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html#Shaders">Shaders</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Index_fn_letter-T">T</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-texture_002datlas_002dref"><code>texture-atlas-ref</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html#Textures">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-texture_002datlas_002dtexture"><code>texture-atlas-texture</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html#Textures">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-texture_002datlas_003f"><code>texture-atlas?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html#Textures">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-texture_002dheight"><code>texture-height</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html#Textures">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-texture_002dmag_002dfilter"><code>texture-mag-filter</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html#Textures">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-texture_002dmin_002dfilter"><code>texture-min-filter</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html#Textures">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-texture_002dparent"><code>texture-parent</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html#Textures">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-texture_002dregion_003f"><code>texture-region?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html#Textures">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-texture_002dwidth"><code>texture-width</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html#Textures">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-texture_002dwrap_002ds"><code>texture-wrap-s</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html#Textures">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-texture_002dwrap_002dt"><code>texture-wrap-t</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html#Textures">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-texture_003f"><code>texture?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html#Textures">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002danimation"><code>tile-animation</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002did"><code>tile-id</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002dlayer_002dheight"><code>tile-layer-height</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002dlayer_002dname"><code>tile-layer-name</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002dlayer_002dproperties"><code>tile-layer-properties</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002dlayer_002dtiles"><code>tile-layer-tiles</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002dlayer_002dwidth"><code>tile-layer-width</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002dlayer_003f"><code>tile-layer?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002dmap_002dheight"><code>tile-map-height</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002dmap_002dlayers"><code>tile-map-layers</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002dmap_002dorientation"><code>tile-map-orientation</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002dmap_002dproperties"><code>tile-map-properties</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002dmap_002dtile_002dheight"><code>tile-map-tile-height</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002dmap_002dtile_002dwidth"><code>tile-map-tile-width</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002dmap_002dtilesets"><code>tile-map-tilesets</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002dmap_002dwidth"><code>tile-map-width</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002dmap_003f"><code>tile-map?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_002dproperties"><code>tile-properties</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tile_003f"><code>tile?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tileset_002datlas"><code>tileset-atlas</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tileset_002dfirst_002dgid"><code>tileset-first-gid</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tileset_002dname"><code>tileset-name</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tileset_002dproperties"><code>tileset-properties</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tileset_002dsize"><code>tileset-size</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tileset_002dtile_002dheight"><code>tileset-tile-height</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tileset_002dtile_002dwidth"><code>tileset-tile-width</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tileset_002dtiles"><code>tileset-tiles</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-tileset_003f"><code>tileset?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html#Tile-Maps">Tile Maps</a></td></tr>
<tr><td></td><td valign="top"><a href="Matrices.html#index-transform_0021"><code>transform!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html#Matrices">Matrices</a></td></tr>
<tr><td></td><td valign="top"><a href="Tweening.html#index-tween"><code>tween</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tweening.html#Tweening">Tweening</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Index_fn_letter-U">U</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-uniform_002ddefault_002dvalue"><code>uniform-default-value</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html#Shaders">Shaders</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-uniform_002dname"><code>uniform-name</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html#Shaders">Shaders</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-uniform_002dtype"><code>uniform-type</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html#Shaders">Shaders</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-uniform_002dvalue"><code>uniform-value</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html#Shaders">Shaders</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-uniform_003f"><code>uniform?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html#Shaders">Shaders</a></td></tr>
<tr><td></td><td valign="top"><a href="Agendas.html#index-update_002dagenda"><code>update-agenda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Agendas.html#Agendas">Agendas</a></td></tr>
+<tr><td></td><td valign="top"><a href="Particles.html#index-update_002dparticles"><code>update-particles</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Particles.html#Particles">Particles</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Index_fn_letter-V">V</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-vec2"><code>vec2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html#Vectors">Vectors</a></td></tr>
@@ -383,13 +510,25 @@ Previous: <a href="Copying-This-Manual.html#Copying-This-Manual" accesskey="p" r
<tr><td></td><td valign="top"><a href="Vectors.html#index-vec3_002dy"><code>vec3-y</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-vec3_002dz"><code>vec3-z</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-vec3_003f"><code>vec3?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html#Vectors">Vectors</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-vertex_002darray_002dattributes"><code>vertex-array-attributes</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-vertex_002darray_002dindices"><code>vertex-array-indices</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-vertex_002darray_002dmode"><code>vertex-array-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-vertex_002darray_003f"><code>vertex-array?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Viewports.html#index-viewport_002dclear_002dcolor"><code>viewport-clear-color</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Viewports.html#Viewports">Viewports</a></td></tr>
+<tr><td></td><td valign="top"><a href="Viewports.html#index-viewport_002dclear_002dflags"><code>viewport-clear-flags</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Viewports.html#Viewports">Viewports</a></td></tr>
+<tr><td></td><td valign="top"><a href="Viewports.html#index-viewport_002dheight"><code>viewport-height</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Viewports.html#Viewports">Viewports</a></td></tr>
+<tr><td></td><td valign="top"><a href="Viewports.html#index-viewport_002dwidth"><code>viewport-width</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Viewports.html#Viewports">Viewports</a></td></tr>
+<tr><td></td><td valign="top"><a href="Viewports.html#index-viewport_002dx"><code>viewport-x</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Viewports.html#Viewports">Viewports</a></td></tr>
+<tr><td></td><td valign="top"><a href="Viewports.html#index-viewport_002dy"><code>viewport-y</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Viewports.html#Viewports">Viewports</a></td></tr>
+<tr><td></td><td valign="top"><a href="Viewports.html#index-viewport_003f"><code>viewport?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Viewports.html#Viewports">Viewports</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Index_fn_letter-W">W</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="Agendas.html#index-with_002dagenda"><code>with-agenda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Agendas.html#Agendas">Agendas</a></td></tr>
-<tr><td></td><td valign="top"><a href="Sprites.html#index-with_002dbatched_002dsprites"><code>with-batched-sprites</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Sprites.html#Sprites">Sprites</a></td></tr>
<tr><td></td><td valign="top"><a href="Rendering-Engine.html#index-with_002dblend_002dmode"><code>with-blend-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering-Engine.html#Rendering-Engine">Rendering Engine</a></td></tr>
<tr><td></td><td valign="top"><a href="Rendering-Engine.html#index-with_002ddepth_002dtest"><code>with-depth-test</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering-Engine.html#Rendering-Engine">Rendering Engine</a></td></tr>
<tr><td></td><td valign="top"><a href="Rendering-Engine.html#index-with_002dframebuffer"><code>with-framebuffer</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering-Engine.html#Rendering-Engine">Rendering Engine</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-with_002dmapped_002dbuffer"><code>with-mapped-buffer</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-with_002dmapped_002dbuffer_002dview"><code>with-mapped-buffer-view</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html#Buffers">Buffers</a></td></tr>
<tr><td></td><td valign="top"><a href="Rendering-Engine.html#index-with_002dprojection"><code>with-projection</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering-Engine.html#Rendering-Engine">Rendering Engine</a></td></tr>
<tr><td></td><td valign="top"><a href="Rendering-Engine.html#index-with_002dtexture"><code>with-texture</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering-Engine.html#Rendering-Engine">Rendering Engine</a></td></tr>
<tr><td></td><td valign="top"><a href="Rendering-Engine.html#index-with_002dviewport"><code>with-viewport</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering-Engine.html#Rendering-Engine">Rendering Engine</a></td></tr>
@@ -412,6 +551,8 @@ Previous: <a href="Copying-This-Manual.html#Copying-This-Manual" accesskey="p" r
&nbsp;
<a class="summary-letter" href="#Index_fn_letter-G"><b>G</b></a>
&nbsp;
+<a class="summary-letter" href="#Index_fn_letter-I"><b>I</b></a>
+ &nbsp;
<a class="summary-letter" href="#Index_fn_letter-L"><b>L</b></a>
&nbsp;
<a class="summary-letter" href="#Index_fn_letter-M"><b>M</b></a>
diff --git a/manuals/chickadee/Installation.html b/manuals/chickadee/Installation.html
index 4872008..11a1094 100644
--- a/manuals/chickadee/Installation.html
+++ b/manuals/chickadee/Installation.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
diff --git a/manuals/chickadee/Kernel.html b/manuals/chickadee/Kernel.html
index c298723..f6bfa9c 100644
--- a/manuals/chickadee/Kernel.html
+++ b/manuals/chickadee/Kernel.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -96,16 +98,16 @@ Next: <a href="Math.html#Math" accesskey="n" rel="next">Math</a>, Up: <a href="A
<a name="Kernel-1"></a>
<h3 class="section">2.1 Kernel</h3>
-<p>At the very core of Chickadee, in the <code>(chickadee)</code> module, lies
-an event loop. This loop, or &ldquo;kernel&rdquo;, is responsible for ensuring
-that the game is updated at the desired interval, rendering the
-current state of the game world, and handling errors if they occur.
-The kernel implements what is known as a &ldquo;fixed timestep&rdquo; game loop,
-meaning that the game simulation will be advanced by a fixed interval
-of time and will never vary from frame to frame, unlike some other
-styles of game loops. The appropriately named <code>run-game</code> and
-<code>abort-game</code> procedures are the entry and exit points to the
-Chickadee game loop kernel.
+<p>At the very core of Chickadee, in the <code>(chickadee game-loop)</code>
+module, lies an event loop. This loop, or &ldquo;kernel&rdquo;, is responsible
+for ensuring that the game is updated at the desired interval,
+rendering the current state of the game world, and handling errors if
+they occur. The kernel implements what is known as a &ldquo;fixed
+timestep&rdquo; game loop, meaning that the game simulation will be
+advanced by a fixed interval of time and will never vary from frame to
+frame, unlike some other styles of game loops. The appropriately
+named <code>run-game*</code> and <code>abort-game</code> procedures are the entry
+and exit points to the Chickadee game loop kernel.
</p>
<p>On its own, the kernel does not do very much at all. In order to
actually respond to input events, update game state, or render output,
@@ -164,13 +166,12 @@ behavior is to simply re-throw the error.
<p>Since most users will want to write 2D/3D games with hardware
accelerated graphics rendering, controlled via keyboard, mouse, or
game controller, Chickadee comes with an easy to use engine just for
-this purpose in the <code>(chickadee sdl)</code> module:
-<code>run-game/sdl</code>.
+this purpose in the <code>(chickadee)</code> module: <code>run-game</code>.
</p>
<dl>
-<dt><a name="index-run_002dgame_002fsdl"></a>Procedure: <strong>run-game/sdl</strong> <em>[#:window-title &quot;Chickadee!&quot;] [#:window-width 640] [#:window-height 480] [#:window-fullscreen? <code>#f</code>] [#:update-hz 60] [#:load] [#:update] [#:draw] [#:quit] [#:key-press] [#:key-release] [#:text-input] [#:mouse-press] [#:mouse-release] [#:mouse-move] [#:controller-add] [#:controller-remove] [#:controller-press] [#:controller-release] [#:controller-move] [#:error]</em></dt>
+<dt><a name="index-run_002dgame-1"></a>Procedure: <strong>run-game</strong> <em>[#:window-title &quot;Chickadee!&quot;] [#:window-width 640] [#:window-height 480] [#:window-fullscreen? <code>#f</code>] [#:update-hz 60] [#:load] [#:update] [#:draw] [#:quit] [#:key-press] [#:key-release] [#:text-input] [#:mouse-press] [#:mouse-release] [#:mouse-move] [#:controller-add] [#:controller-remove] [#:controller-press] [#:controller-release] [#:controller-move] [#:error]</em></dt>
<dd>
-<p>Run the Chickadee game loop using the SDL engine.
+<p>Run the Chickadee game loop using the SDL engine in OpenGL mode.
</p>
<p>A new graphical window will be opened with <var>window-width</var> x
<var>window-height</var> as its dimensions, <var>window-title</var> as its
@@ -358,6 +359,40 @@ values are:
</dd></dl>
+<a name="Live-Coding"></a>
+<h4 class="subsection">2.1.1 Live Coding</h4>
+
+<p>One of the biggest appeals of any Lisp dialect is the ability to use
+the &ldquo;read-eval-print loop&rdquo; (REPL for short) to build programs
+iteratively and interactively while the program is running. However,
+programs that run in an event loop and respond to user input (such as
+a video game) require special care for this workflow to be pleasant.
+Chickadee provides no built-in support for live coding, but it&rsquo;s
+fairly easy to hook up a special kind of REPL yourself.
+</p>
+<p>First, create a cooperative REPL server (It&rsquo;s important to use Guile&rsquo;s
+cooperative REPL server instead of the standard REPL server in
+<code>(system repl server)</code> to avoid thread synchronization issues):
+</p>
+<div class="example">
+<pre class="example">(use-modules (system repl coop-server))
+
+(define repl (spawn-coop-repl-server))
+</pre></div>
+
+<p>Then, in the game loop&rsquo;s update procedure, add this:
+</p>
+<div class="example">
+<pre class="example">(poll-coop-repl-server repl)
+</pre></div>
+
+<p>To use the REPL, connect to it via port 37146. Telnet will do the
+trick, but using the <a href="https://www.nongnu.org/geiser/">Geiser</a>
+extension for Emacs is by far the best way to develop at the REPL with
+Guile. Use <code>M-x connect-to-guile</code> to connect to the REPL server.
+</p>
+<p>Happy hacking!
+</p>
<hr>
<div class="header">
<p>
diff --git a/manuals/chickadee/Lines-and-Shapes.html b/manuals/chickadee/Lines-and-Shapes.html
index 05ad725..31b0a9d 100644
--- a/manuals/chickadee/Lines-and-Shapes.html
+++ b/manuals/chickadee/Lines-and-Shapes.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -94,14 +96,14 @@ Next: <a href="Fonts.html#Fonts" accesskey="n" rel="next">Fonts</a>, Previous: <
</div>
<hr>
<a name="Lines-and-Shapes-1"></a>
-<h4 class="subsection">2.3.5 Lines and Shapes</h4>
+<h4 class="subsection">2.3.4 Lines and Shapes</h4>
<p>Sprites are fun, but sometimes simple, untextured lines and polygons
are desired. That&rsquo;s where the <code>(chickadee render shapes)</code> module
comes in!
</p>
<dl>
-<dt><a name="index-draw_002dline"></a>Procedure: <strong>draw-line</strong> <em><var>start</var> <var>end</var> [#:thickness 0.5] [#:feather 1.0] [#:cap round] [#:color] [#:shader]</em></dt>
+<dt><a name="index-draw_002dline"></a>Procedure: <strong>draw-line</strong> <em>start end [#:thickness 0.5] [#:feather 1.0] [#:cap round] [#:color] [#:shader]</em></dt>
<dd>
<p>Draw a line segment from <var>start</var> to <var>end</var>. The line will be
<var>thickness</var> pixels thick with an antialiased border <var>feather</var>
@@ -114,7 +116,7 @@ shader.
</p></dd></dl>
<dl>
-<dt><a name="index-draw_002dbezier_002dcurve"></a>Procedure: <strong>draw-bezier-curve</strong> <em><var>bezier</var> [#:segments 32] [#:control-points?] [#:tangents?] [#:control-point-size 8] [#:control-point-color yellow] [#:tangent-color yellow] [#:thickness 0.5] [#:feather 1.0] [#:matrix]</em></dt>
+<dt><a name="index-draw_002dbezier_002dcurve"></a>Procedure: <strong>draw-bezier-curve</strong> <em>bezier [#:segments 32] [#:control-points?] [#:tangents?] [#:control-point-size 8] [#:control-point-color yellow] [#:tangent-color yellow] [#:thickness 0.5] [#:feather 1.0] [#:matrix]</em></dt>
<dd>
<p>Draw the curve defined by <var>bezier</var> using a resolution of N
<var>segments</var>. When <var>control-points?</var> is <code>#t</code>, the control
@@ -132,7 +134,7 @@ control over the final output.
</p></dd></dl>
<dl>
-<dt><a name="index-draw_002dbezier_002dpath"></a>Procedure: <strong>draw-bezier-path</strong> <em><var>path</var> [#:segments 32] [#:control-points?] [#:tangents?] [#:control-point-size 8] [#:control-point-color yellow] [#:tangent-color yellow] [#:thickness 0.5] [#:feather 1.0] [#:matrix]</em></dt>
+<dt><a name="index-draw_002dbezier_002dpath"></a>Procedure: <strong>draw-bezier-path</strong> <em>path [#:segments 32] [#:control-points?] [#:tangents?] [#:control-point-size 8] [#:control-point-color yellow] [#:tangent-color yellow] [#:thickness 0.5] [#:feather 1.0] [#:matrix]</em></dt>
<dd>
<p>Render <var>path</var>, a list of bezier curves. See the documentation for
<code>draw-bezier-curve</code> for an explanation of all the keyword
diff --git a/manuals/chickadee/Math.html b/manuals/chickadee/Math.html
index a41a7f8..fddd9cc 100644
--- a/manuals/chickadee/Math.html
+++ b/manuals/chickadee/Math.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
diff --git a/manuals/chickadee/Matrices.html b/manuals/chickadee/Matrices.html
index 5f664ef..c5a0098 100644
--- a/manuals/chickadee/Matrices.html
+++ b/manuals/chickadee/Matrices.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -113,7 +115,7 @@ objects.
<h4 class="subsubsection">2.2.5.2 Matrix Operations</h4>
<dl>
-<dt><a name="index-make_002dmatrix4"></a>Procedure: <strong>make-matrix4</strong> <em><var>aa</var> <var>ab</var> <var>ac</var> <var>ad</var> <var>ba</var> <var>bb</var> <var>bc</var> <var>bd</var> <var>ca</var> <var>cb</var> <var>cc</var> <var>cd</var> <var>da</var> <var>db</var> <var>dc</var> <var>dd</var></em></dt>
+<dt><a name="index-make_002dmatrix4"></a>Procedure: <strong>make-matrix4</strong> <em>aa ab ac ad ba bb bc bd ca cb cc cd da db dc dd</em></dt>
<dd>
<p>Return a new 4x4 matrix initialized with the given 16 values in
column-major format.
@@ -140,12 +142,12 @@ equivalent to the following code:
</dd></dl>
<dl>
-<dt><a name="index-matrix4_003f"></a>Procedure: <strong>matrix4?</strong> <em><var>obj</var></em></dt>
+<dt><a name="index-matrix4_003f"></a>Procedure: <strong>matrix4?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> is a 4x4 matrix.
</p></dd></dl>
<dl>
-<dt><a name="index-matrix4_002a"></a>Procedure: <strong>matrix4*</strong> <em>. <var>matrices</var></em></dt>
+<dt><a name="index-matrix4_002a"></a>Procedure: <strong>matrix4*</strong> <em>. matrices</em></dt>
<dd><p>Return a new 4x4 matrix containing the product of multiplying all of
the given <var>matrices</var>.
</p>
@@ -153,7 +155,7 @@ the given <var>matrices</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-orthographic_002dprojection"></a>Procedure: <strong>orthographic-projection</strong> <em><var>left</var> <var>right</var> <var>top</var> <var>bottom</var> <var>near</var> <var>far</var></em></dt>
+<dt><a name="index-orthographic_002dprojection"></a>Procedure: <strong>orthographic-projection</strong> <em>left right top bottom near far</em></dt>
<dd>
<p>Return a new 4x4 matrix that represents an orthographic (2D)
projection for the horizontal clipping plane <var>top</var> and
@@ -162,7 +164,7 @@ and the depth clipping plane <var>near</var> and <var>far</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-perspective_002dprojection"></a>Procedure: <strong>perspective-projection</strong> <em><var>fov</var> <var>aspect-ratio</var> <var>near</var> <var>far</var></em></dt>
+<dt><a name="index-perspective_002dprojection"></a>Procedure: <strong>perspective-projection</strong> <em>fov aspect-ratio near far</em></dt>
<dd>
<p>Return a new 4x4 matrix that represents a perspective (3D) projection
with a field of vision of <var>fov</var> radians, an aspect ratio of
@@ -171,68 +173,68 @@ and <var>far</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-matrix4_002dtranslate"></a>Procedure: <strong>matrix4-translate</strong> <em><var>x</var></em></dt>
+<dt><a name="index-matrix4_002dtranslate"></a>Procedure: <strong>matrix4-translate</strong> <em>x</em></dt>
<dd><p>Return a new 4x4 matrix that represents a translation by <var>x</var>, a 2D
vector, a 3D vector, or a rectangle (in which case the bottom-left
corner of the rectangle is used).
</p></dd></dl>
<dl>
-<dt><a name="index-matrix4_002dscale"></a>Procedure: <strong>matrix4-scale</strong> <em><var>s</var></em></dt>
+<dt><a name="index-matrix4_002dscale"></a>Procedure: <strong>matrix4-scale</strong> <em>s</em></dt>
<dd><p>Return a new 4x4 matrix that represents a scaling along the X, Y, and
Z axes by the scaling factor <var>s</var>, a real number.
</p></dd></dl>
<dl>
-<dt><a name="index-matrix4_002drotate"></a>Procedure: <strong>matrix4-rotate</strong> <em><var>q</var></em></dt>
+<dt><a name="index-matrix4_002drotate"></a>Procedure: <strong>matrix4-rotate</strong> <em>q</em></dt>
<dd><p>Return a new 4x4 matrix that represents a rotation about an arbitrary
axis defined by the quaternion <var>q</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-matrix4_002drotate_002dz"></a>Procedure: <strong>matrix4-rotate-z</strong> <em><var>theta</var></em></dt>
+<dt><a name="index-matrix4_002drotate_002dz"></a>Procedure: <strong>matrix4-rotate-z</strong> <em>theta</em></dt>
<dd><p>Return a new 4x4 matrix that represents a rotation about the Z axis by
<var>theta</var> radians.
</p></dd></dl>
<dl>
-<dt><a name="index-matrix4_002didentity_0021"></a>Procedure: <strong>matrix4-identity!</strong> <em><var>matrix</var></em></dt>
+<dt><a name="index-matrix4_002didentity_0021"></a>Procedure: <strong>matrix4-identity!</strong> <em>matrix</em></dt>
<dd><p>Modify <var>matrix</var> in-place to contain the identity matrix.
</p></dd></dl>
<dl>
-<dt><a name="index-matrix4_002dmult_0021"></a>Procedure: <strong>matrix4-mult!</strong> <em><var>dest</var> <var>a</var> <var>b</var></em></dt>
+<dt><a name="index-matrix4_002dmult_0021"></a>Procedure: <strong>matrix4-mult!</strong> <em>dest a b</em></dt>
<dd><p>Multiply the 4x4 matrix <var>a</var> by the 4x4 matrix <var>b</var> and store
the result in the 4x4 matrix <var>dest</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-matrix4_002dtranslate_0021"></a>Procedure: <strong>matrix4-translate!</strong> <em><var>matrix</var> <var>x</var></em></dt>
+<dt><a name="index-matrix4_002dtranslate_0021"></a>Procedure: <strong>matrix4-translate!</strong> <em>matrix x</em></dt>
<dd><p>Modify <var>matrix</var> in-place to contain a translation by <var>x</var>, a 2D
vector, a 3D vector, or a rectangle (in which case the bottom-left
corner of the rectangle is used).
</p></dd></dl>
<dl>
-<dt><a name="index-matrix4_002dscale_0021"></a>Procedure: <strong>matrix4-scale!</strong> <em><var>matrix</var> <var>s</var></em></dt>
+<dt><a name="index-matrix4_002dscale_0021"></a>Procedure: <strong>matrix4-scale!</strong> <em>matrix s</em></dt>
<dd><p>Modify <var>matrix</var> in-place to contain a scaling along the X, Y, and
Z axes by the scaling factor <var>s</var>, a real number.
</p></dd></dl>
<dl>
-<dt><a name="index-matrix4_002drotate_0021"></a>Procedure: <strong>matrix4-rotate!</strong> <em><var>matrix</var> <var>q</var></em></dt>
+<dt><a name="index-matrix4_002drotate_0021"></a>Procedure: <strong>matrix4-rotate!</strong> <em>matrix q</em></dt>
<dd><p>Modify <var>matrix</var> in-place to contain a rotation about an arbitrary
axis defined by the quaternion <var>q</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-matrix4_002drotate_002dz_0021"></a>Procedure: <strong>matrix4-rotate-z!</strong> <em><var>matrix</var> <var>theta</var></em></dt>
+<dt><a name="index-matrix4_002drotate_002dz_0021"></a>Procedure: <strong>matrix4-rotate-z!</strong> <em>matrix theta</em></dt>
<dd><p>Modify <var>matrix</var> in-place to contain a rotation about the Z axis by
<var>theta</var> radians.
</p></dd></dl>
<dl>
-<dt><a name="index-matrix4_002d2d_002dtransform_0021"></a>Procedure: <strong>matrix4-2d-transform!</strong> <em><var>matrix</var> [#:origin] [#:position] [#:rotation] [#:scale] [#:skew]</em></dt>
+<dt><a name="index-matrix4_002d2d_002dtransform_0021"></a>Procedure: <strong>matrix4-2d-transform!</strong> <em>matrix [#:origin] [#:position] [#:rotation] [#:scale] [#:skew]</em></dt>
<dd>
<p>Modify <var>matrix</var> in-place to contain the transformation described
by <var>position</var>, a 2D vector or rectangle, <var>rotation</var>, a scalar
@@ -243,7 +245,7 @@ particular transformation will not be included in the result.
</p></dd></dl>
<dl>
-<dt><a name="index-transform_0021"></a>Procedure: <strong>transform!</strong> <em><var>matrix</var> <var>v</var></em></dt>
+<dt><a name="index-transform_0021"></a>Procedure: <strong>transform!</strong> <em>matrix v</em></dt>
<dd><p>Modify the 2D vector <var>v</var> in-place by multiplying it by the 4x4
matrix <var>matrix</var>.
</p></dd></dl>
diff --git a/manuals/chickadee/Particles.html b/manuals/chickadee/Particles.html
new file mode 100644
index 0000000..35a6b61
--- /dev/null
+++ b/manuals/chickadee/Particles.html
@@ -0,0 +1,263 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+A copy of the license is also available from the Free Software
+Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+
+
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
+The document was typeset with
+http://www.texinfo.org/ (GNU Texinfo).
+ -->
+<!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Particles (The Chickadee Game Toolkit)</title>
+
+<meta name="description" content="Particles (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Particles (The Chickadee Game Toolkit)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="makeinfo">
+<link href="index.html#Top" rel="start" title="Top">
+<link href="Index.html#Index" rel="index" title="Index">
+<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="Graphics.html#Graphics" rel="up" title="Graphics">
+<link href="Blending.html#Blending" rel="next" title="Blending">
+<link href="Fonts.html#Fonts" rel="prev" title="Fonts">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
+blockquote.smallquotation {font-size: smaller}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {margin-left: 3.2em}
+div.smalldisplay {margin-left: 3.2em}
+div.smallexample {margin-left: 3.2em}
+div.smalllisp {margin-left: 3.2em}
+kbd {font-style: oblique}
+pre.display {font-family: inherit}
+pre.format {font-family: inherit}
+pre.menu-comment {font-family: serif}
+pre.menu-preformatted {font-family: serif}
+pre.smalldisplay {font-family: inherit; font-size: smaller}
+pre.smallexample {font-size: smaller}
+pre.smallformat {font-family: inherit; font-size: smaller}
+pre.smalllisp {font-size: smaller}
+span.nolinebreak {white-space: nowrap}
+span.roman {font-family: initial; font-weight: normal}
+span.sansserif {font-family: sans-serif; font-weight: normal}
+ul.no-bullet {list-style: none}
+@media (min-width: 1140px) {
+ body {
+ margin-left: 14rem;
+ margin-right: 4rem;
+ max-width: 52rem;
+ }
+}
+
+@media (min-width: 800px) and (max-width: 1140px) {
+ body {
+ margin-left: 6rem;
+ margin-right: 4rem;
+ max-width: 52rem;
+ }
+}
+
+@media (max-width: 800px) {
+ body {
+ margin: 1rem;
+ }
+}
+
+-->
+</style>
+<link rel="stylesheet" type="text/css" href="https://dthompson.us/css/dthompson.css">
+
+
+</head>
+
+<body lang="en">
+<a name="Particles"></a>
+<div class="header">
+<p>
+Next: <a href="Blending.html#Blending" accesskey="n" rel="next">Blending</a>, Previous: <a href="Fonts.html#Fonts" accesskey="p" rel="prev">Fonts</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+</div>
+<hr>
+<a name="Particles-1"></a>
+<h4 class="subsection">2.3.6 Particles</h4>
+
+<p>Effects like smoke, fire, sparks, etc. are often achieved by animating
+lots of little, short-lived sprites known as &ldquo;particles&rdquo;. In fact,
+all of these effects, and more, can be accomplished by turning a few
+configuration knobs in a &ldquo;particle system&rdquo;. A particle system takes
+care of managing the many miniscule moving morsels so the developer
+can quickly produce an effect and move on with their life. The
+<code>(chickadee render particles)</code> module provides an API for
+manipulating particle systems.
+</p>
+<p>Below is an example of a very simple particle system that utilizes
+nearly all of the default configuration settings:
+</p>
+<div class="example">
+<pre class="example">(use-modules (chickadee render particles))
+(define texture (load-image &quot;particle.png&quot;))
+(define particles (make-particles 2000 #:texture texture))
+</pre></div>
+
+<p>In order to put particles into a particle system, a particle
+&ldquo;emitter&rdquo; is needed. Emitters know where to spawn new particles,
+how many of them to spawn, and for how long they should do it.
+</p>
+<p>Below is an example of an emitter that spawns 16 particles per frame
+at the coordinates <code>(320, 240)</code>:
+</p>
+<div class="example">
+<pre class="example">(use-modules (chickadee math vector))
+(define emitter (make-particle-emitter (vec2 320.0 240.0) 16))
+(add-particle-emitter particles emitter)
+</pre></div>
+
+<p>To see all of the tweakable knobs and switches, read on!
+</p>
+<dl>
+<dt><a name="index-make_002dparticles"></a>Procedure: <strong>make-particles</strong> <em>capacity [#:blend-mode <code>alpha</code>] [#:color white] [#:end-color transparent] [#:texture] [#:animation-rows 1] [#:animation-columns 1] [#:width] [#:height] [#:speed-range (vec2 0.1 1.0)] [#:acceleration-range (vec2 0.0 0.1)] [#:direction-range (vec2 0 (* 2 pi))] [#:lifetime 30] [#:sort]</em></dt>
+<dd>
+<p>Return a new particle system that may contain up to <var>capacity</var>
+particles. Achieving the desired particle effect involves tweaking
+the following keyword arguments as needed:
+</p>
+<p>- <var>blend-mode</var>: Pixel blending mode. <code>alpha</code> by default.
+(see <a href="Blending.html#Blending">Blending</a> for more about blend modes).
+</p>
+<p>- <var>start-color</var>: The tint color of the particle at the beginning of its
+life. White by default.
+</p>
+<p>- <var>end-color</var>: The tint color of the particle at the end of of its
+life. Completely transparent by default for a fade-out effect. The
+color in the middle of a particle&rsquo;s life will be an interpolation of
+<var>start-color</var> and <var>end-color</var>.
+</p>
+<p>- <var>texture</var>: The texture applied to the particles. The texture
+may be subdivided into many animation frames.
+</p>
+<p>- <var>animation-rows</var>: How many animation frame rows there are in the
+texture. Default is 1.
+</p>
+<p>- <var>animation-columns</var>: How many animation frame columns there are
+in the texture. Default is 1.
+</p>
+<p>- <var>width</var>: The width of each particle. By default, the width of
+an animation frame (in pixels) is used.
+</p>
+<p>- <var>height</var>: The height of each particle. By default, the height
+of an animation frame (in pixels) is used.
+</p>
+<p>- <var>speed-range</var>: A 2D vector containing the min and max particle
+speed. Each particle will have a speed chosen at random from this
+range. By default, speed ranges from 0.1 to 1.0.
+</p>
+<p>- <var>acceleration-range</var>: A 2D vector containing the min and max
+particle acceleration. Each particle will have an acceleration chosen
+at random from this range. By default, acceleration ranges from 0.0
+to 0.1.
+</p>
+<p>- <var>direction-range</var>: A 2D vector containing the min and max
+particle direction as an angle in radians. Each particle will have a
+direction chosen at random from this range. By default, the range
+covers all possible angles.
+</p>
+<p>- <var>lifetime</var>: How long each particle lives, measured in
+updates. 30 by default.
+</p>
+<p>- <var>sort</var>: <code>youngest</code> if youngest particle should be drawn
+last or <code>oldest</code> for the reverse. By default, no sorting is
+applied at all.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-particles_003f"></a>Procedure: <strong>particles?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a particle system.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-update_002dparticles"></a>Procedure: <strong>update-particles</strong> <em>particles</em></dt>
+<dd><p>Advance the simulation of <var>particles</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-draw_002dparticles"></a>Procedure: <strong>draw-particles</strong> <em>particles</em></dt>
+<dd><p>Render <var>particles</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-draw_002dparticles_002a"></a>Procedure: <strong>draw-particles*</strong> <em>particles matrix</em></dt>
+<dd><p>Render <var>particles</var> with <var>matrix</var> applied.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-make_002dparticle_002demitter"></a>Procedure: <strong>make-particle-emitter</strong> <em>spawn-area rate [duration]</em></dt>
+<dd>
+<p>Return a new particle emitter that spawns <var>rate</var> particles per
+frame within <var>spawn-area</var> (a rectangle or 2D vector) for
+<var>duration</var> frames. If <var>duration</var> is not specified, the
+emitter will spawn particles indefinitely.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-particle_002demitter_003f"></a>Procedure: <strong>particle-emitter?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a particle emitter.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-particle_002demitter_002dspawn_002darea"></a>Procedure: <strong>particle-emitter-spawn-area</strong> <em>emitter</em></dt>
+<dd><p>Return the spawn area for <var>emitter</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-particle_002demitter_002drate"></a>Procedure: <strong>particle-emitter-rate</strong> <em>emitter</em></dt>
+<dd><p>Return the number of particles that <var>emitter</var> will spawn per
+frame.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-particle_002demitter_002dlife"></a>Procedure: <strong>particle-emitter-life</strong> <em>emitter</em></dt>
+<dd><p>Return the number of frames remaining in <var>emitter</var>&rsquo;s lifespan.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-particle_002demitter_002ddone_003f"></a>Procedure: <strong>particle-emitter-done?</strong> <em>emitter</em></dt>
+<dd><p>Return <code>#t</code> if <var>emitter</var> has finished spawning particlces.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-add_002dparticle_002demitter"></a>Procedure: <strong>add-particle-emitter</strong> <em>particles emitter</em></dt>
+<dd><p>Add <var>emitter</var> to <var>particles</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-remove_002dparticle_002demitter"></a>Procedure: <strong>remove-particle-emitter</strong> <em>particles emitter</em></dt>
+<dd><p>Remove <var>emitter</var> to <var>particles</var>
+</p></dd></dl>
+
+<hr>
+<div class="header">
+<p>
+Next: <a href="Blending.html#Blending" accesskey="n" rel="next">Blending</a>, Previous: <a href="Fonts.html#Fonts" accesskey="p" rel="prev">Fonts</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+</div>
+
+
+
+</body>
+</html>
diff --git a/manuals/chickadee/Path-Finding.html b/manuals/chickadee/Path-Finding.html
index 63819aa..255eba7 100644
--- a/manuals/chickadee/Path-Finding.html
+++ b/manuals/chickadee/Path-Finding.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -152,12 +154,12 @@ for optimal path finding!
</p></dd></dl>
<dl>
-<dt><a name="index-path_002dfinder_003f"></a>Procedure: <strong>path-finder?</strong> <em><var>obj</var></em></dt>
+<dt><a name="index-path_002dfinder_003f"></a>Procedure: <strong>path-finder?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> is a path finder.
</p></dd></dl>
<dl>
-<dt><a name="index-a_002a"></a>Procedure: <strong>a*</strong> <em><var>path-finder</var> <var>start</var> <var>goal</var> <var>neighbors</var> <var>cost</var> <var>distance</var></em></dt>
+<dt><a name="index-a_002a"></a>Procedure: <strong>a*</strong> <em>path-finder start goal neighbors cost distance</em></dt>
<dd>
<p>Return a list of nodes forming a path from <var>start</var> to <var>goal</var>
using <var>path-finder</var> to hold state. <var>neighbors</var> is a procedure
diff --git a/manuals/chickadee/Quaternions.html b/manuals/chickadee/Quaternions.html
index de4c8e4..ebda6e9 100644
--- a/manuals/chickadee/Quaternions.html
+++ b/manuals/chickadee/Quaternions.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -104,33 +106,33 @@ smooth transition from one rotation to another, whereas interpolating
two matrices would yield garbage.
</p>
<dl>
-<dt><a name="index-quaternion"></a>Procedure: <strong>quaternion</strong> <em><var>x</var> <var>y</var> <var>z</var> <var>w</var></em></dt>
+<dt><a name="index-quaternion"></a>Procedure: <strong>quaternion</strong> <em>x y z w</em></dt>
<dd><p>Return a new quaternion with values <var>x</var>, <var>y</var>, <var>z</var>, and
<var>w</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-quaternion_003f"></a>Procedure: <strong>quaternion?</strong> <em><var>obj</var></em></dt>
+<dt><a name="index-quaternion_003f"></a>Procedure: <strong>quaternion?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> is a quaternion.
</p></dd></dl>
<dl>
-<dt><a name="index-quaternion_002dw"></a>Procedure: <strong>quaternion-w</strong> <em><var>q</var></em></dt>
+<dt><a name="index-quaternion_002dw"></a>Procedure: <strong>quaternion-w</strong> <em>q</em></dt>
<dd><p>Return the W component of the quaternion <var>q</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-quaternion_002dx"></a>Procedure: <strong>quaternion-x</strong> <em><var>q</var></em></dt>
+<dt><a name="index-quaternion_002dx"></a>Procedure: <strong>quaternion-x</strong> <em>q</em></dt>
<dd><p>Return the X component of the quaternion <var>q</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-quaternion_002dy"></a>Procedure: <strong>quaternion-y</strong> <em><var>q</var></em></dt>
+<dt><a name="index-quaternion_002dy"></a>Procedure: <strong>quaternion-y</strong> <em>q</em></dt>
<dd><p>Return the Y component of the quaternion <var>q</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-quaternion_002dz"></a>Procedure: <strong>quaternion-z</strong> <em><var>q</var></em></dt>
+<dt><a name="index-quaternion_002dz"></a>Procedure: <strong>quaternion-z</strong> <em>q</em></dt>
<dd><p>Return the Z component of the quaternion <var>q</var>.
</p></dd></dl>
diff --git a/manuals/chickadee/Rectangles.html b/manuals/chickadee/Rectangles.html
index edaf4e6..ecfbde0 100644
--- a/manuals/chickadee/Rectangles.html
+++ b/manuals/chickadee/Rectangles.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -108,220 +110,221 @@ functions that do in-place modification of rectangles for use in
performance critical code paths.
</p>
<dl>
+<dt><a name="index-rect"></a>Procedure: <strong>rect</strong> <em>x y width height</em></dt>
<dt><a name="index-make_002drect"></a>Procedure: <strong>make-rect</strong> <em><var>x</var> <var>y</var> <var>width</var> <var>height</var></em></dt>
<dd><p>Create a new rectangle that is <var>width</var> by <var>height</var> in size and
whose bottom-left corner is located at (<var>x</var>, <var>y</var>).
</p></dd></dl>
<dl>
-<dt><a name="index-rect_003f"></a>Procedure: <strong>rect?</strong> <em><var>obj</var></em></dt>
+<dt><a name="index-rect_003f"></a>Procedure: <strong>rect?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> is a rectangle.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dwithin_003f"></a>Procedure: <strong>rect-within?</strong> <em><var>rect1</var> <var>rect2</var></em></dt>
+<dt><a name="index-rect_002dwithin_003f"></a>Procedure: <strong>rect-within?</strong> <em>rect1 rect2</em></dt>
<dd><p>Return <code>#t</code> if <var>rect2</var> is completely within <var>rect1</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dintersects_003f"></a>Procedure: <strong>rect-intersects?</strong> <em><var>rect1</var> <var>rect2</var></em></dt>
+<dt><a name="index-rect_002dintersects_003f"></a>Procedure: <strong>rect-intersects?</strong> <em>rect1 rect2</em></dt>
<dd><p>Return <code>#t</code> if <var>rect2</var> overlaps <var>rect1</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dcontains_003f"></a>Procedure: <strong>rect-contains?</strong> <em><var>rect</var> <var>x</var> <var>y</var></em></dt>
+<dt><a name="index-rect_002dcontains_003f"></a>Procedure: <strong>rect-contains?</strong> <em>rect x y</em></dt>
<dd><p>Return <code>#t</code> if the coordinates (<var>x</var>, <var>y</var>) are within
<var>rect</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dcontains_002dvec2_003f"></a>Procedure: <strong>rect-contains-vec2?</strong> <em><var>rect</var> <var>v</var></em></dt>
+<dt><a name="index-rect_002dcontains_002dvec2_003f"></a>Procedure: <strong>rect-contains-vec2?</strong> <em>rect v</em></dt>
<dd><p>Return <code>#t</code> if the 2D vector <var>v</var> is within the bounds of
<var>rect</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dx"></a>Procedure: <strong>rect-x</strong> <em><var>rect</var></em></dt>
+<dt><a name="index-rect_002dx"></a>Procedure: <strong>rect-x</strong> <em>rect</em></dt>
<dd><p>Return the X coordinate of the lower-left corner of <var>rect</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dy"></a>Procedure: <strong>rect-y</strong> <em><var>rect</var></em></dt>
+<dt><a name="index-rect_002dy"></a>Procedure: <strong>rect-y</strong> <em>rect</em></dt>
<dd><p>Return the Y coordinate of the lower-left corner of <var>rect</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dleft"></a>Procedure: <strong>rect-left</strong> <em><var>rect</var></em></dt>
+<dt><a name="index-rect_002dleft"></a>Procedure: <strong>rect-left</strong> <em>rect</em></dt>
<dd><p>Return the left-most X coordinate of <var>rect</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dright"></a>Procedure: <strong>rect-right</strong> <em><var>rect</var></em></dt>
+<dt><a name="index-rect_002dright"></a>Procedure: <strong>rect-right</strong> <em>rect</em></dt>
<dd><p>Return the right-most X coordinate of <var>rect</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dbottom"></a>Procedure: <strong>rect-bottom</strong> <em><var>rect</var></em></dt>
+<dt><a name="index-rect_002dbottom"></a>Procedure: <strong>rect-bottom</strong> <em>rect</em></dt>
<dd><p>Return the bottom-most Y coordinate of <var>rect</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dtop"></a>Procedure: <strong>rect-top</strong> <em><var>rect</var></em></dt>
+<dt><a name="index-rect_002dtop"></a>Procedure: <strong>rect-top</strong> <em>rect</em></dt>
<dd><p>Return the top-most Y coordinate of <var>rect</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dcenter_002dx"></a>Procedure: <strong>rect-center-x</strong> <em><var>rect</var></em></dt>
+<dt><a name="index-rect_002dcenter_002dx"></a>Procedure: <strong>rect-center-x</strong> <em>rect</em></dt>
<dd><p>Return the X coordinate of the center of <var>rect</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dcenter_002dy"></a>Procedure: <strong>rect-center-y</strong> <em><var>rect</var></em></dt>
+<dt><a name="index-rect_002dcenter_002dy"></a>Procedure: <strong>rect-center-y</strong> <em>rect</em></dt>
<dd><p>Return the Y coordinate of the center of <var>rect</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dwidth"></a>Procedure: <strong>rect-width</strong> <em><var>rect</var></em></dt>
+<dt><a name="index-rect_002dwidth"></a>Procedure: <strong>rect-width</strong> <em>rect</em></dt>
<dd><p>Return the width of <var>rect</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dheight"></a>Procedure: <strong>rect-height</strong> <em><var>rect</var></em></dt>
+<dt><a name="index-rect_002dheight"></a>Procedure: <strong>rect-height</strong> <em>rect</em></dt>
<dd><p>Return the height of <var>rect</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002darea"></a>Procedure: <strong>rect-area</strong> <em><var>rect</var></em></dt>
+<dt><a name="index-rect_002darea"></a>Procedure: <strong>rect-area</strong> <em>rect</em></dt>
<dd><p>Return the surface area covered by <var>rect</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dclamp_002dx"></a>Procedure: <strong>rect-clamp-x</strong> <em><var>rect</var> <var>x</var></em></dt>
+<dt><a name="index-rect_002dclamp_002dx"></a>Procedure: <strong>rect-clamp-x</strong> <em>rect x</em></dt>
<dd><p>Restrict <var>x</var> to the portion of the X axis covered by <var>rect</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dclamp_002dy"></a>Procedure: <strong>rect-clamp-y</strong> <em><var>rect</var> <var>y</var></em></dt>
+<dt><a name="index-rect_002dclamp_002dy"></a>Procedure: <strong>rect-clamp-y</strong> <em>rect y</em></dt>
<dd><p>Restrict <var>y</var> to the portion of the Y axis covered by <var>rect</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dclamp"></a>Procedure: <strong>rect-clamp</strong> <em><var>rect1</var> <var>rect2</var></em></dt>
+<dt><a name="index-rect_002dclamp"></a>Procedure: <strong>rect-clamp</strong> <em>rect1 rect2</em></dt>
<dd><p>Return a new rect that adjusts the location of <var>rect1</var> so that it
is completely within <var>rect2</var>. An exception is thrown in the case
that <var>rect1</var> cannot fit completely within <var>rect2</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dmove"></a>Procedure: <strong>rect-move</strong> <em><var>rect</var> <var>x</var> <var>y</var></em></dt>
+<dt><a name="index-rect_002dmove"></a>Procedure: <strong>rect-move</strong> <em>rect x y</em></dt>
<dd><p>Return a new rectangle based on <var>rect</var> but moved to the
coordinates (<var>x</var>, <var>y</var>).
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dmove_002dvec2"></a>Procedure: <strong>rect-move-vec2</strong> <em><var>rect</var> <var>v</var></em></dt>
+<dt><a name="index-rect_002dmove_002dvec2"></a>Procedure: <strong>rect-move-vec2</strong> <em>rect v</em></dt>
<dd><p>Return a new rectangle based on <var>rect</var> but moved to the
coordinates in the 2D vector <var>v</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dmove_002dby"></a>Procedure: <strong>rect-move-by</strong> <em><var>rect</var> <var>x</var> <var>y</var></em></dt>
+<dt><a name="index-rect_002dmove_002dby"></a>Procedure: <strong>rect-move-by</strong> <em>rect x y</em></dt>
<dd><p>Return a new rectangle based on <var>rect</var> but moved by (<var>x</var>,
<var>y</var>) units relative to its current location.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dmove_002dby_002dvec2"></a>Procedure: <strong>rect-move-by-vec2</strong> <em><var>rect</var> <var>v</var></em></dt>
+<dt><a name="index-rect_002dmove_002dby_002dvec2"></a>Procedure: <strong>rect-move-by-vec2</strong> <em>rect v</em></dt>
<dd><p>Return a new rectangle based on <var>rect</var> but moved by the 2D vector
<var>v</var> relative to its current location.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dinflate"></a>Procedure: <strong>rect-inflate</strong> <em><var>rect</var> <var>width</var> <var>height</var></em></dt>
+<dt><a name="index-rect_002dinflate"></a>Procedure: <strong>rect-inflate</strong> <em>rect width height</em></dt>
<dd><p>Return a new rectangle based on <var>rect</var>, but expanded by
<var>width</var> units on the X axis and <var>height</var> units on the Y axis,
while keeping the rectangle centered on the same point.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dunion"></a>Procedure: <strong>rect-union</strong> <em><var>rect1</var> <var>rect2</var></em></dt>
+<dt><a name="index-rect_002dunion"></a>Procedure: <strong>rect-union</strong> <em>rect1 rect2</em></dt>
<dd><p>Return a new rectangle that completely covers the area of <var>rect1</var>
and <var>rect2</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dclip"></a>Procedure: <strong>rect-clip</strong> <em><var>rect1</var> <var>rect2</var></em></dt>
+<dt><a name="index-rect_002dclip"></a>Procedure: <strong>rect-clip</strong> <em>rect1 rect2</em></dt>
<dd><p>Return a new rectangle that is the overlapping region of <var>rect1</var>
and <var>rect2</var>. If the two rectangles do not overlap, a rectangle of
0 width and 0 height is returned.
</p></dd></dl>
<dl>
-<dt><a name="index-set_002drect_002dx_0021"></a>Procedure: <strong>set-rect-x!</strong> <em><var>rect</var> <var>x</var></em></dt>
+<dt><a name="index-set_002drect_002dx_0021"></a>Procedure: <strong>set-rect-x!</strong> <em>rect x</em></dt>
<dd><p>Set the left X coordinate of <var>rect</var> to <var>x</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-set_002drect_002dy_0021"></a>Procedure: <strong>set-rect-y!</strong> <em><var>rect</var> <var>y</var></em></dt>
+<dt><a name="index-set_002drect_002dy_0021"></a>Procedure: <strong>set-rect-y!</strong> <em>rect y</em></dt>
<dd><p>Set the bottom Y coordinate of <var>rect</var> to <var>y</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-set_002drect_002dwidth_0021"></a>Procedure: <strong>set-rect-width!</strong> <em><var>rect</var> <var>width</var></em></dt>
+<dt><a name="index-set_002drect_002dwidth_0021"></a>Procedure: <strong>set-rect-width!</strong> <em>rect width</em></dt>
<dd><p>Set the width of <var>rect</var> to <var>width</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-set_002drect_002dheight_0021"></a>Procedure: <strong>set-rect-height!</strong> <em><var>rect</var> <var>height</var></em></dt>
+<dt><a name="index-set_002drect_002dheight_0021"></a>Procedure: <strong>set-rect-height!</strong> <em>rect height</em></dt>
<dd><p>Set the height of <var>rect</var> to <var>height</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dmove_0021"></a>Procedure: <strong>rect-move!</strong> <em><var>rect</var> <var>x</var> <var>y</var></em></dt>
+<dt><a name="index-rect_002dmove_0021"></a>Procedure: <strong>rect-move!</strong> <em>rect x y</em></dt>
<dd><p>Move <var>rect</var> to (<var>x</var>, <var>y</var>) in-place.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dmove_002dvec2_0021"></a>Procedure: <strong>rect-move-vec2!</strong> <em><var>rect</var> <var>v</var></em></dt>
+<dt><a name="index-rect_002dmove_002dvec2_0021"></a>Procedure: <strong>rect-move-vec2!</strong> <em>rect v</em></dt>
<dd><p>Move <var>rect</var> to the 2D vector <var>v</var> in-place.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dmove_002dby_0021"></a>Procedure: <strong>rect-move-by!</strong> <em><var>rect</var> <var>x</var> <var>y</var></em></dt>
+<dt><a name="index-rect_002dmove_002dby_0021"></a>Procedure: <strong>rect-move-by!</strong> <em>rect x y</em></dt>
<dd><p>Move <var>rect</var> by (<var>x</var>, <var>y</var>) in-place.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dmove_002dby_002dvec2_0021"></a>Procedure: <strong>rect-move-by-vec2!</strong> <em><var>rect</var> <var>v</var></em></dt>
+<dt><a name="index-rect_002dmove_002dby_002dvec2_0021"></a>Procedure: <strong>rect-move-by-vec2!</strong> <em>rect v</em></dt>
<dd><p>Move <var>rect</var> by the 2D vector <var>v</var> in-place.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dinflate_0021"></a>Procedure: <strong>rect-inflate!</strong> <em><var>rect</var> <var>width</var> <var>height</var></em></dt>
+<dt><a name="index-rect_002dinflate_0021"></a>Procedure: <strong>rect-inflate!</strong> <em>rect width height</em></dt>
<dd><p>Expand <var>rect</var> by <var>width</var> and <var>height</var> in-place.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dunion_0021"></a>Procedure: <strong>rect-union!</strong> <em><var>rect1</var> <var>rect2</var></em></dt>
+<dt><a name="index-rect_002dunion_0021"></a>Procedure: <strong>rect-union!</strong> <em>rect1 rect2</em></dt>
<dd><p>Modify <var>rect1</var> in-place to completely cover the area of both
<var>rect1</var> and <var>rect2</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dclip_0021"></a>Procedure: <strong>rect-clip!</strong> <em><var>rect1</var> <var>rect2</var></em></dt>
+<dt><a name="index-rect_002dclip_0021"></a>Procedure: <strong>rect-clip!</strong> <em>rect1 rect2</em></dt>
<dd><p>Modify <var>rect1</var> in-place to be the overlapping region of
<var>rect1</var> and <var>rect2</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-rect_002dclamp_0021"></a>Procedure: <strong>rect-clamp!</strong> <em><var>rect1</var> <var>rect2</var></em></dt>
+<dt><a name="index-rect_002dclamp_0021"></a>Procedure: <strong>rect-clamp!</strong> <em>rect1 rect2</em></dt>
<dd><p>Adjust the location of <var>rect1</var> in-place so that its bounds are
completely within <var>rect2</var>. An exception is thrown in the case
that <var>rect1</var> cannot fit completely within <var>rect2</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec2_002dclamp_002dto_002drect_0021"></a>Procedure: <strong>vec2-clamp-to-rect!</strong> <em><var>v</var> <var>rect</var></em></dt>
+<dt><a name="index-vec2_002dclamp_002dto_002drect_0021"></a>Procedure: <strong>vec2-clamp-to-rect!</strong> <em>v rect</em></dt>
<dd><p>Restrict the coordinates of the 2D vector <var>v</var> so that they are
within the bounds of <var>rect</var>. <var>v</var> is modified in-place.
</p></dd></dl>
diff --git a/manuals/chickadee/Rendering-Engine.html b/manuals/chickadee/Rendering-Engine.html
index fa9f021..daef0ce 100644
--- a/manuals/chickadee/Rendering-Engine.html
+++ b/manuals/chickadee/Rendering-Engine.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -30,8 +32,8 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="Index.html#Index" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Graphics.html#Graphics" rel="up" title="Graphics">
-<link href="Textures.html#Textures" rel="next" title="Textures">
-<link href="Graphics.html#Graphics" rel="prev" title="Graphics">
+<link href="Buffers.html#Buffers" rel="next" title="Buffers">
+<link href="Viewports.html#Viewports" rel="prev" title="Viewports">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
@@ -90,18 +92,19 @@ ul.no-bullet {list-style: none}
<a name="Rendering-Engine"></a>
<div class="header">
<p>
-Next: <a href="Textures.html#Textures" accesskey="n" rel="next">Textures</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Buffers.html#Buffers" accesskey="n" rel="next">Buffers</a>, Previous: <a href="Viewports.html#Viewports" accesskey="p" rel="prev">Viewports</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Rendering-Engine-1"></a>
-<h4 class="subsection">2.3.1 Rendering Engine</h4>
+<h4 class="subsection">2.3.10 Rendering Engine</h4>
<p>Chickadee defines rendering using a metaphor familiar to Scheme
programmers: procedure application. A shader (see <a href="Shaders.html#Shaders">Shaders</a>) is
like a procedure for the GPU to apply. Shaders are passed arguments:
-A vertex array containing the geometry to render (see <a href="Vertex-Arrays.html#Vertex-Arrays">Vertex Arrays</a>) and zero or more keyword arguments that the shader
-understands. Similar to how Scheme has <code>apply</code> for calling
-procedures, Chickadee provides <code>gpu-apply</code> for calling shaders.
+A vertex array containing the geometry to render (see <a href="Buffers.html#Buffers">Buffers</a>) and
+zero or more keyword arguments that the shader understands. Similar
+to how Scheme has <code>apply</code> for calling procedures, Chickadee
+provides <code>gpu-apply</code> for calling shaders.
</p>
<p>Additionally, there is some dynamic state that effects how
<code>gpu-apply</code> will behave. Things like the current viewport,
@@ -113,16 +116,31 @@ would be tedious to have to have to specify them each time
<code>(chickadee render)</code> module.
</p>
<dl>
-<dt><a name="index-gpu_002dapply"></a>Syntax: <strong>gpu-apply</strong> <em><var>shader</var> <var>vertex-array</var> [#:uniform-key <var>uniform-value</var> ...]</em></dt>
-<dt><a name="index-gpu_002dapply_002a"></a>Syntax: <strong>gpu-apply*</strong> <em><var>shader</var> <var>vertex-array</var> <var>count</var> [#:uniform-key <var>uniform-value</var> ...]</em></dt>
+<dt><a name="index-gpu_002dapply"></a>Syntax: <strong>gpu-apply</strong> <em>shader vertex-array [#:uniform-key uniform-value &hellip;]</em></dt>
+<dt><a name="index-gpu_002dapply_002a"></a>Syntax: <strong>gpu-apply*</strong> <em>shader vertex-array count [#:uniform-key uniform-value &hellip;]</em></dt>
<dd>
<p>Render <var>vertex-array</var> using <var>shader</var> with the uniform values
specified in the following keyword arguments.
</p>
<p>While <code>gpu-apply</code> will draw every vertex in <var>vertex-array</var>,
<code>gpu-apply*</code> will only draw <var>count</var> vertices.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-gpu_002dapply_002finstanced"></a>Syntax: <strong>gpu-apply/instanced</strong> <em>shader vertex-array n [#:uniform-key uniform-value &hellip;]</em></dt>
+<dt><a name="index-gpu_002dapply_002finstanced-1"></a>Syntax: <strong>gpu-apply/instanced</strong> <em>shader vertex-array count n [#:uniform-key uniform-value &hellip;]</em></dt>
+<dd>
+<p>Render <var>vertex-array</var> <var>n</var> times using <var>shader</var> with the
+uniform values specified in the following keyword arguments.
+</p>
+<p>Instanced rendering is very beneficial for rendering the same object
+many times with only small differences for each one. For example, the
+particle effects described in <a href="Particles.html#Particles">Particles</a> use instanced rendering.
</p>
-</dd></dl>
+<p>While <code>gpu-apply/instanced</code> will draw every vertex in
+<var>vertex-array</var>, <code>gpu-apply*</code> will only draw <var>count</var>
+vertices.
+</p></dd></dl>
<dl>
<dt><a name="index-current_002dviewport"></a>Procedure: <strong>current-viewport</strong></dt>
@@ -136,12 +154,12 @@ specified in the following keyword arguments.
<dl>
<dt><a name="index-current_002dblend_002dmode"></a>Procedure: <strong>current-blend-mode</strong></dt>
-<dd><p>Return the currently bound blend mode (see <a href="Blending-and-Depth-Testing.html#Blending-and-Depth-Testing">Blending and Depth Testing</a>).
+<dd><p>Return the currently bound blend mode (see <a href="Blending.html#Blending">Blending</a>).
</p></dd></dl>
<dl>
<dt><a name="index-current_002ddepth_002dtest"></a>Procedure: <strong>current-depth-test</strong></dt>
-<dd><p>Return <code>#t</code> if depth testing is currently enabled (see <a href="Blending-and-Depth-Testing.html#Blending-and-Depth-Testing">Blending and Depth Testing</a>).
+<dd><p>Return <code>#t</code> if depth testing is currently enabled (see <a href="Blending.html#Blending">Blending</a>).
</p></dd></dl>
<dl>
@@ -155,36 +173,36 @@ specified in the following keyword arguments.
</p></dd></dl>
<dl>
-<dt><a name="index-with_002dviewport"></a>Syntax: <strong>with-viewport</strong> <em><var>viewport</var> <var>body</var> ...</em></dt>
+<dt><a name="index-with_002dviewport"></a>Syntax: <strong>with-viewport</strong> <em>viewport body &hellip;</em></dt>
<dd><p>Evaluate <var>body</var> with the current viewport bound to <var>viewport</var> (see <a href="Viewports.html#Viewports">Viewports</a>).
</p></dd></dl>
<dl>
-<dt><a name="index-with_002dframebuffer"></a>Syntax: <strong>with-framebuffer</strong> <em><var>framebuffer</var> <var>body</var> ...</em></dt>
+<dt><a name="index-with_002dframebuffer"></a>Syntax: <strong>with-framebuffer</strong> <em>framebuffer body &hellip;</em></dt>
<dd><p>Evaluate <var>body</var> with the current framebuffer bound to
<var>framebuffer</var> (see <a href="Framebuffers.html#Framebuffers">Framebuffers</a>).
</p></dd></dl>
<dl>
-<dt><a name="index-with_002dblend_002dmode"></a>Syntax: <strong>with-blend-mode</strong> <em><var>blend-mode</var> <var>body</var> ...</em></dt>
+<dt><a name="index-with_002dblend_002dmode"></a>Syntax: <strong>with-blend-mode</strong> <em>blend-mode body &hellip;</em></dt>
<dd><p>Evaluate <var>body</var> with the current blend mode bound to
-<var>blend-mode</var> (see <a href="Blending-and-Depth-Testing.html#Blending-and-Depth-Testing">Blending and Depth Testing</a>).
+<var>blend-mode</var> (see <a href="Blending.html#Blending">Blending</a>).
</p></dd></dl>
<dl>
-<dt><a name="index-with_002ddepth_002dtest"></a>Syntax: <strong>with-depth-test</strong> <em><var>depth-test?</var> <var>body</var> ...</em></dt>
+<dt><a name="index-with_002ddepth_002dtest"></a>Syntax: <strong>with-depth-test</strong> <em>depth-test? body &hellip;</em></dt>
<dd><p>Evaluate <var>body</var> with the depth-test disabled if <var>depth-test?</var>
-is <code>#f</code>, or enabled otherwise (see <a href="Blending-and-Depth-Testing.html#Blending-and-Depth-Testing">Blending and Depth Testing</a>).
+is <code>#f</code>, or enabled otherwise (see <a href="Blending.html#Blending">Blending</a>).
</p></dd></dl>
<dl>
-<dt><a name="index-with_002dtexture"></a>Syntax: <strong>with-texture</strong> <em><var>texture</var> <var>body</var> ...</em></dt>
+<dt><a name="index-with_002dtexture"></a>Syntax: <strong>with-texture</strong> <em>texture body &hellip;</em></dt>
<dd><p>Evaluate <var>body</var> with the current texture bound to <var>texture</var>
(see <a href="Textures.html#Textures">Textures</a>).
</p></dd></dl>
<dl>
-<dt><a name="index-with_002dprojection"></a>Syntax: <strong>with-projection</strong> <em><var>projection</var> <var>body</var> ...</em></dt>
+<dt><a name="index-with_002dprojection"></a>Syntax: <strong>with-projection</strong> <em>projection body &hellip;</em></dt>
<dd><p>Evaluate <var>body</var> with the current projection matrix bound to
<var>projection</var> (see <a href="Matrices.html#Matrices">Matrices</a>).
</p></dd></dl>
@@ -192,7 +210,7 @@ is <code>#f</code>, or enabled otherwise (see <a href="Blending-and-Depth-Testin
<hr>
<div class="header">
<p>
-Next: <a href="Textures.html#Textures" accesskey="n" rel="next">Textures</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Buffers.html#Buffers" accesskey="n" rel="next">Buffers</a>, Previous: <a href="Viewports.html#Viewports" accesskey="p" rel="prev">Viewports</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
</div>
diff --git a/manuals/chickadee/Requirements.html b/manuals/chickadee/Requirements.html
index e860a2f..d55e911 100644
--- a/manuals/chickadee/Requirements.html
+++ b/manuals/chickadee/Requirements.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
diff --git a/manuals/chickadee/Scripting.html b/manuals/chickadee/Scripting.html
index dd82e04..dd85378 100644
--- a/manuals/chickadee/Scripting.html
+++ b/manuals/chickadee/Scripting.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -31,7 +33,7 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="API-Reference.html#API-Reference" rel="up" title="API Reference">
<link href="Agendas.html#Agendas" rel="next" title="Agendas">
-<link href="Viewports.html#Viewports" rel="prev" title="Viewports">
+<link href="Shaders.html#Shaders" rel="prev" title="Shaders">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
diff --git a/manuals/chickadee/Scripts.html b/manuals/chickadee/Scripts.html
index c9939f5..b8472dc 100644
--- a/manuals/chickadee/Scripts.html
+++ b/manuals/chickadee/Scripts.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -141,59 +143,54 @@ script is returned that can be used to cancel it when desired.
</pre></div>
<dl>
-<dt><a name="index-spawn_002dscript"></a>Procedure: <strong>spawn-script</strong> <em><var>thunk</var></em></dt>
+<dt><a name="index-spawn_002dscript"></a>Procedure: <strong>spawn-script</strong> <em>thunk</em></dt>
<dd><p>Apply <var>thunk</var> as a script and return a handle to it.
</p></dd></dl>
<dl>
-<dt><a name="index-script"></a>Syntax: <strong>script</strong> <em><var>body</var> &hellip;</em></dt>
+<dt><a name="index-script"></a>Syntax: <strong>script</strong> <em>body &hellip;</em></dt>
<dd><p>Evaluate <var>body</var> as a script and return a handle to it.
</p></dd></dl>
<dl>
-<dt><a name="index-script_003f"></a>Procedure: <strong>script?</strong> <em><var>obj</var></em></dt>
+<dt><a name="index-script_003f"></a>Procedure: <strong>script?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> is a script handle.
</p></dd></dl>
<dl>
-<dt><a name="index-script_002dcancelled_003f"></a>Procedure: <strong>script-cancelled?</strong> <em><var>obj</var></em></dt>
+<dt><a name="index-script_002dcancelled_003f"></a>Procedure: <strong>script-cancelled?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> has been cancelled.
</p></dd></dl>
<dl>
-<dt><a name="index-script_002drunning_003f"></a>Procedure: <strong>script-running?</strong> <em><var>obj</var></em></dt>
+<dt><a name="index-script_002drunning_003f"></a>Procedure: <strong>script-running?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> has not yet terminated or been
cancelled.
</p></dd></dl>
<dl>
-<dt><a name="index-script_002dcomplete_003f"></a>Procedure: <strong>script-complete?</strong> <em><var>obj</var></em></dt>
+<dt><a name="index-script_002dcomplete_003f"></a>Procedure: <strong>script-complete?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> has terminated.
</p></dd></dl>
<dl>
-<dt><a name="index-cancel_002dscript"></a>Procedure: <strong>cancel-script</strong> <em><var>co</var></em></dt>
+<dt><a name="index-cancel_002dscript"></a>Procedure: <strong>cancel-script</strong> <em>co</em></dt>
<dd><p>Prevent further execution of the script <var>co</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-yield"></a>Procedure: <strong>yield</strong> <em><var>handler</var></em></dt>
+<dt><a name="index-yield"></a>Procedure: <strong>yield</strong> <em>handler</em></dt>
<dd><p>Suspend the current script and pass its continuation to the
procedure <var>handler</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-sleep"></a>Procedure: <strong>sleep</strong> <em><var>duration</var></em></dt>
+<dt><a name="index-sleep"></a>Procedure: <strong>sleep</strong> <em>duration</em></dt>
<dd><p>Wait <var>duration</var> before resuming the current script.
</p></dd></dl>
<dl>
-<dt><a name="index-channel_002dget"></a>Procedure: <strong>channel-get</strong> <em><var>channel</var></em></dt>
-<dd><p>Wait for a message from <var>channel</var>.
-</p></dd></dl>
-
-<dl>
-<dt><a name="index-forever"></a>Syntax: <strong>forever</strong> <em><var>body</var> &hellip;</em></dt>
+<dt><a name="index-forever"></a>Syntax: <strong>forever</strong> <em>body &hellip;</em></dt>
<dd><p>Evaluate <var>body</var> in an endless loop.
</p></dd></dl>
diff --git a/manuals/chickadee/Shaders.html b/manuals/chickadee/Shaders.html
index 70173a4..9d3e555 100644
--- a/manuals/chickadee/Shaders.html
+++ b/manuals/chickadee/Shaders.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -30,8 +32,8 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="Index.html#Index" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Graphics.html#Graphics" rel="up" title="Graphics">
-<link href="Framebuffers.html#Framebuffers" rel="next" title="Framebuffers">
-<link href="Vertex-Arrays.html#Vertex-Arrays" rel="prev" title="Vertex Arrays">
+<link href="Scripting.html#Scripting" rel="next" title="Scripting">
+<link href="Buffers.html#Buffers" rel="prev" title="Buffers">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
@@ -90,18 +92,172 @@ ul.no-bullet {list-style: none}
<a name="Shaders"></a>
<div class="header">
<p>
-Next: <a href="Framebuffers.html#Framebuffers" accesskey="n" rel="next">Framebuffers</a>, Previous: <a href="Vertex-Arrays.html#Vertex-Arrays" accesskey="p" rel="prev">Vertex Arrays</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+Previous: <a href="Buffers.html#Buffers" accesskey="p" rel="prev">Buffers</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Shaders-1"></a>
-<h4 class="subsection">2.3.9 Shaders</h4>
+<h4 class="subsection">2.3.12 Shaders</h4>
+
+<p>Shaders are programs that the GPU can evaluate that allow the
+programmer to completely customized the final output of a GPU draw
+call. The <code>(chickadee render shader)</code> module provides an API for
+building custom shaders.
+</p>
+<p>Shaders are written in the OpenGL Shading Language, or GLSL for short.
+Chickadee aspires to provide a domain specific language for writing
+shaders in Scheme, but we are not there yet.
+</p>
+<p>Shader programs consist of two components: A vertex shader and a
+fragment shader. A vertex shader receives vertex data (position
+coordinates, texture coordinates, normals, etc.) and transforms them
+as desired, whereas a fragment shader controls the color of each
+pixel.
+</p>
+<p>Sample vertex shader:
+</p>
+<div class="example">
+<pre class="verbatim">#version 130
+
+in vec2 position;
+in vec2 tex;
+out vec2 fragTex;
+uniform mat4 mvp;
+
+void main(void) {
+ fragTex = tex;
+ gl_Position = mvp * vec4(position.xy, 0.0, 1.0);
+}
+</pre></div>
+
+<p>Sample fragment shader:
+</p>
+<div class="example">
+<pre class="verbatim">#version 130
+
+in vec2 fragTex;
+uniform sampler2D colorTexture;
+
+void main (void) {
+ gl_FragColor = texture2D(colorTexture, fragTex);
+}
+</pre></div>
+
+<p>This manual will not cover GLSL features and syntax as there is lots
+of information already available about this topic.
+</p>
+<p>One way to think about rendering with shaders, and the metaphor
+Chickadee uses, is to think about it as a function call: The shader is
+a function, and it is applied to some &ldquo;attributes&rdquo; (positional
+arguments), and some &ldquo;uniforms&rdquo; (keyword arguments).
+</p>
+<div class="example">
+<pre class="example">(define my-shader (load-shader &quot;vert.glsl&quot; &quot;frag.glsl&quot;))
+(define vertices (make-vertex-array &hellip;))
+(gpu-apply my-shader vertices #:color red)
+</pre></div>
-<p>Shaders are programs for the GPU to evaluate. They are written in the
-OpenGL Shading Language, or GLSL. Chickadee does not currently
-provide a Scheme-like domain specific language for writing shaders.
-Since shaders must be written in GLSL and not Scheme, they are
-considered an advanced feature.
+<p>See <a href="Rendering-Engine.html#Rendering-Engine">Rendering Engine</a> for more details about the <code>gpu-apply</code>
+procedure.
+</p>
+<p>Shaders are incredibly powerful tools, and there&rsquo;s more information
+about them than we could ever fit into this manual, so we highly
+recommend searching the web for more information and examples. What
+we can say, though, is how to use our API:
</p>
+<dl>
+<dt><a name="index-strings_002d_003eshader"></a>Procedure: <strong>strings-&gt;shader</strong> <em>vertex-source fragment-source</em></dt>
+<dd><p>Compile <var>vertex-source</var>, the GLSL code for the vertex shader, and
+<var>fragment-source</var>, the GLSL code for the fragment shader, into a
+GPU shader program.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-load_002dshader"></a>Procedure: <strong>load-shader</strong> <em>vertex-source-file fragment-source-file</em></dt>
+<dd><p>Compile the GLSL source code within <var>vertex-source-file</var> and
+<var>fragment-source-file</var> into a GPU shader program.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-make_002dshader"></a>Procedure: <strong>make-shader</strong> <em>vertex-port fragment-port</em></dt>
+<dd><p>Read GLSL source from <var>vertex-port</var> and <var>fragment-port</var> and
+compile them into a GPU shader program.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-shader_003f"></a>Procedure: <strong>shader?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a shader.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-null_002dshader"></a>Variable: <strong>null-shader</strong></dt>
+<dd><p>Represents the absence shader program.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-shader_002duniform"></a>Procedure: <strong>shader-uniform</strong> <em>shader name</em></dt>
+<dd><p>Return the metadata for the uniform <var>name</var> in <var>shader</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-shader_002duniforms"></a>Procedure: <strong>shader-uniforms</strong> <em>shader</em></dt>
+<dd><p>Return a hash table of uniforms for <var>shader</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-shader_002dattributes"></a>Procedure: <strong>shader-attributes</strong> <em>shader</em></dt>
+<dd><p>Return a hash table of attributes for <var>shader</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-uniform_003f"></a>Procedure: <strong>uniform?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a uniform.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-uniform_002dname"></a>Procedure: <strong>uniform-name</strong> <em>uniform</em></dt>
+<dd><p>Return the variable name of <var>uniform</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-uniform_002dtype"></a>Procedure: <strong>uniform-type</strong> <em>uniform</em></dt>
+<dd><p>Return the data type of <var>uniform</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-uniform_002dvalue"></a>Procedure: <strong>uniform-value</strong> <em>uniform</em></dt>
+<dd><p>Return the current value of <var>uniform</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-uniform_002ddefault_002dvalue"></a>Procedure: <strong>uniform-default-value</strong> <em>uniform</em></dt>
+<dd><p>Return the default value of <var>uniform</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-attribute_003f"></a>Procedure: <strong>attribute?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is an attribute.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-attribute_002dname"></a>Procedure: <strong>attribute-name</strong> <em>attribute</em></dt>
+<dd><p>Return the variable name of <var>attribute</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-attribute_002dlocation"></a>Procedure: <strong>attribute-location</strong> <em>attribute</em></dt>
+<dd><p>Return the binding location of <var>attribute</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-attribute_002dtype"></a>Procedure: <strong>attribute-type</strong> <em>attribute</em></dt>
+<dd><p>Return the data type of <var>attribute</var>.
+</p></dd></dl>
+
+<hr>
+<div class="header">
+<p>
+Previous: <a href="Buffers.html#Buffers" accesskey="p" rel="prev">Buffers</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+</div>
diff --git a/manuals/chickadee/Sprites.html b/manuals/chickadee/Sprites.html
index 29d16ea..a0e308b 100644
--- a/manuals/chickadee/Sprites.html
+++ b/manuals/chickadee/Sprites.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -94,7 +96,7 @@ Next: <a href="Tile-Maps.html#Tile-Maps" accesskey="n" rel="next">Tile Maps</a>,
</div>
<hr>
<a name="Sprites-1"></a>
-<h4 class="subsection">2.3.3 Sprites</h4>
+<h4 class="subsection">2.3.2 Sprites</h4>
<p>For those who are new to this game, a sprite is a 2D rectangular
bitmap that is rendered to the screen. For 2D games, sprites are the
@@ -104,7 +106,7 @@ stored in textures (see <a href="Textures.html#Textures">Textures</a>) and can b
via the <code>draw-sprite</code> procedure.
</p>
<dl>
-<dt><a name="index-draw_002dsprite"></a>Procedure: <strong>draw-sprite</strong> <em><var>texture</var> <var>position</var> [#:origin] [#:scale] [#:rotation] [#:blend-mode alpha] [#:rect] [#:shader]</em></dt>
+<dt><a name="index-draw_002dsprite"></a>Procedure: <strong>draw-sprite</strong> <em>texture position [#:tint white] [#:origin] [#:scale] [#:rotation] [#:blend-mode alpha] [#:rect]</em></dt>
<dd>
<p>Draw <var>texture</var> at <var>position</var>.
</p>
@@ -114,47 +116,80 @@ via the <code>draw-sprite</code> procedure.
transformations are applied relative to <var>origin</var>, a 2D vector,
which defaults to the lower-left corner.
</p>
+<p><var>tint</var> specifies the color to multiply against all the sprite&rsquo;s
+pixels. By default white is used, which does no tinting at all.
+</p>
<p>Alpha blending is used by default but the blending method can be
changed by specifying <var>blend-mode</var>.
</p>
<p>The area drawn to is as big as the texture, by default. To draw to an
arbitrary section of the screen, specify <var>rect</var>.
-</p>
-<p>Finally, advanced users may specify <var>shader</var> to change the way the
-sprite is rendered entirely.
</p></dd></dl>
<p>It&rsquo;s not uncommon to need to draw hundreds or thousands of sprites
each frame. However, GPUs (graphics processing units) are tricky
beasts that prefer to be sent few, large chunks of data to render
rather than many, small chunks. Using <code>draw-sprite</code> on its own
-will involve at least one GPU call <em>per sprite</em>, which will
-quickly lead to poor performance. To deal with this, a technique
-known as &ldquo;sprite batching&rdquo; can be used. Instead of drawing each
-sprite immediately, the sprite batch will build up a large of buffer
-of sprites to draw and defer rendering until the last possible moment.
-Batching isn&rsquo;t a panacea, though. Batching only works if the sprites
-being drawn share as much in common as possible. Every time you draw
-a sprite with a different texture or blend mode, the batch will be
-sent off to the GPU. Therefore, batching is most useful if you
-minimize such changes. A good strategy for reducing texture changes
-is to stuff many bitmaps into a single image file and create a
-&ldquo;texture atlas&rdquo; (see <a href="Textures.html#Textures">Textures</a>) to access the sub-images within.
+will involve at least one GPU call <em>per sprite</em>. This is fine
+for rendering a few dozen sprites, but will become a serious
+bottleneck when rendering hundreds or thousands of sprites. To deal
+with this, a technique known as &ldquo;sprite batching&rdquo; is used. Instead
+of drawing each sprite immediately, the sprite batch will build up a
+large of buffer of sprites to draw and send them to the GPU all at
+once. There is one caveat, however. Batching only works if the
+sprites being drawn share a common texture. A good strategy for
+reducing the number of different textures is to stuff many bitmaps
+into a single image file and create a &ldquo;texture atlas&rdquo;
+(see <a href="Textures.html#Textures">Textures</a>) to access the sub-images within.
</p>
-<p>Taking advantage of sprite batching in Chickadee is easy, just wrap
-the code that is calling <code>draw-sprite</code> a lot in the
-<code>with-batched-sprites</code> form.
+<dl>
+<dt><a name="index-make_002dsprite_002dbatch"></a>Procedure: <strong>make-sprite-batch</strong> <em>texture [#:capacity 256]</em></dt>
+<dd><p>Create a new sprite batch for <var>texture</var> with initial space for
+<var>capacity</var> sprites. Sprite batches automatically resize when they
+are full to accomodate as many sprites as necessary.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-sprite_002dbatch_003f"></a>Procedure: <strong>sprite-batch?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a sprite batch.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-sprite_002dbatch_002dtexture"></a>Procedure: <strong>sprite-batch-texture</strong> <em>batch</em></dt>
+<dd><p>Return the texture for <var>batch</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-set_002dsprite_002dbatch_002dtexture_0021"></a>Procedure: <strong>set-sprite-batch-texture!</strong> <em>batch texture</em></dt>
+<dd><p>Set texture for <var>batch</var> to <var>texture</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-sprite_002dbatch_002dadd_0021"></a>Procedure: <strong>sprite-batch-add!</strong> <em>batch position [#:origin] [#:scale] [:rotation] [#:tint <code>white</code>] [#:texture-region]</em></dt>
+<dd>
+<p>Add sprite located at <var>position</var> to <var>batch</var>.
+</p>
+<p>To render a subsection of the batch&rsquo;s texture, a texture object whose
+parent is the batch texture may be specified as <var>texture-region</var>.
</p>
+<p>See <code>draw-sprite</code> for information about the other arguments.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-sprite_002dbatch_002dclear_0021"></a>Procedure: <strong>sprite-batch-clear!</strong> <em>batch</em></dt>
+<dd><p>Reset size of <var>batch</var> to 0.
+</p></dd></dl>
+
<dl>
-<dt><a name="index-with_002dbatched_002dsprites"></a>Syntax: <strong>with-batched-sprites</strong> <em><var>body</var> &hellip;</em></dt>
-<dd><p>Use batched rendering for all <code>draw-sprite</code> calls within
-<var>body</var>.
+<dt><a name="index-draw_002dsprite_002dbatch"></a>Procedure: <strong>draw-sprite-batch</strong> <em>batch [#:blend-mode <code>alpha</code>]</em></dt>
+<dd><p>Render <var>batch</var> using <var>blend-mode</var>. Alpha blending is used by
+default.
</p></dd></dl>
<p>With a basic sprite abstraction in place, it&rsquo;s possible to build other
abstractions on top of it. One such example is the &ldquo;nine patch&rdquo;. A
nine patch is a sprite that can be rendered at various sizes without
-becoming distorted. This is achieved by diving up the sprite into
+becoming distorted. This is achieved by dividing up the sprite into
nine regions:
</p>
<ul>
@@ -175,7 +210,7 @@ patch, they can be rendered at any size without unappealing scaling
artifacts.
</p>
<dl>
-<dt><a name="index-draw_002dnine_002dpatch"></a>Procedure: <strong>draw-nine-patch</strong> <em><var>texture</var> <var>rect</var> [#:margin 0] [#:top-margin margin] [#:bottom-margin margin] [#:left-margin margin] [#:right-margin margin] [#:origin] [#:scale] [#:rotation] [#:blend-mode alpha] [#:shader]</em></dt>
+<dt><a name="index-draw_002dnine_002dpatch"></a>Procedure: <strong>draw-nine-patch</strong> <em>texture rect [#:margin 0] [#:top-margin margin] [#:bottom-margin margin] [#:left-margin margin] [#:right-margin margin] [#:origin] [#:scale] [#:rotation] [#:blend-mode alpha] [#:tint white]</em></dt>
<dd>
<p>Draw a nine patch sprite. A nine patch sprite renders <var>texture</var>
as a <var>width</var> x <var>height</var> rectangle whose stretchable areas are
diff --git a/manuals/chickadee/Textures.html b/manuals/chickadee/Textures.html
index b9bb778..f7de7ab 100644
--- a/manuals/chickadee/Textures.html
+++ b/manuals/chickadee/Textures.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -31,7 +33,7 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Graphics.html#Graphics" rel="up" title="Graphics">
<link href="Sprites.html#Sprites" rel="next" title="Sprites">
-<link href="Rendering-Engine.html#Rendering-Engine" rel="prev" title="Rendering Engine">
+<link href="Graphics.html#Graphics" rel="prev" title="Graphics">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
@@ -90,14 +92,14 @@ ul.no-bullet {list-style: none}
<a name="Textures"></a>
<div class="header">
<p>
-Next: <a href="Sprites.html#Sprites" accesskey="n" rel="next">Sprites</a>, Previous: <a href="Rendering-Engine.html#Rendering-Engine" accesskey="p" rel="prev">Rendering Engine</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Sprites.html#Sprites" accesskey="n" rel="next">Sprites</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Textures-1"></a>
-<h4 class="subsection">2.3.2 Textures</h4>
+<h4 class="subsection">2.3.1 Textures</h4>
<dl>
-<dt><a name="index-load_002dimage"></a>Procedure: <strong>load-image</strong> <em><var>file</var> [#:min-filter nearest] [#:mag-filter nearest] [#:wrap-s repeat] [#:wrap-t repeat]</em></dt>
+<dt><a name="index-load_002dimage"></a>Procedure: <strong>load-image</strong> <em>file [#:min-filter nearest] [#:mag-filter nearest] [#:wrap-s repeat] [#:wrap-t repeat]</em></dt>
<dd>
<p>Load the image data from <var>file</var> and return a new texture object.
</p>
@@ -112,6 +114,104 @@ coordinates that are greater than <code>1.0</code>. Possible values are
</p>
</dd></dl>
+<dl>
+<dt><a name="index-texture_003f"></a>Procedure: <strong>texture?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a texture.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-texture_002dregion_003f"></a>Procedure: <strong>texture-region?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a texture region.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-texture_002dparent"></a>Procedure: <strong>texture-parent</strong> <em>texture</em></dt>
+<dd><p>If <var>texture</var> is a texture region, return the full texture that it
+is based upon. Otherwise, return <code>#f</code>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-texture_002dmin_002dfilter"></a>Procedure: <strong>texture-min-filter</strong> <em>texture</em></dt>
+<dd><p>Return the minification filter for <var>texture</var>, either
+<code>nearest</code> or <code>linear</code>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-texture_002dmag_002dfilter"></a>Procedure: <strong>texture-mag-filter</strong> <em>texture</em></dt>
+<dd><p>Return the magnification filter for <var>texture</var>, either
+<code>nearest</code> or <code>linear</code>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-texture_002dwrap_002ds"></a>Procedure: <strong>texture-wrap-s</strong> <em>texture</em></dt>
+<dd><p>Return the method used for wrapping texture coordinates along the X
+axis for <var>texture</var>.
+</p>
+<p>Possible wrapping methods:
+</p><ul>
+<li> <code>repeat</code>
+</li><li> <code>clamp</code>
+</li><li> <code>clamp-to-border</code>
+</li><li> <code>clamp-to-edge</code>
+</li></ul>
+
+</dd></dl>
+
+<dl>
+<dt><a name="index-texture_002dwrap_002dt"></a>Procedure: <strong>texture-wrap-t</strong> <em>texture</em></dt>
+<dd><p>Return the method used for wrapping texture coordinates along the Y
+axis for <var>texture</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-texture_002dwidth"></a>Procedure: <strong>texture-width</strong> <em>texture</em></dt>
+<dd><p>Return the width of <var>texture</var> in pixels.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-texture_002dheight"></a>Procedure: <strong>texture-height</strong> <em>texture</em></dt>
+<dd><p>Return the height of <var>texture</var> in pixels.
+</p></dd></dl>
+
+<p>It is common practice to combine multiple bitmap images into a single
+texture, known as a &ldquo;tile atlas&rdquo; or &ldquo;tile set&rdquo;, because it is more
+efficient to render many regions of a large texture than it is to
+render a bunch of small textures. Chickadee provides a tile atlas
+data type for collecting texture regions into a single vector.
+</p>
+<dl>
+<dt><a name="index-split_002dtexture"></a>Procedure: <strong>split-texture</strong> <em>texture tile-width tile-height [#:margin 0] [#:spacing 0]</em></dt>
+<dd>
+<p>Return a new texture atlas that splits <var>texture</var> into a grid of
+<var>tile-width</var> by <var>tile-height</var> rectangles. Optionally, each
+tile may have <var>spacing</var> pixels of horizontal and vertical space
+between surrounding tiles and the entire image may have <var>margin</var>
+pixels of empty space around its border.
+</p>
+<p>This type of texture atlas layout is very common for 2D tile maps.
+See <a href="Tile-Maps.html#Tile-Maps">Tile Maps</a> for more information.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-texture_002datlas_003f"></a>Procedure: <strong>texture-atlas?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a texture atlas.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-texture_002datlas_002dtexture"></a>Procedure: <strong>texture-atlas-texture</strong> <em>atlas</em></dt>
+<dd><p>Return the texture that all texture regions in <var>atlas</var> have been created from.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-texture_002datlas_002dref"></a>Procedure: <strong>texture-atlas-ref</strong> <em>atlas index</em></dt>
+<dd><p>Return the texture region in <var>atlas</var> at <var>index</var>.
+</p></dd></dl>
+
+<hr>
+<div class="header">
+<p>
+Next: <a href="Sprites.html#Sprites" accesskey="n" rel="next">Sprites</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+</div>
diff --git a/manuals/chickadee/Tile-Maps.html b/manuals/chickadee/Tile-Maps.html
index cdf4f6e..473d720 100644
--- a/manuals/chickadee/Tile-Maps.html
+++ b/manuals/chickadee/Tile-Maps.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -94,7 +96,7 @@ Next: <a href="Lines-and-Shapes.html#Lines-and-Shapes" accesskey="n" rel="next">
</div>
<hr>
<a name="Tile-Maps-1"></a>
-<h4 class="subsection">2.3.4 Tile Maps</h4>
+<h4 class="subsection">2.3.3 Tile Maps</h4>
<p>A tile map is a scene created by composing lots of small sprites,
called &ldquo;tiles&rdquo;, into a larger image. One program for editing such
@@ -103,13 +105,64 @@ support for loading and rendering Tiled maps in the <code>(chickadee
render tiled)</code> module.
</p>
<dl>
-<dt><a name="index-load_002dtile_002dmap"></a>Procedure: <strong>load-tile-map</strong> <em><var>file-name</var></em></dt>
+<dt><a name="index-load_002dtile_002dmap"></a>Procedure: <strong>load-tile-map</strong> <em>file-name</em></dt>
<dd><p>Load the Tiled formatted map in <var>file-name</var> and return a new tile
map object.
</p></dd></dl>
<dl>
-<dt><a name="index-draw_002dtile_002dmap"></a>Procedure: <strong>draw-tile-map</strong> <em><var>tile-map</var> [#:layers] [#:region] [#:origin] [#:position] [#:scale] [#:rotation]</em></dt>
+<dt><a name="index-tile_002dmap_003f"></a>Procedure: <strong>tile-map?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a tile map.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tile_002dmap_002dorientation"></a>Procedure: <strong>tile-map-orientation</strong> <em>tile-map</em></dt>
+<dd><p>Return the orientation of <var>tile-map</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tile_002dmap_002dwidth"></a>Procedure: <strong>tile-map-width</strong> <em>tile-map</em></dt>
+<dd><p>Return the width of <var>tile-map</var> in tiles.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tile_002dmap_002dheight"></a>Procedure: <strong>tile-map-height</strong> <em>tile-map</em></dt>
+<dd><p>Return the height of <var>tile-map</var> in tiles.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tile_002dmap_002dtile_002dwidth"></a>Procedure: <strong>tile-map-tile-width</strong> <em>tile-map</em></dt>
+<dd><p>Return the width of tiles in <var>tile-map</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tile_002dmap_002dtile_002dheight"></a>Procedure: <strong>tile-map-tile-height</strong> <em>tile-map</em></dt>
+<dd><p>Return the height of tiles in <var>tile-map</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tile_002dmap_002dtilesets"></a>Procedure: <strong>tile-map-tilesets</strong> <em>tile-map</em></dt>
+<dd><p>Return the tilesets for <var>tile-map</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tile_002dmap_002dlayers"></a>Procedure: <strong>tile-map-layers</strong> <em>tile-map</em></dt>
+<dd><p>Return the layers of <var>tile-map</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tile_002dmap_002dproperties"></a>Procedure: <strong>tile-map-properties</strong> <em>tile-map</em></dt>
+<dd><p>Return the custom properties of <var>tile-map</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-point_002d_003etile"></a>Procedure: <strong>point-&gt;tile</strong> <em>tile-map x y</em></dt>
+<dd><p>Translate the pixel coordinates (<var>x</var>, <var>y</var>) into tile
+coordinates.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-draw_002dtile_002dmap"></a>Procedure: <strong>draw-tile-map</strong> <em>tile-map [#:layers] [#:region] [#:origin] [#:position] [#:scale] [#:rotation]</em></dt>
<dd>
<p>Draw the layers of <var>tile-map</var>. By default, all layers are drawn.
To draw a subset of the available layers, pass a list of layer ids
@@ -119,6 +172,199 @@ using the <var>layers</var> keyword argument.
the other arguments.
</p></dd></dl>
+<a name="Tilesets"></a>
+<h4 class="subsubsection">2.3.3.1 Tilesets</h4>
+
+<dl>
+<dt><a name="index-tileset_003f"></a>Procedure: <strong>tileset?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a tileset.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tileset_002dname"></a>Procedure: <strong>tileset-name</strong> <em>tileset</em></dt>
+<dd><p>Return the name of <var>tileset</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tileset_002dfirst_002dgid"></a>Procedure: <strong>tileset-first-gid</strong> <em>tileset</em></dt>
+<dd><p>Return the starting GID of <var>tileset</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tileset_002dsize"></a>Procedure: <strong>tileset-size</strong> <em>tileset</em></dt>
+<dd><p>Return the number of tiles in <var>tileset</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tileset_002dtile_002dwidth"></a>Procedure: <strong>tileset-tile-width</strong> <em>tileset</em></dt>
+<dd><p>Return the width of tiles in <var>tileset</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tileset_002dtile_002dheight"></a>Procedure: <strong>tileset-tile-height</strong> <em>tileset</em></dt>
+<dd><p>Return the height of tiles in <var>tileset</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tileset_002datlas"></a>Procedure: <strong>tileset-atlas</strong> <em>tileset</em></dt>
+<dd><p>Return the texture atlas for <var>tileset</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tileset_002dtiles"></a>Procedure: <strong>tileset-tiles</strong> <em>tileset</em></dt>
+<dd><p>Return the tiles in <var>tileset</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tileset_002dproperties"></a>Procedure: <strong>tileset-properties</strong> <em>tileset</em></dt>
+<dd><p>Return the custom properties of <var>tileset</var>.
+</p></dd></dl>
+
+<a name="Tiles"></a>
+<h4 class="subsubsection">2.3.3.2 Tiles</h4>
+
+<dl>
+<dt><a name="index-tile_003f"></a>Procedure: <strong>tile?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a tile.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tile_002did"></a>Procedure: <strong>tile-id</strong> <em>tile</em></dt>
+<dd><p>Return the ID of <var>tile</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tile_002danimation"></a>Procedure: <strong>tile-animation</strong> <em>tile</em></dt>
+<dd><p>Return the animation for <var>tile</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tile_002dproperties"></a>Procedure: <strong>tile-properties</strong> <em>tile</em></dt>
+<dd><p>Return the custom properties of <var>tile</var>.
+</p></dd></dl>
+
+<a name="Animations"></a>
+<h4 class="subsubsection">2.3.3.3 Animations</h4>
+
+<dl>
+<dt><a name="index-animation_002dframe_003f"></a>Procedure: <strong>animation-frame?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is an animation frame.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-animation_002dframe_002dtile"></a>Procedure: <strong>animation-frame-tile</strong> <em>frame</em></dt>
+<dd><p>Return the tile for <var>frame</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-animation_002dframe_002dduration"></a>Procedure: <strong>animation-frame-duration</strong> <em>frame</em></dt>
+<dd><p>Return the duration of <var>frame</var>.
+</p></dd></dl>
+
+<a name="Layers"></a>
+<h4 class="subsubsection">2.3.3.4 Layers</h4>
+
+<dl>
+<dt><a name="index-tile_002dlayer_003f"></a>Procedure: <strong>tile-layer?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a tile layer.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tile_002dlayer_002dname"></a>Procedure: <strong>tile-layer-name</strong> <em>layer</em></dt>
+<dd><p>Return the name of <var>layer</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tile_002dlayer_002dwidth"></a>Procedure: <strong>tile-layer-width</strong> <em>layer</em></dt>
+<dd><p>Return the width in tiles of <var>layer</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tile_002dlayer_002dheight"></a>Procedure: <strong>tile-layer-height</strong> <em>layer</em></dt>
+<dd><p>Return the height in tiles of <var>layer</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tile_002dlayer_002dtiles"></a>Procedure: <strong>tile-layer-tiles</strong> <em>layer</em></dt>
+<dd><p>Return the tile data for <var>layer</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-tile_002dlayer_002dproperties"></a>Procedure: <strong>tile-layer-properties</strong> <em>layer</em></dt>
+<dd><p>Return the custom properties of <var>layer</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-object_002dlayer_003f"></a>Procedure: <strong>object-layer?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is an object layer.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-object_002dlayer_002dname"></a>Procedure: <strong>object-layer-name</strong> <em>layer</em></dt>
+<dd><p>Return the name of <var>layer</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-object_002dlayer_002dobjects"></a>Procedure: <strong>object-layer-objects</strong> <em>layer</em></dt>
+<dd><p>Return the objects for <var>layer</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-object_002dlayer_002dproperties"></a>Procedure: <strong>object-layer-properties</strong> <em>layer</em></dt>
+<dd><p>Return the custom properties of <var>layer</var>.
+</p></dd></dl>
+
+<a name="Objects"></a>
+<h4 class="subsubsection">2.3.3.5 Objects</h4>
+
+<dl>
+<dt><a name="index-map_002dobject_003f"></a>Procedure: <strong>map-object?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a map object.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-map_002dobject_002did"></a>Procedure: <strong>map-object-id</strong> <em>obj</em></dt>
+<dd><p>Return the ID of <var>obj</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-map_002dobject_002dname"></a>Procedure: <strong>map-object-name</strong> <em>obj</em></dt>
+<dd><p>Return the name of <var>obj</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-map_002dobject_002dtype"></a>Procedure: <strong>map-object-type</strong> <em>obj</em></dt>
+<dd><p>Return the type of <var>obj</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-map_002dobject_002dshape"></a>Procedure: <strong>map-object-shape</strong> <em>obj</em></dt>
+<dd><p>Return the shape of <var>obj</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-map_002dobject_002dproperties"></a>Procedure: <strong>map-object-properties</strong> <em>obj</em></dt>
+<dd><p>Return the custom properties of <var>obj</var>.
+</p></dd></dl>
+
+<a name="Polygons"></a>
+<h4 class="subsubsection">2.3.3.6 Polygons</h4>
+
+<dl>
+<dt><a name="index-polygon_003f"></a>Procedure: <strong>polygon?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a polygon.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-polygon_002dpoints"></a>Procedure: <strong>polygon-points</strong> <em>polygon</em></dt>
+<dd><p>Return the list of points that form <var>polygon</var>.
+</p></dd></dl>
+
+<hr>
+<div class="header">
+<p>
+Next: <a href="Lines-and-Shapes.html#Lines-and-Shapes" accesskey="n" rel="next">Lines and Shapes</a>, Previous: <a href="Sprites.html#Sprites" accesskey="p" rel="prev">Sprites</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+</div>
diff --git a/manuals/chickadee/Tweening.html b/manuals/chickadee/Tweening.html
index 3e344df..726c699 100644
--- a/manuals/chickadee/Tweening.html
+++ b/manuals/chickadee/Tweening.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -109,7 +111,7 @@ procedure can be used within any script like so:
</pre></div>
<dl>
-<dt><a name="index-tween"></a>Procedure: <strong>tween</strong> <em><var>duration</var> <var>start</var> <var>end</var> <var>proc</var> [#:step 1 #:ease <code>smoothstep</code> #:interpolate <code>lerp</code>]</em></dt>
+<dt><a name="index-tween"></a>Procedure: <strong>tween</strong> <em>duration start end proc [#:step <code>1</code>] [#:ease <code>smoothstep</code>] #:interpolate <code>lerp</code>]</em></dt>
<dd><p>Transition a value from <var>start</var> to <var>end</var> over <var>duration</var>,
sending each succesive value to <var>proc</var>. <var>step</var> controls the
amount of time between each update of the animation.
diff --git a/manuals/chickadee/Vectors.html b/manuals/chickadee/Vectors.html
index 4857f0a..20632cd 100644
--- a/manuals/chickadee/Vectors.html
+++ b/manuals/chickadee/Vectors.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -133,99 +135,105 @@ functions, they do not compose well and create more verbose code.
<h4 class="subsubsection">2.2.2.2 2D Vectors</h4>
<dl>
-<dt><a name="index-vec2"></a>Procedure: <strong>vec2</strong> <em><var>x</var> <var>y</var></em></dt>
+<dt><a name="index-vec2"></a>Procedure: <strong>vec2</strong> <em>x y</em></dt>
<dd><p>Return a new 2D vector with coordinates (<var>x</var>, <var>y</var>).
</p></dd></dl>
<dl>
-<dt><a name="index-vec2_002fpolar"></a>Procedure: <strong>vec2/polar</strong> <em><var>r</var> <var>theta</var></em></dt>
+<dt><a name="index-vec2_002fpolar"></a>Procedure: <strong>vec2/polar</strong> <em>r theta</em></dt>
<dd><p>Return a new 2D vector containing the Cartesian representation of the
polar coordinate (<var>r</var>, <var>theta</var>). The angle <var>theta</var> is
measured in radians.
</p></dd></dl>
<dl>
-<dt><a name="index-vec2_003f"></a>Procedure: <strong>vec2?</strong> <em><var>obj</var></em></dt>
+<dt><a name="index-vec2_003f"></a>Procedure: <strong>vec2?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> is a 2D vector.
</p></dd></dl>
<dl>
-<dt><a name="index-vec2_002dx"></a>Procedure: <strong>vec2-x</strong> <em><var>v</var></em></dt>
+<dt><a name="index-vec2_002dx"></a>Procedure: <strong>vec2-x</strong> <em>v</em></dt>
<dd><p>Return the X coordinate of the 2D vector <var>v</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec2_002dy"></a>Procedure: <strong>vec2-y</strong> <em><var>v</var></em></dt>
+<dt><a name="index-vec2_002dy"></a>Procedure: <strong>vec2-y</strong> <em>v</em></dt>
<dd><p>Return the Y coordinate of the 2D vector <var>v</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec2_002dcopy"></a>Procedure: <strong>vec2-copy</strong> <em><var>v</var></em></dt>
+<dt><a name="index-vec2_002dcopy"></a>Procedure: <strong>vec2-copy</strong> <em>v</em></dt>
<dd><p>Return a fresh copy of the 2D vector <var>v</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec2_002dmagnitude"></a>Procedure: <strong>vec2-magnitude</strong> <em><var>v</var></em></dt>
+<dt><a name="index-vec2_002dmagnitude"></a>Procedure: <strong>vec2-magnitude</strong> <em>v</em></dt>
<dd><p>Return the magnitude of the 2D vector <var>v</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec2_002ddot_002dproduct"></a>Procedure: <strong>vec2-dot-product</strong> <em><var>v1</var> <var>v2</var></em></dt>
+<dt><a name="index-vec2_002ddot_002dproduct"></a>Procedure: <strong>vec2-dot-product</strong> <em>v1 v2</em></dt>
<dd><p>Return the dot product of the 2D vectors <var>v1</var> and <var>v2</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec2_002dnormalize"></a>Procedure: <strong>vec2-normalize</strong> <em><var>v</var></em></dt>
+<dt><a name="index-vec2_002dnormalize"></a>Procedure: <strong>vec2-normalize</strong> <em>v</em></dt>
<dd><p>Return the normalized form of the 2D vector <var>v</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec2_002b"></a>Procedure: <strong>vec2+</strong> <em><var>v</var> <var>x</var></em></dt>
+<dt><a name="index-vec2_002b"></a>Procedure: <strong>vec2+</strong> <em>v x</em></dt>
<dd><p>Add <var>x</var>, either a 2D vector or a scalar (i.e. a real number), to
the 2D vector <var>v</var> and return a new vector containing the sum.
</p></dd></dl>
<dl>
-<dt><a name="index-vec2_002d"></a>Procedure: <strong>vec2-</strong> <em><var>v</var> <var>x</var></em></dt>
+<dt><a name="index-vec2_002d"></a>Procedure: <strong>vec2-</strong> <em>v x</em></dt>
<dd><p>Subtract <var>x</var>, either a 2D vector or a scalar, from the 2D vector
<var>v</var> and return a new vector containing the difference.
</p></dd></dl>
<dl>
-<dt><a name="index-vec2_002a"></a>Procedure: <strong>vec2*</strong> <em><var>v</var> <var>x</var></em></dt>
+<dt><a name="index-vec2_002a"></a>Procedure: <strong>vec2*</strong> <em>v x</em></dt>
<dd><p>Multiply the 2D vector <var>v</var> by <var>x</var>, a 2D vector or a scalar,
and return a new vector containing the product.
</p></dd></dl>
<dl>
-<dt><a name="index-set_002dvec2_002dx_0021"></a>Procedure: <strong>set-vec2-x!</strong> <em><var>v</var> <var>x</var></em></dt>
+<dt><a name="index-set_002dvec2_002dx_0021"></a>Procedure: <strong>set-vec2-x!</strong> <em>v x</em></dt>
<dd><p>Set the X coordinate of the 2D vector <var>v</var> to <var>x</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-set_002dvec2_002dy_0021"></a>Procedure: <strong>set-vec2-y!</strong> <em><var>v</var> <var>y</var></em></dt>
+<dt><a name="index-set_002dvec2_002dy_0021"></a>Procedure: <strong>set-vec2-y!</strong> <em>v y</em></dt>
<dd><p>Set the Y coordinate of the 2D vector <var>v</var> to <var>y</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec2_002dcopy_0021"></a>Procedure: <strong>vec2-copy!</strong> <em><var>source</var> <var>target</var></em></dt>
+<dt><a name="index-set_002dvec2_0021"></a>Procedure: <strong>set-vec2!</strong> <em>v x y</em></dt>
+<dd><p>Set the X and Y coordinates of the 2D vector <var>v</var> to <var>x</var> and
+<var>y</var>, respectively.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-vec2_002dcopy_0021"></a>Procedure: <strong>vec2-copy!</strong> <em>source target</em></dt>
<dd><p>Copy the 2D vector <var>source</var> into the 2D vector <var>target</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec2_002dadd_0021"></a>Procedure: <strong>vec2-add!</strong> <em><var>v</var> <var>x</var></em></dt>
+<dt><a name="index-vec2_002dadd_0021"></a>Procedure: <strong>vec2-add!</strong> <em>v x</em></dt>
<dd><p>Perform an in-place modification of the 2D vector <var>v</var> by adding
<var>x</var>, a 2D vector or a scalar.
</p></dd></dl>
<dl>
-<dt><a name="index-vec2_002dsub_0021"></a>Procedure: <strong>vec2-sub!</strong> <em><var>v</var> <var>x</var></em></dt>
+<dt><a name="index-vec2_002dsub_0021"></a>Procedure: <strong>vec2-sub!</strong> <em>v x</em></dt>
<dd><p>Perform an in-place modification of the 2D vector <var>v</var> by
subtracting <var>x</var>, a 2D vector or a scalar.
</p></dd></dl>
<dl>
-<dt><a name="index-vec2_002dmult_0021"></a>Procedure: <strong>vec2-mult!</strong> <em><var>v</var> <var>x</var></em></dt>
+<dt><a name="index-vec2_002dmult_0021"></a>Procedure: <strong>vec2-mult!</strong> <em>v x</em></dt>
<dd><p>Perform an in-place modification of the 2D vector <var>v</var> by
multiplying it by <var>x</var>, a 2D vector or a scalar.
</p></dd></dl>
@@ -234,102 +242,108 @@ multiplying it by <var>x</var>, a 2D vector or a scalar.
<h4 class="subsubsection">2.2.2.3 3D Vectors</h4>
<dl>
-<dt><a name="index-vec3"></a>Procedure: <strong>vec3</strong> <em><var>x</var> <var>y</var></em></dt>
+<dt><a name="index-vec3"></a>Procedure: <strong>vec3</strong> <em>x y</em></dt>
<dd><p>Return a new 2D vector with coordinates (<var>x</var>, <var>y</var>).
</p></dd></dl>
<dl>
-<dt><a name="index-vec3_003f"></a>Procedure: <strong>vec3?</strong> <em><var>obj</var></em></dt>
+<dt><a name="index-vec3_003f"></a>Procedure: <strong>vec3?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> is a 3D vector.
</p></dd></dl>
<dl>
-<dt><a name="index-vec3_002dx"></a>Procedure: <strong>vec3-x</strong> <em><var>v</var></em></dt>
+<dt><a name="index-vec3_002dx"></a>Procedure: <strong>vec3-x</strong> <em>v</em></dt>
<dd><p>Return the X coordinate of the 3D vector <var>v</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec3_002dy"></a>Procedure: <strong>vec3-y</strong> <em><var>v</var></em></dt>
+<dt><a name="index-vec3_002dy"></a>Procedure: <strong>vec3-y</strong> <em>v</em></dt>
<dd><p>Return the Y coordinate of the 3D vector <var>v</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec3_002dz"></a>Procedure: <strong>vec3-z</strong> <em><var>v</var></em></dt>
+<dt><a name="index-vec3_002dz"></a>Procedure: <strong>vec3-z</strong> <em>v</em></dt>
<dd><p>Return the Z coordinate of the 3D vector <var>v</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec3_002dcopy"></a>Procedure: <strong>vec3-copy</strong> <em><var>v</var></em></dt>
+<dt><a name="index-vec3_002dcopy"></a>Procedure: <strong>vec3-copy</strong> <em>v</em></dt>
<dd><p>Return a fresh copy of the 3D vector <var>v</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec3_002dmagnitude"></a>Procedure: <strong>vec3-magnitude</strong> <em><var>v</var></em></dt>
+<dt><a name="index-vec3_002dmagnitude"></a>Procedure: <strong>vec3-magnitude</strong> <em>v</em></dt>
<dd><p>Return the magnitude of the 3D vector <var>v</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec3_002ddot_002dproduct"></a>Procedure: <strong>vec3-dot-product</strong> <em><var>v1</var> <var>v2</var></em></dt>
+<dt><a name="index-vec3_002ddot_002dproduct"></a>Procedure: <strong>vec3-dot-product</strong> <em>v1 v2</em></dt>
<dd><p>Return the dot product of the 3D vectors <var>v1</var> and <var>v2</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec3_002dnormalize"></a>Procedure: <strong>vec3-normalize</strong> <em><var>v</var></em></dt>
+<dt><a name="index-vec3_002dnormalize"></a>Procedure: <strong>vec3-normalize</strong> <em>v</em></dt>
<dd><p>Return the normalized form of the 3D vector <var>v</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec3_002b"></a>Procedure: <strong>vec3+</strong> <em><var>v</var> <var>x</var></em></dt>
+<dt><a name="index-vec3_002b"></a>Procedure: <strong>vec3+</strong> <em>v x</em></dt>
<dd><p>Add <var>x</var>, either a 3D vector or a scalar (i.e. a real number), to
the 3D vector <var>v</var> and return a new vector containing the sum.
</p></dd></dl>
<dl>
-<dt><a name="index-vec3_002d"></a>Procedure: <strong>vec3-</strong> <em><var>v</var> <var>x</var></em></dt>
+<dt><a name="index-vec3_002d"></a>Procedure: <strong>vec3-</strong> <em>v x</em></dt>
<dd><p>Subtract <var>x</var>, either a 3D vector or a scalar, from the 3D vector
<var>v</var> and return a new vector containing the difference.
</p></dd></dl>
<dl>
-<dt><a name="index-vec3_002a"></a>Procedure: <strong>vec3*</strong> <em><var>v</var> <var>x</var></em></dt>
+<dt><a name="index-vec3_002a"></a>Procedure: <strong>vec3*</strong> <em>v x</em></dt>
<dd><p>Multiply the 3D vector <var>v</var> by <var>x</var>, a 3D vector or a scalar,
and return a new vector containing the product.
</p></dd></dl>
<dl>
-<dt><a name="index-set_002dvec3_002dx_0021"></a>Procedure: <strong>set-vec3-x!</strong> <em><var>v</var> <var>x</var></em></dt>
+<dt><a name="index-set_002dvec3_002dx_0021"></a>Procedure: <strong>set-vec3-x!</strong> <em>v x</em></dt>
<dd><p>Set the X coordinate of the 3D vector <var>v</var> to <var>x</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-set_002dvec3_002dy_0021"></a>Procedure: <strong>set-vec3-y!</strong> <em><var>v</var> <var>y</var></em></dt>
+<dt><a name="index-set_002dvec3_002dy_0021"></a>Procedure: <strong>set-vec3-y!</strong> <em>v y</em></dt>
<dd><p>Set the Y coordinate of the 3D vector <var>v</var> to <var>y</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-set_002dvec3_002dz_0021"></a>Procedure: <strong>set-vec3-z!</strong> <em><var>v</var> <var>z</var></em></dt>
+<dt><a name="index-set_002dvec3_002dz_0021"></a>Procedure: <strong>set-vec3-z!</strong> <em>v z</em></dt>
<dd><p>Set the Z coordinate of the 3D vector <var>v</var> to <var>z</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec3_002dcopy_0021"></a>Procedure: <strong>vec3-copy!</strong> <em><var>source</var> <var>target</var></em></dt>
+<dt><a name="index-set_002dvec3_0021"></a>Procedure: <strong>set-vec3!</strong> <em>v x y z</em></dt>
+<dd><p>Set the X, Y, and Z coordinates of the 3D vector <var>v</var> to <var>x</var>,
+<var>y</var>, and <var>z</var>, respectively.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-vec3_002dcopy_0021"></a>Procedure: <strong>vec3-copy!</strong> <em>source target</em></dt>
<dd><p>Copy the 3D vector <var>source</var> into the 3D vector <var>target</var>.
</p></dd></dl>
<dl>
-<dt><a name="index-vec3_002dadd_0021"></a>Procedure: <strong>vec3-add!</strong> <em><var>v</var> <var>x</var></em></dt>
+<dt><a name="index-vec3_002dadd_0021"></a>Procedure: <strong>vec3-add!</strong> <em>v x</em></dt>
<dd><p>Perform an in-place modification of the 3D vector <var>v</var> by adding
<var>x</var>, a 3D vector or a scalar.
</p></dd></dl>
<dl>
-<dt><a name="index-vec3_002dsub_0021"></a>Procedure: <strong>vec3-sub!</strong> <em><var>v</var> <var>x</var></em></dt>
+<dt><a name="index-vec3_002dsub_0021"></a>Procedure: <strong>vec3-sub!</strong> <em>v x</em></dt>
<dd><p>Perform an in-place modification of the 3D vector <var>v</var> by
subtracting <var>x</var>, a 3D vector or a scalar.
</p></dd></dl>
<dl>
-<dt><a name="index-vec3_002dmult_0021"></a>Procedure: <strong>vec3-mult!</strong> <em><var>v</var> <var>x</var></em></dt>
+<dt><a name="index-vec3_002dmult_0021"></a>Procedure: <strong>vec3-mult!</strong> <em>v x</em></dt>
<dd><p>Perform an in-place modification of the 3D vector <var>v</var> by
multiplying it by <var>x</var>, a 3D vector or a scalar.
</p></dd></dl>
diff --git a/manuals/chickadee/Viewports.html b/manuals/chickadee/Viewports.html
index 2e46d12..15b3940 100644
--- a/manuals/chickadee/Viewports.html
+++ b/manuals/chickadee/Viewports.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -30,7 +32,7 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="Index.html#Index" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Graphics.html#Graphics" rel="up" title="Graphics">
-<link href="Scripting.html#Scripting" rel="next" title="Scripting">
+<link href="Rendering-Engine.html#Rendering-Engine" rel="next" title="Rendering Engine">
<link href="Framebuffers.html#Framebuffers" rel="prev" title="Framebuffers">
<style type="text/css">
<!--
@@ -90,11 +92,71 @@ ul.no-bullet {list-style: none}
<a name="Viewports"></a>
<div class="header">
<p>
-Previous: <a href="Framebuffers.html#Framebuffers" accesskey="p" rel="prev">Framebuffers</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Rendering-Engine.html#Rendering-Engine" accesskey="n" rel="next">Rendering Engine</a>, Previous: <a href="Framebuffers.html#Framebuffers" accesskey="p" rel="prev">Framebuffers</a>, Up: <a href="Graphics.html#Graphics" accesskey="u" rel="up">Graphics</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Viewports-1"></a>
-<h4 class="subsection">2.3.11 Viewports</h4>
+<h4 class="subsection">2.3.9 Viewports</h4>
+
+<p>A viewport represents a subset of the screen (or framebuffer). When
+rendering a frame, the resulting image will only appear within that
+viewport. These aren&rsquo;t often needed, and Chickadee&rsquo;s default viewport
+occupies the entire screen, but there are certain situations where
+they are useful. For example, a split-screen multiplayer game may
+render to two different viewports, each occupying a different half of
+the screen. For information about how to set the current viewport,
+see <code>with-viewport</code> in <a href="Rendering-Engine.html#Rendering-Engine">Rendering Engine</a>.
+</p>
+<p>The <code>(chickadee render viewport)</code> module provides the following
+API:
+</p>
+<dl>
+<dt><a name="index-make_002dviewport"></a>Procedure: <strong>make-viewport</strong> <em>x y width height [#:clear-color] [#:clear-flags]</em></dt>
+<dd>
+<p>Create a viewport that covers an area of the window starting from
+coordinates (<var>x</var>, <var>y</var>) and spanning <var>width</var> <code>x</code>
+<var>height</var> pixels. Fill the viewport with <var>clear-color</var> when
+clearing the screen. Clear the buffers denoted by the list of symbols
+in <var>clear-flags</var>.
+</p>
+<p>Possible values for <var>clear-flags</var> are <var>color-buffer</var>,
+<var>depth-buffer</var>, <var>accum-buffer</var>, and <var>stencil-buffer</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-viewport_003f"></a>Procedure: <strong>viewport?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a viewport.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-viewport_002dx"></a>Procedure: <strong>viewport-x</strong> <em>viewport</em></dt>
+<dd><p>Return the left edge of <var>viewport</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-viewport_002dy"></a>Procedure: <strong>viewport-y</strong> <em>viewport</em></dt>
+<dd><p>Return the bottom edge of <var>viewport</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-viewport_002dwidth"></a>Procedure: <strong>viewport-width</strong> <em>viewport</em></dt>
+<dd><p>Return the width of <var>viewport</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-viewport_002dheight"></a>Procedure: <strong>viewport-height</strong> <em>viewport</em></dt>
+<dd><p>Return the height of <var>viewport</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-viewport_002dclear_002dcolor"></a>Procedure: <strong>viewport-clear-color</strong> <em>viewport</em></dt>
+<dd><p>Return the clear color for <var>viewport</var>.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-viewport_002dclear_002dflags"></a>Procedure: <strong>viewport-clear-flags</strong> <em>viewport</em></dt>
+<dd><p>Return the list of clear flags for <var>viewport</var>.
+</p></dd></dl>
diff --git a/manuals/chickadee/index.html b/manuals/chickadee/index.html
index d7e8a56..4ddf0c3 100644
--- a/manuals/chickadee/index.html
+++ b/manuals/chickadee/index.html
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<!-- Copyright (C) 2017 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017, 2018, 2019 David Thompson davet@gnu.org
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
@@ -13,6 +13,8 @@ A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+* Chickadee: (chickadee). Game programming toolkit for Guile.
+
The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
-->
@@ -101,7 +103,10 @@ ul.no-bullet {list-style: none}
</ul></li>
<li><a name="toc-API-Reference-1" href="API-Reference.html#API-Reference">2 API Reference</a>
<ul class="no-bullet">
- <li><a name="toc-Kernel-1" href="Kernel.html#Kernel">2.1 Kernel</a></li>
+ <li><a name="toc-Kernel-1" href="Kernel.html#Kernel">2.1 Kernel</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Live-Coding" href="Kernel.html#Live-Coding">2.1.1 Live Coding</a></li>
+ </ul></li>
<li><a name="toc-Math-1" href="Math.html#Math">2.2 Math</a>
<ul class="no-bullet">
<li><a name="toc-Basics-1" href="Basics.html#Basics">2.2.1 Basics</a></li>
@@ -125,17 +130,26 @@ ul.no-bullet {list-style: none}
</ul></li>
<li><a name="toc-Graphics-1" href="Graphics.html#Graphics">2.3 Graphics</a>
<ul class="no-bullet">
- <li><a name="toc-Rendering-Engine-1" href="Rendering-Engine.html#Rendering-Engine">2.3.1 Rendering Engine</a></li>
- <li><a name="toc-Textures-1" href="Textures.html#Textures">2.3.2 Textures</a></li>
- <li><a name="toc-Sprites-1" href="Sprites.html#Sprites">2.3.3 Sprites</a></li>
- <li><a name="toc-Tile-Maps-1" href="Tile-Maps.html#Tile-Maps">2.3.4 Tile Maps</a></li>
- <li><a name="toc-Lines-and-Shapes-1" href="Lines-and-Shapes.html#Lines-and-Shapes">2.3.5 Lines and Shapes</a></li>
- <li><a name="toc-Fonts-1" href="Fonts.html#Fonts">2.3.6 Fonts</a></li>
- <li><a name="toc-Blending-and-Depth-Testing-1" href="Blending-and-Depth-Testing.html#Blending-and-Depth-Testing">2.3.7 Blending and Depth Testing</a></li>
- <li><a name="toc-Vertex-Arrays-1" href="Vertex-Arrays.html#Vertex-Arrays">2.3.8 Vertex Arrays</a></li>
- <li><a name="toc-Shaders-1" href="Shaders.html#Shaders">2.3.9 Shaders</a></li>
- <li><a name="toc-Framebuffers-1" href="Framebuffers.html#Framebuffers">2.3.10 Framebuffers</a></li>
- <li><a name="toc-Viewports-1" href="Viewports.html#Viewports">2.3.11 Viewports</a></li>
+ <li><a name="toc-Textures-1" href="Textures.html#Textures">2.3.1 Textures</a></li>
+ <li><a name="toc-Sprites-1" href="Sprites.html#Sprites">2.3.2 Sprites</a></li>
+ <li><a name="toc-Tile-Maps-1" href="Tile-Maps.html#Tile-Maps">2.3.3 Tile Maps</a>
+ <ul class="no-bullet">
+ <li><a name="toc-Tilesets" href="Tile-Maps.html#Tilesets">2.3.3.1 Tilesets</a></li>
+ <li><a name="toc-Tiles" href="Tile-Maps.html#Tiles">2.3.3.2 Tiles</a></li>
+ <li><a name="toc-Animations" href="Tile-Maps.html#Animations">2.3.3.3 Animations</a></li>
+ <li><a name="toc-Layers" href="Tile-Maps.html#Layers">2.3.3.4 Layers</a></li>
+ <li><a name="toc-Objects" href="Tile-Maps.html#Objects">2.3.3.5 Objects</a></li>
+ <li><a name="toc-Polygons" href="Tile-Maps.html#Polygons">2.3.3.6 Polygons</a></li>
+ </ul></li>
+ <li><a name="toc-Lines-and-Shapes-1" href="Lines-and-Shapes.html#Lines-and-Shapes">2.3.4 Lines and Shapes</a></li>
+ <li><a name="toc-Fonts-1" href="Fonts.html#Fonts">2.3.5 Fonts</a></li>
+ <li><a name="toc-Particles-1" href="Particles.html#Particles">2.3.6 Particles</a></li>
+ <li><a name="toc-Blending-1" href="Blending.html#Blending">2.3.7 Blending</a></li>
+ <li><a name="toc-Framebuffers-1" href="Framebuffers.html#Framebuffers">2.3.8 Framebuffers</a></li>
+ <li><a name="toc-Viewports-1" href="Viewports.html#Viewports">2.3.9 Viewports</a></li>
+ <li><a name="toc-Rendering-Engine-1" href="Rendering-Engine.html#Rendering-Engine">2.3.10 Rendering Engine</a></li>
+ <li><a name="toc-Buffers-1" href="Buffers.html#Buffers">2.3.11 Buffers</a></li>
+ <li><a name="toc-Shaders-1" href="Shaders.html#Shaders">2.3.12 Shaders</a></li>
</ul></li>
<li><a name="toc-Scripting-1" href="Scripting.html#Scripting">2.4 Scripting</a>
<ul class="no-bullet">
@@ -163,7 +177,7 @@ Next: <a href="Installation.html#Installation" accesskey="n" rel="next">Installa
<a name="Chickadee"></a>
<h1 class="top">Chickadee</h1>
-<p>Copyright &copy; 2017 David Thompson <a href="mailto:davet@gnu.org">davet@gnu.org</a>
+<p>Copyright &copy; 2017, 2018, 2019 David Thompson <a href="mailto:davet@gnu.org">davet@gnu.org</a>
</p>
<blockquote>
<p>Permission is granted to copy, distribute and/or modify this document
@@ -178,6 +192,7 @@ Foundation Web site at <a href="http://www.gnu.org/licenses/fdl.html">http://www
</p>
</blockquote>
+
<p>The document was typeset with
<a href="http://www.texinfo.org/">GNU Texinfo</a>.
</p>