summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2021-10-07 20:17:50 -0400
committerDavid Thompson <dthompson2@worcester.edu>2021-10-07 20:17:50 -0400
commit0e699be281c8dea53e589e08a5831837e0eae7ea (patch)
tree4266aebec927b13ca56410be1901e3ee78dff49e
parent38daa330f2194de5f39cd41b270c89d7b2e94427 (diff)
Updates for Chickadee 0.8.0 and Guile-SDL2 0.7.0.
-rw-r--r--guix.scm34
-rw-r--r--images/chickadee/screenshot-3d.pngbin0 -> 419343 bytes
-rw-r--r--images/chickadee/screenshot-hello-world.pngbin0 -> 6652 bytes
-rw-r--r--images/chickadee/screenshot-sprite.pngbin0 -> 5684 bytes
-rw-r--r--images/chickadee/screenshot-vector-path.pngbin0 -> 113034 bytes
-rw-r--r--manuals/chickadee/API-Reference.html14
-rw-r--r--manuals/chickadee/Agendas.html4
-rw-r--r--manuals/chickadee/Array-Lists.html179
-rw-r--r--manuals/chickadee/Audio-Files.html4
-rw-r--r--manuals/chickadee/Audio.html16
-rw-r--r--manuals/chickadee/Basics.html6
-rw-r--r--manuals/chickadee/Bezier-Curves.html10
-rw-r--r--manuals/chickadee/Blending.html204
-rw-r--r--manuals/chickadee/Buffers.html122
-rw-r--r--manuals/chickadee/Channels.html11
-rw-r--r--manuals/chickadee/Colors.html6
-rw-r--r--manuals/chickadee/Command-Line-Interface.html104
-rw-r--r--manuals/chickadee/Copying-This-Manual.html4
-rw-r--r--manuals/chickadee/Data-Structures.html109
-rw-r--r--manuals/chickadee/Easings.html4
-rw-r--r--manuals/chickadee/Fonts.html10
-rw-r--r--manuals/chickadee/Framebuffers.html18
-rw-r--r--manuals/chickadee/GNU-Free-Documentation-License.html2
-rw-r--r--manuals/chickadee/Getting-Started.html177
-rw-r--r--manuals/chickadee/Graphics.html34
-rw-r--r--manuals/chickadee/Grids.html (renamed from manuals/chickadee/Grid.html)24
-rw-r--r--manuals/chickadee/Heaps.html139
-rw-r--r--manuals/chickadee/Index.html295
-rw-r--r--manuals/chickadee/Input-Devices.html4
-rw-r--r--manuals/chickadee/Installation.html4
-rw-r--r--manuals/chickadee/Invoking-chickadee-bundle.html219
-rw-r--r--manuals/chickadee/Invoking-chickadee-play.html198
-rw-r--r--manuals/chickadee/Kernel.html6
-rw-r--r--manuals/chickadee/Lights.html212
-rw-r--r--manuals/chickadee/Live-Coding.html24
-rw-r--r--manuals/chickadee/Math.html10
-rw-r--r--manuals/chickadee/Matrices.html19
-rw-r--r--manuals/chickadee/Meshes.html413
-rw-r--r--manuals/chickadee/Models.html (renamed from manuals/chickadee/3D-Models.html)72
-rw-r--r--manuals/chickadee/Particles.html8
-rw-r--r--manuals/chickadee/Path-Finding.html16
-rw-r--r--manuals/chickadee/Quadtrees.html222
-rw-r--r--manuals/chickadee/Quaternions.html4
-rw-r--r--manuals/chickadee/Queues.html133
-rw-r--r--manuals/chickadee/Rectangles.html4
-rw-r--r--manuals/chickadee/Render-Settings.html512
-rw-r--r--manuals/chickadee/Rendering-Engine.html140
-rw-r--r--manuals/chickadee/Requirements.html16
-rw-r--r--manuals/chickadee/Scripting.html6
-rw-r--r--manuals/chickadee/Scripts.html4
-rw-r--r--manuals/chickadee/Shaders.html79
-rw-r--r--manuals/chickadee/Skyboxes.html (renamed from manuals/chickadee/9_002dPatches.html)72
-rw-r--r--manuals/chickadee/Sources.html4
-rw-r--r--manuals/chickadee/Sprites.html64
-rw-r--r--manuals/chickadee/Textures.html83
-rw-r--r--manuals/chickadee/The-Environment.html4
-rw-r--r--manuals/chickadee/The-Game-Loop.html23
-rw-r--r--manuals/chickadee/The-Listener.html4
-rw-r--r--manuals/chickadee/Tile-Maps.html14
-rw-r--r--manuals/chickadee/Tweening.html4
-rw-r--r--manuals/chickadee/Vector-Paths.html165
-rw-r--r--manuals/chickadee/Vectors.html19
-rw-r--r--manuals/chickadee/Viewports.html18
-rw-r--r--manuals/chickadee/Window-Manipulation.html9
-rw-r--r--manuals/chickadee/index.html158
-rw-r--r--manuals/guile-sdl2/Chat.html2
-rw-r--r--manuals/guile-sdl2/Index.html2
-rw-r--r--manuals/guile-sdl2/Rendering.html5
-rw-r--r--manuals/guile-sdl2/Windows.html5
-rw-r--r--posts/2021-10-07-chickadee-0.8.0-released.md97
-rw-r--r--posts/2021-10-07-guile-sdl2-0.7.0-released.md35
-rw-r--r--projects.scm94
-rw-r--r--theme.scm5
73 files changed, 3942 insertions, 799 deletions
diff --git a/guix.scm b/guix.scm
index 1feb2e1..0fc2841 100644
--- a/guix.scm
+++ b/guix.scm
@@ -1,8 +1,36 @@
-(use-modules (guix profiles)
+(use-modules (gnu packages autotools)
(gnu packages base)
(gnu packages guile)
(gnu packages guile-xyz)
- (gnu packages rsync))
+ (gnu packages rsync)
+ (guix git-download)
+ (guix packages)
+ (guix profiles)
+ (guix utils))
+
+(define haunt*
+ (let ((commit "d979ed3a1e50f0d73f204076092cb8e4fa033c72"))
+ (package
+ (inherit haunt)
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://git.dthompson.us/haunt.git")
+ (commit commit)))
+ (sha256
+ (base32
+ "1l3c109sx76hzdcfakchskpyhdw3v6zwjs8zdhymbkbks85zwyb5"))))
+ (native-inputs
+ `(("autoconf" ,autoconf)
+ ("automake" ,automake)
+ ,@(package-native-inputs haunt)))
+ (arguments
+ (substitute-keyword-arguments (package-arguments haunt)
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (add-after 'unpack 'bootstrap
+ (lambda _
+ (invoke "sh" "bootstrap"))))))))))
(packages->manifest
(list glibc
@@ -10,5 +38,5 @@
gnu-make
guile-3.0
guile-syntax-highlight
- haunt
+ haunt*
rsync))
diff --git a/images/chickadee/screenshot-3d.png b/images/chickadee/screenshot-3d.png
new file mode 100644
index 0000000..2930f16
--- /dev/null
+++ b/images/chickadee/screenshot-3d.png
Binary files differ
diff --git a/images/chickadee/screenshot-hello-world.png b/images/chickadee/screenshot-hello-world.png
new file mode 100644
index 0000000..fb3967c
--- /dev/null
+++ b/images/chickadee/screenshot-hello-world.png
Binary files differ
diff --git a/images/chickadee/screenshot-sprite.png b/images/chickadee/screenshot-sprite.png
new file mode 100644
index 0000000..7cf6600
--- /dev/null
+++ b/images/chickadee/screenshot-sprite.png
Binary files differ
diff --git a/images/chickadee/screenshot-vector-path.png b/images/chickadee/screenshot-vector-path.png
new file mode 100644
index 0000000..87298c0
--- /dev/null
+++ b/images/chickadee/screenshot-vector-path.png
Binary files differ
diff --git a/manuals/chickadee/API-Reference.html b/manuals/chickadee/API-Reference.html
index 681a169..7ccd8b2 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -33,7 +33,7 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="index.html" rel="up" title="Top">
<link href="Kernel.html" rel="next" title="Kernel">
-<link href="Requirements.html" rel="prev" title="Requirements">
+<link href="Live-Coding.html" rel="prev" title="Live Coding">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
@@ -82,22 +82,24 @@ ul.no-bullet {list-style: none}
<body lang="en">
<span id="API-Reference"></span><div class="header">
<p>
-Next: <a href="Copying-This-Manual.html" accesskey="n" rel="next">Copying This Manual</a>, Previous: <a href="Installation.html" accesskey="p" rel="prev">Installation</a>, Up: <a href="index.html" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Copying-This-Manual.html" accesskey="n" rel="next">Copying This Manual</a>, Previous: <a href="Live-Coding.html" accesskey="p" rel="prev">Live Coding</a>, Up: <a href="index.html" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="API-Reference-1"></span><h2 class="chapter">2 API Reference</h2>
+<span id="API-Reference-1"></span><h2 class="chapter">5 API Reference</h2>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="Kernel.html" accesskey="1">Kernel</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The fundamental components.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Math.html" accesskey="2">Math</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Linear algebra, spatial partitioning, and more.
+<tr><td align="left" valign="top">&bull; <a href="Math.html" accesskey="2">Math</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Vectors, matrices, bounding boxes, and more.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Graphics.html" accesskey="3">Graphics</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Eye candy.
+<tr><td align="left" valign="top">&bull; <a href="Graphics.html" accesskey="3">Graphics</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">2D and 3D rendering.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Audio.html" accesskey="4">Audio</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Make some noise.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Scripting.html" accesskey="5">Scripting</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Bringing the game world to life.
</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="Data-Structures.html" accesskey="6">Data Structures</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Queues, heaps, spatial partitioning, and more.
+</td></tr>
</table>
diff --git a/manuals/chickadee/Agendas.html b/manuals/chickadee/Agendas.html
index 28189a6..f6acd57 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Scripts.html" accesskey="n" rel="next">Scripts</a>, Up: <a href="Scripting.html" accesskey="u" rel="up">Scripting</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Agendas-1"></span><h4 class="subsection">2.5.1 Agendas</h4>
+<span id="Agendas-1"></span><h4 class="subsection">5.5.1 Agendas</h4>
<p>To schedule a task to be performed later, an &ldquo;agenda&rdquo; is used.
There is a default, global agenda that is ready to be used, or
diff --git a/manuals/chickadee/Array-Lists.html b/manuals/chickadee/Array-Lists.html
new file mode 100644
index 0000000..28e1835
--- /dev/null
+++ b/manuals/chickadee/Array-Lists.html
@@ -0,0 +1,179 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Copyright (C) 2017-2021 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.7, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Array Lists (The Chickadee Game Toolkit)</title>
+
+<meta name="description" content="Array Lists (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Array Lists (The Chickadee Game Toolkit)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="makeinfo">
+<link href="index.html" rel="start" title="Top">
+<link href="Index.html" rel="index" title="Index">
+<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="Data-Structures.html" rel="up" title="Data Structures">
+<link href="Queues.html" rel="next" title="Queues">
+<link href="Data-Structures.html" rel="prev" title="Data Structures">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {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}
+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">
+<span id="Array-Lists"></span><div class="header">
+<p>
+Next: <a href="Queues.html" accesskey="n" rel="next">Queues</a>, Up: <a href="Data-Structures.html" accesskey="u" rel="up">Data Structures</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+</div>
+<hr>
+<span id="Array-Lists-1"></span><h4 class="subsection">5.6.1 Array Lists</h4>
+
+<p>The <code>(chickadee data array-list)</code> module provides an array/vector
+that dynamically expands to hold all of the data that is added to it.
+It is named after the <code>ArrayList</code> class in Java.
+</p>
+<p>In addition to being used as a dynamic vector, it can also be used as
+a stack via the <code>array-list-push!</code> and <var>array-list-pop!</var>
+procedures.
+</p>
+<dl>
+<dt id="index-make_002darray_002dlist">Procedure: <strong>make-array-list</strong> <em>[initial-capacity]</em></dt>
+<dd><p>Return a new empty array list with an initial capacity of
+<var>initial-capacity</var>, or 32 by default.
+</p></dd></dl>
+
+<dl>
+<dt id="index-array_002dlist">Procedure: <strong>array-list</strong> <em>items ...</em></dt>
+<dd><p>Return a new array list with <var>items</var> in it.
+</p></dd></dl>
+
+<dl>
+<dt id="index-array_002dlist_003f">Procedure: <strong>array-list?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is an array list.
+</p></dd></dl>
+
+<dl>
+<dt id="index-array_002dlist_002dempty_003f">Procedure: <strong>array-list-empty?</strong> <em>array-list</em></dt>
+<dd><p>Return <code>#t</code> if <var>array-list</var> is empty.
+</p></dd></dl>
+
+<dl>
+<dt id="index-array_002dlist_002dsize">Procedure: <strong>array-list-size</strong> <em>array-list</em></dt>
+<dd><p>Return the current size of <var>array-list</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-array_002dlist_002dref">Procedure: <strong>array-list-ref</strong> <em>array-list i</em></dt>
+<dd><p>Return the item in <var>array-list</var> at index <var>i</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-array_002dlist_002dset_0021">Procedure: <strong>array-list-set!</strong> <em>array-list i value</em></dt>
+<dd><p>Set the value in <var>array-list</var> at index <var>i</var> to <var>value</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-array_002dlist_002dpush_0021">Procedure: <strong>array-list-push!</strong> <em>array-list item</em></dt>
+<dd><p>Append <var>item</var> to <var>array-list</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-array_002dlist_002dpop_0021">Procedure: <strong>array-list-pop!</strong> <em>array-list</em></dt>
+<dd><p>Remove and return the last object in <var>array-list</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-array_002dlist_002ddelete_0021">Procedure: <strong>array-list-delete!</strong> <em>array-list item [#:equal? equal?] [#:fast? #f]</em></dt>
+<dd><p>Delete <var>item</var> from <var>array-list</var>. Use <var>equal?</var> as the
+equivalence predicate, which defaults to Guile&rsquo;s <code>equal?</code>
+procedure. By default, deletion preserves the order of the array, but
+takes linear time in the worst case. If <var>fast?</var> is <code>#t</code> then
+<var>item</var> will deleted in constant time, but order is not preserved.
+</p></dd></dl>
+
+<dl>
+<dt id="index-array_002dlist_002dclear_0021">Procedure: <strong>array-list-clear!</strong> <em>array-list</em></dt>
+<dd><p>Remove all items from <var>array-list</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-array_002dlist_002dfor_002deach">Procedure: <strong>array-list-for-each</strong> <em>proc array-list</em></dt>
+<dd><p>Apply PROC with each item in <var>array-list</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-array_002dlist_002dfold">Procedure: <strong>array-list-fold</strong> <em>proc init array-list</em></dt>
+<dd><p>Apply <var>proc</var> to all items in <var>array-list</var> to build a result and
+return that result. <var>init</var> is the initial result. If there are
+no objects in the vicinity of <var>rect</var>, just <var>init</var> is returned.
+</p></dd></dl>
+
+<hr>
+<div class="header">
+<p>
+Next: <a href="Queues.html" accesskey="n" rel="next">Queues</a>, Up: <a href="Data-Structures.html" accesskey="u" rel="up">Data Structures</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+</div>
+
+
+
+</body>
+</html>
diff --git a/manuals/chickadee/Audio-Files.html b/manuals/chickadee/Audio-Files.html
index adaa772..f120772 100644
--- a/manuals/chickadee/Audio-Files.html
+++ b/manuals/chickadee/Audio-Files.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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Sources.html" accesskey="n" rel="next">Sources</a>, Up: <a href="Audio.html" accesskey="u" rel="up">Audio</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Audio-Files-1"></span><h4 class="subsection">2.4.1 Audio Files</h4>
+<span id="Audio-Files-1"></span><h4 class="subsection">5.4.1 Audio Files</h4>
<p>Sound data is represented by a special <code>&lt;audio&gt;</code> data type that
stores not only the audio samples themselves, but metadata such as
diff --git a/manuals/chickadee/Audio.html b/manuals/chickadee/Audio.html
index 52ed54b..4a72f03 100644
--- a/manuals/chickadee/Audio.html
+++ b/manuals/chickadee/Audio.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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -33,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" rel="up" title="API Reference">
<link href="Audio-Files.html" rel="next" title="Audio Files">
-<link href="Shaders.html" rel="prev" title="Shaders">
+<link href="Rendering-Engine.html" rel="prev" title="Rendering Engine">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Scripting.html" accesskey="n" rel="next">Scripting</a>, Previous: <a href="Graphics.html" accesskey="p" rel="prev">Graphics</a>, Up: <a href="API-Reference.html" accesskey="u" rel="up">API Reference</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Audio-1"></span><h3 class="section">2.4 Audio</h3>
+<span id="Audio-1"></span><h3 class="section">5.4 Audio</h3>
<p>A game isn&rsquo;t complete without sound. Most games play some cool
background music to set the mood and have many sound effects to play
@@ -108,15 +108,9 @@ in the load hook (or anywhere else once the game loop is running) and
play it!
</p>
<div class="example">
-<pre class="example">(use-modules (chickadee audio))
+<pre class="example">(define sample (load-audio &quot;neat-sound-effect.wav&quot;))
-(define audio #f)
-
-(define (load)
- (set! audio (load-audio &quot;neat-sound-effect.wav&quot;))
- (audio-play audio))
-
-(run-game #:load load)
+(audio-play sample)
</pre></div>
<p>For more advanced usage, check out the full API reference in the
diff --git a/manuals/chickadee/Basics.html b/manuals/chickadee/Basics.html
index e258de2..8b3a5d7 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Vectors.html" accesskey="n" rel="next">Vectors</a>, Up: <a href="Math.html" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Basics-1"></span><h4 class="subsection">2.2.1 Basics</h4>
+<span id="Basics-1"></span><h4 class="subsection">5.2.1 Basics</h4>
<dl>
<dt id="index-pi">Variable: <strong>pi</strong></dt>
@@ -101,7 +101,7 @@ approximation that is &ldquo;good enough.&rdquo;
</p></dd></dl>
<dl>
-<dt id="index-2pi">Variable: <strong>2pi</strong></dt>
+<dt id="index-tau">Variable: <strong>tau</strong></dt>
<dd><p>Twice <var>pi</var>.
</p></dd></dl>
diff --git a/manuals/chickadee/Bezier-Curves.html b/manuals/chickadee/Bezier-Curves.html
index cb413cf..fe6deaa 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -32,7 +32,7 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="Index.html" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Math.html" rel="up" title="Math">
-<link href="Path-Finding.html" rel="next" title="Path Finding">
+<link href="Graphics.html" rel="next" title="Graphics">
<link href="Easings.html" rel="prev" title="Easings">
<style type="text/css">
<!--
@@ -82,10 +82,10 @@ ul.no-bullet {list-style: none}
<body lang="en">
<span id="Bezier-Curves"></span><div class="header">
<p>
-Next: <a href="Path-Finding.html" accesskey="n" rel="next">Path Finding</a>, Previous: <a href="Easings.html" accesskey="p" rel="prev">Easings</a>, Up: <a href="Math.html" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+Previous: <a href="Easings.html" accesskey="p" rel="prev">Easings</a>, Up: <a href="Math.html" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Bezier-Curves-1"></span><h4 class="subsection">2.2.7 Bezier Curves</h4>
+<span id="Bezier-Curves-1"></span><h4 class="subsection">5.2.7 Bezier Curves</h4>
<p>The <code>(chickadee math bezier)</code> module provides an API for
describing cubic Bezier curves in 2D space. These curves are notably
@@ -152,7 +152,7 @@ for <var>bezier</var> at <var>t</var>.
<hr>
<div class="header">
<p>
-Next: <a href="Path-Finding.html" accesskey="n" rel="next">Path Finding</a>, Previous: <a href="Easings.html" accesskey="p" rel="prev">Easings</a>, Up: <a href="Math.html" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+Previous: <a href="Easings.html" accesskey="p" rel="prev">Easings</a>, Up: <a href="Math.html" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
diff --git a/manuals/chickadee/Blending.html b/manuals/chickadee/Blending.html
deleted file mode 100644
index 0a54bbe..0000000
--- a/manuals/chickadee/Blending.html
+++ /dev/null
@@ -1,204 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<!-- Copyright (C) 2017-2020 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.7, 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" rel="start" title="Top">
-<link href="Index.html" rel="index" title="Index">
-<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
-<link href="Graphics.html" rel="up" title="Graphics">
-<link href="Framebuffers.html" rel="next" title="Framebuffers">
-<link href="3D-Models.html" rel="prev" title="3D Models">
-<style type="text/css">
-<!--
-a.summary-letter {text-decoration: none}
-blockquote.indentedblock {margin-right: 0em}
-div.display {margin-left: 3.2em}
-div.example {margin-left: 3.2em}
-div.lisp {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}
-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">
-<span id="Blending"></span><div class="header">
-<p>
-Next: <a href="Framebuffers.html" accesskey="n" rel="next">Framebuffers</a>, Previous: <a href="3D-Models.html" accesskey="p" rel="prev">3D Models</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
-</div>
-<hr>
-<span id="Blending-1"></span><h4 class="subsection">2.3.10 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.
-</p>
-<p>Chickadee provides the following blend modes:
-</p>
-<dl>
-<dt id="index-blend_003aalpha">Variable: <strong>blend:alpha</strong></dt>
-<dd><p>Blend pixels according to the values of their alpha channels. This is
-the most commonly used blend mode.
-</p></dd></dl>
-
-<dl>
-<dt id="index-blend_003areplace">Variable: <strong>blend:replace</strong></dt>
-<dd><p>Overwrite the output pixel color with the color being drawn.
-</p></dd></dl>
-
-<dl>
-<dt id="index-blend_003aadd">Variable: <strong>blend:add</strong></dt>
-<dd><p>Add all pixel color values together. The more colors blended
-together, the more white the final color becomes.
-</p></dd></dl>
-
-<dl>
-<dt id="index-blend_003asubtract">Variable: <strong>blend:subtract</strong></dt>
-<dd><p>Subtract all pixel color values. The more colors blended together,
-the more black the final color becomes.
-</p></dd></dl>
-
-<dl>
-<dt id="index-blend_003amultiply">Variable: <strong>blend:multiply</strong></dt>
-</dl>
-
-<dl>
-<dt id="index-blend_003adarken">Variable: <strong>blend:darken</strong></dt>
-</dl>
-
-<dl>
-<dt id="index-blend_003alighten">Variable: <strong>blend:lighten</strong></dt>
-</dl>
-
-<dl>
-<dt id="index-blend_003ascreen">Variable: <strong>blend:screen</strong></dt>
-</dl>
-
-<p>Custom blend modes can be created using the <code>make-blend-mode</code> procedure:
-</p>
-<dl>
-<dt id="index-make_002dblend_002dmode">Procedure: <strong>make-blend-mode</strong> <em>equation source-function destination-function</em></dt>
-<dd><p>Return a new custom blend mode that applies <var>source-function</var> to
-the source color, <var>destination-function</var> to the destination color,
-and finally applies <var>equation</var> to the transformed
-source/destination color values. These arguments are <em>not</em>
-procedures, but symbolic representations of the functions that OpenGL
-supports.
-</p>
-<p>Valid values for <var>equation</var> are:
-</p>
-<ul>
-<li> <code>add</code>
-</li><li> <code>subtract</code>
-</li><li> <code>reverse-subtract</code>
-</li><li> <code>min</code>
-</li><li> <code>max</code>
-</li><li> <code>alpha-min</code>
-</li><li> <code>alpha-max</code>
-</li></ul>
-
-<p>Valid values for <var>source-function</var> are:
-</p>
-<ul>
-<li> <code>zero</code>
-</li><li> <code>one</code>
-</li><li> <code>destination-color</code>
-</li><li> <code>one-minus-destination-color</code>
-</li><li> <code>source-alpha-saturate</code>
-</li><li> <code>source-alpha</code>
-</li><li> <code>one-minus-source-alpha</code>
-</li><li> <code>destination-alpha</code>
-</li><li> <code>one-minus-destination-alpha</code>
-</li><li> <code>constant-color</code>
-</li><li> <code>one-minus-constant-color</code>
-</li><li> <code>constant-alpha</code>
-</li><li> <code>one-minus-constant-alpha</code>
-</li></ul>
-
-<p>Valid values for <var>destination-function</var> are:
-</p>
-<ul>
-<li> <code>zero</code>
-</li><li> <code>one</code>
-</li><li> <code>source-color</code>
-</li><li> <code>one-minus-source-color</code>
-</li><li> <code>source-alpha</code>
-</li><li> <code>one-minus-source-alpha</code>
-</li><li> <code>destination-alpha</code>
-</li><li> <code>one-minus-destination-alpha</code>
-</li><li> <code>constant-color</code>
-</li><li> <code>one-minus-constant-color</code>
-</li><li> <code>constant-alpha</code>
-</li><li> <code>one-minus-constant-alpha</code>
-</li></ul>
-
-</dd></dl>
-
-<hr>
-<div class="header">
-<p>
-Next: <a href="Framebuffers.html" accesskey="n" rel="next">Framebuffers</a>, Previous: <a href="3D-Models.html" accesskey="p" rel="prev">3D Models</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
-</div>
-
-
-
-</body>
-</html>
diff --git a/manuals/chickadee/Buffers.html b/manuals/chickadee/Buffers.html
index 06b156a..ffb4714 100644
--- a/manuals/chickadee/Buffers.html
+++ b/manuals/chickadee/Buffers.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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -33,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" rel="up" title="Graphics">
<link href="Shaders.html" rel="next" title="Shaders">
-<link href="Rendering-Engine.html" rel="prev" title="Rendering Engine">
+<link href="Meshes.html" rel="prev" title="Meshes">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
@@ -82,10 +82,10 @@ ul.no-bullet {list-style: none}
<body lang="en">
<span id="Buffers"></span><div class="header">
<p>
-Next: <a href="Shaders.html" accesskey="n" rel="next">Shaders</a>, Previous: <a href="Rendering-Engine.html" accesskey="p" rel="prev">Rendering Engine</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Shaders.html" accesskey="n" rel="next">Shaders</a>, Previous: <a href="Meshes.html" accesskey="p" rel="prev">Meshes</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Buffers-1"></span><h4 class="subsection">2.3.14 Buffers</h4>
+<span id="Buffers-1"></span><h4 class="subsection">5.3.12 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
@@ -128,21 +128,21 @@ float is 4 bytes in length, so the buffer&rsquo;s stride is 16.
<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:
+into the buffer. To define vertex attributes, the
+<code>make-vertex-attribute</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))
+ (make-vertex-attribute #: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))
+ (make-vertex-attribute #: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
@@ -157,21 +157,20 @@ created.
(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))
+ (make-vertex-attribute #: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</a>) expects
-for each attribute.
+<p>Now that the vertex attributes have been created, all that&rsquo;s left is
+to bind them all together in a vertex array. Vertex arrays associate
+each vertex attribute 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</a>) expects for each attribute.
</p>
<div class="example">
<pre class="example">(define vertex-array
@@ -290,14 +289,24 @@ 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>
+<dl>
+<dt id="index-current_002dbuffer">Procedure: <strong>current-buffer</strong></dt>
+<dd><p>Return the current buffer.
+</p></dd></dl>
+
+<dl>
+<dt id="index-g_003abuffer">Variable: <strong>g:buffer</strong></dt>
+<dd><p>Render state for buffers (see <a href="Rendering-Engine.html">Rendering Engine</a>.)
+</p></dd></dl>
+
<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 id="index-make_002dbuffer_002dview">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>
+<dt id="index-make_002dvertex_002dattribute">Procedure: <strong>make-vertex-attribute</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
+<p>Return a new vertex attribute 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>
@@ -350,60 +359,61 @@ for 2 instances, and so on.
</p></dd></dl>
<dl>
-<dt id="index-buffer_002dview_003f">Procedure: <strong>buffer-view?</strong> <em>obj</em></dt>
-<dd><p>Return <code>#t</code> if <var>obj</var> is a buffer view.
+<dt id="index-vertex_002dattribute_003f">Procedure: <strong>vertex-attribute?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a vertex attribute.
</p></dd></dl>
<dl>
-<dt id="index-buffer_002dview_002d_003ebuffer">Procedure: <strong>buffer-view-&gt;buffer</strong> <em>buffer-view</em></dt>
-<dd><p>Return the buffer that <var>buffer-view</var> is using.
+<dt id="index-vertex_002dattribute_002d_003ebuffer">Procedure: <strong>vertex-attribute-&gt;buffer</strong> <em>vertex-attribute</em></dt>
+<dd><p>Return the buffer that <var>vertex-attribute</var> is using.
</p></dd></dl>
<dl>
-<dt id="index-buffer_002dview_002dname">Procedure: <strong>buffer-view-name</strong> <em>buffer-view</em></dt>
-<dd><p>Return the name of <var>buffer-view</var>.
+<dt id="index-vertex_002dattribute_002dname">Procedure: <strong>vertex-attribute-name</strong> <em>vertex-attribute</em></dt>
+<dd><p>Return the name of <var>vertex-attribute</var>.
</p></dd></dl>
<dl>
-<dt id="index-buffer_002dview_002doffset">Procedure: <strong>buffer-view-offset</strong> <em>buffer-view</em></dt>
-<dd><p>Return the byte offset of <var>buffer-view</var>.
+<dt id="index-vertex_002dattribute_002doffset">Procedure: <strong>vertex-attribute-offset</strong> <em>vertex-attribute</em></dt>
+<dd><p>Return the byte offset of <var>vertex-attribute</var>.
</p></dd></dl>
<dl>
-<dt id="index-buffer_002dview_002dtype">Procedure: <strong>buffer-view-type</strong> <em>buffer-view</em></dt>
-<dd><p>Return the data type of <var>buffer-view</var>.
+<dt id="index-vertex_002dattribute_002dtype">Procedure: <strong>vertex-attribute-type</strong> <em>vertex-attribute</em></dt>
+<dd><p>Return the data type of <var>vertex-attribute</var>.
</p></dd></dl>
<dl>
-<dt id="index-buffer_002dview_002dcomponent_002dtype">Procedure: <strong>buffer-view-component-type</strong> <em>buffer-view</em></dt>
-<dd><p>Return the component data type of <var>buffer-view</var>
+<dt id="index-vertex_002dattribute_002dcomponent_002dtype">Procedure: <strong>vertex-attribute-component-type</strong> <em>vertex-attribute</em></dt>
+<dd><p>Return the component data type of <var>vertex-attribute</var>
</p></dd></dl>
<dl>
-<dt id="index-buffer_002dview_002ddivisor">Procedure: <strong>buffer-view-divisor</strong> <em>buffer-view</em></dt>
-<dd><p>Return the instance divisor for <var>buffer-view</var>.
+<dt id="index-vertex_002dattribute_002ddivisor">Procedure: <strong>vertex-attribute-divisor</strong> <em>vertex-attribute</em></dt>
+<dd><p>Return the instance divisor for <var>vertex-attribute</var>.
</p></dd></dl>
<dl>
-<dt id="index-with_002dmapped_002dbuffer_002dview">Syntax: <strong>with-mapped-buffer-view</strong> <em>buffer-view body &hellip;</em></dt>
+<dt id="index-with_002dmapped_002dvertex_002dattribute">Syntax: <strong>with-mapped-vertex-attribute</strong> <em>vertex-attribute 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>Evaluate <var>body</var> in the context of <var>vertex-attribute</var> having
+its data synced from GPU memory to RAM. See <code>with-mapped-buffer</code>
+for more information.
</p></dd></dl>
<dl>
<dt id="index-make_002dvertex_002darray">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>Return a new vertex array using the index data within the vertex
+attributes <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><var>attributes</var> is an alist mapping shader attribute indices to
+vertex attributes:
</p>
<div class="example">
-<pre class="example">`((1 . ,buffer-view-a)
- (2 . ,buffer-view-b)
+<pre class="example">`((1 . ,vertex-attribute-a)
+ (2 . ,vertex-attribute-b)
&hellip;)
</pre></div>
@@ -450,10 +460,20 @@ data for <var>vertex-array</var>.
<dd><p>Return the primitive rendering mode for <var>vertex-array</var>.
</p></dd></dl>
+<dl>
+<dt id="index-current_002dvertex_002darray">Procedure: <strong>current-vertex-array</strong></dt>
+<dd><p>Return the current vertex array.
+</p></dd></dl>
+
+<dl>
+<dt id="index-g_003avertex_002darray">Variable: <strong>g:vertex-array</strong></dt>
+<dd><p>Render state for vertex arrays (see <a href="Rendering-Engine.html">Rendering Engine</a>.)
+</p></dd></dl>
+
<hr>
<div class="header">
<p>
-Next: <a href="Shaders.html" accesskey="n" rel="next">Shaders</a>, Previous: <a href="Rendering-Engine.html" accesskey="p" rel="prev">Rendering Engine</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Shaders.html" accesskey="n" rel="next">Shaders</a>, Previous: <a href="Meshes.html" accesskey="p" rel="prev">Meshes</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
diff --git a/manuals/chickadee/Channels.html b/manuals/chickadee/Channels.html
index 131156a..24c3dba 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -32,7 +32,7 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="Index.html" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Scripting.html" rel="up" title="Scripting">
-<link href="Copying-This-Manual.html" rel="next" title="Copying This Manual">
+<link href="Data-Structures.html" rel="next" title="Data Structures">
<link href="Tweening.html" rel="prev" title="Tweening">
<style type="text/css">
<!--
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Previous: <a href="Tweening.html" accesskey="p" rel="prev">Tweening</a>, Up: <a href="Scripting.html" accesskey="u" rel="up">Scripting</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Channels-1"></span><h4 class="subsection">2.5.4 Channels</h4>
+<span id="Channels-1"></span><h4 class="subsection">5.5.4 Channels</h4>
<p>Channels are a tool for communicating amongst different scripts. One
script can write a value to the channel and another can read from it.
@@ -145,6 +145,11 @@ with that value.
after it has been received.
</p></dd></dl>
+<dl>
+<dt id="index-channel_002dclear_0021">Procedure: <strong>channel-clear!</strong> <em>channel</em></dt>
+<dd><p>Clear all messages and scripts awaiting messages in <var>channel</var>.
+</p></dd></dl>
+
diff --git a/manuals/chickadee/Colors.html b/manuals/chickadee/Colors.html
index b84e8f4..a7fc10f 100644
--- a/manuals/chickadee/Colors.html
+++ b/manuals/chickadee/Colors.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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Textures.html" accesskey="n" rel="next">Textures</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Colors-1"></span><h4 class="subsection">2.3.1 Colors</h4>
+<span id="Colors-1"></span><h4 class="subsection">5.3.1 Colors</h4>
<p>Merriam-Webster defines color as &ldquo;a phenomenon of light (such as red,
brown, pink, or gray) or visual perception that enables one to
@@ -218,7 +218,7 @@ new color with the result.
factor <var>alpha</var>, a number in the range [0, 1].
</p></dd></dl>
-<span id="Stock-Colors"></span><h4 class="subsubsection">2.3.1.1 Stock Colors</h4>
+<span id="Stock-Colors"></span><h4 class="subsubsection">5.3.1.1 Stock Colors</h4>
<p>For convenience, Chickadee comes with some basic colors predefined:
</p>
diff --git a/manuals/chickadee/Command-Line-Interface.html b/manuals/chickadee/Command-Line-Interface.html
new file mode 100644
index 0000000..787c652
--- /dev/null
+++ b/manuals/chickadee/Command-Line-Interface.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Copyright (C) 2017-2021 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.7, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Command Line Interface (The Chickadee Game Toolkit)</title>
+
+<meta name="description" content="Command Line Interface (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Command Line Interface (The Chickadee Game Toolkit)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="makeinfo">
+<link href="index.html" rel="start" title="Top">
+<link href="Index.html" rel="index" title="Index">
+<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="index.html" rel="up" title="Top">
+<link href="Invoking-chickadee-play.html" rel="next" title="Invoking chickadee play">
+<link href="Getting-Started.html" rel="prev" title="Getting Started">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {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}
+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">
+<span id="Command-Line-Interface"></span><div class="header">
+<p>
+Next: <a href="Live-Coding.html" accesskey="n" rel="next">Live Coding</a>, Previous: <a href="Getting-Started.html" accesskey="p" rel="prev">Getting Started</a>, Up: <a href="index.html" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+</div>
+<hr>
+<span id="Command-Line-Interface-1"></span><h2 class="chapter">3 Command Line Interface</h2>
+
+<p>While Chickadee is a library at heart, it also comes with a command
+line utility to make it easier to get started.
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="Invoking-chickadee-play.html" accesskey="1">Invoking chickadee play</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Run Chickadee programs
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="Invoking-chickadee-bundle.html" accesskey="2">Invoking chickadee bundle</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Create redistributable binary bundles
+</td></tr>
+</table>
+
+
+
+
+</body>
+</html>
diff --git a/manuals/chickadee/Copying-This-Manual.html b/manuals/chickadee/Copying-This-Manual.html
index 30e570e..4738441 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -33,7 +33,7 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="index.html" rel="up" title="Top">
<link href="GNU-Free-Documentation-License.html" rel="next" title="GNU Free Documentation License">
-<link href="Channels.html" rel="prev" title="Channels">
+<link href="Path-Finding.html" rel="prev" title="Path Finding">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
diff --git a/manuals/chickadee/Data-Structures.html b/manuals/chickadee/Data-Structures.html
new file mode 100644
index 0000000..db95890
--- /dev/null
+++ b/manuals/chickadee/Data-Structures.html
@@ -0,0 +1,109 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Copyright (C) 2017-2021 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.7, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Data Structures (The Chickadee Game Toolkit)</title>
+
+<meta name="description" content="Data Structures (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Data Structures (The Chickadee Game Toolkit)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="makeinfo">
+<link href="index.html" rel="start" title="Top">
+<link href="Index.html" rel="index" title="Index">
+<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="API-Reference.html" rel="up" title="API Reference">
+<link href="Array-Lists.html" rel="next" title="Array Lists">
+<link href="Channels.html" rel="prev" title="Channels">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {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}
+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">
+<span id="Data-Structures"></span><div class="header">
+<p>
+Previous: <a href="Scripting.html" accesskey="p" rel="prev">Scripting</a>, Up: <a href="API-Reference.html" accesskey="u" rel="up">API Reference</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+</div>
+<hr>
+<span id="Data-Structures-1"></span><h3 class="section">5.6 Data Structures</h3>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a href="Array-Lists.html" accesskey="1">Array Lists</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Dynamically expanding vectors.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="Queues.html" accesskey="2">Queues</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">First-in, first-out data structure.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="Heaps.html" accesskey="3">Heaps</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Binary heaps.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="Quadtrees.html" accesskey="4">Quadtrees</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Spatial partitioning with recursive subdivision.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="Grids.html" accesskey="5">Grids</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Spatial partitioning with a fixed grid.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="Path-Finding.html" accesskey="6">Path Finding</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Generic A* path finding.
+</td></tr>
+</table>
+
+
+
+
+</body>
+</html>
diff --git a/manuals/chickadee/Easings.html b/manuals/chickadee/Easings.html
index 0e79a7e..6169f14 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Bezier-Curves.html" accesskey="n" rel="next">Bezier Curves</a>, Previous: <a href="Quaternions.html" accesskey="p" rel="prev">Quaternions</a>, Up: <a href="Math.html" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Easings-1"></span><h4 class="subsection">2.2.6 Easings</h4>
+<span id="Easings-1"></span><h4 class="subsection">5.2.6 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
diff --git a/manuals/chickadee/Fonts.html b/manuals/chickadee/Fonts.html
index e2ab386..a442f91 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -33,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" rel="up" title="Graphics">
<link href="Vector-Paths.html" rel="next" title="Vector Paths">
-<link href="9_002dPatches.html" rel="prev" title="9-Patches">
+<link href="Sprites.html" rel="prev" title="Sprites">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
@@ -82,10 +82,10 @@ ul.no-bullet {list-style: none}
<body lang="en">
<span id="Fonts"></span><div class="header">
<p>
-Next: <a href="Vector-Paths.html" accesskey="n" rel="next">Vector Paths</a>, Previous: <a href="9_002dPatches.html" accesskey="p" rel="prev">9-Patches</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Vector-Paths.html" accesskey="n" rel="next">Vector Paths</a>, Previous: <a href="Sprites.html" accesskey="p" rel="prev">Sprites</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Fonts-1"></span><h4 class="subsection">2.3.5 Fonts</h4>
+<span id="Fonts-1"></span><h4 class="subsection">5.3.4 Fonts</h4>
<p>Printing text to the screen is quite easy:
</p>
@@ -171,7 +171,7 @@ the other arguments.
<hr>
<div class="header">
<p>
-Next: <a href="Vector-Paths.html" accesskey="n" rel="next">Vector Paths</a>, Previous: <a href="9_002dPatches.html" accesskey="p" rel="prev">9-Patches</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Vector-Paths.html" accesskey="n" rel="next">Vector Paths</a>, Previous: <a href="Sprites.html" accesskey="p" rel="prev">Sprites</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
diff --git a/manuals/chickadee/Framebuffers.html b/manuals/chickadee/Framebuffers.html
index a6ad3d2..a3d247d 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -33,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" rel="up" title="Graphics">
<link href="Viewports.html" rel="next" title="Viewports">
-<link href="Blending.html" rel="prev" title="Blending">
+<link href="Shaders.html" rel="prev" title="Shaders">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
@@ -82,10 +82,10 @@ ul.no-bullet {list-style: none}
<body lang="en">
<span id="Framebuffers"></span><div class="header">
<p>
-Next: <a href="Viewports.html" accesskey="n" rel="next">Viewports</a>, Previous: <a href="Blending.html" accesskey="p" rel="prev">Blending</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Viewports.html" accesskey="n" rel="next">Viewports</a>, Previous: <a href="Shaders.html" accesskey="p" rel="prev">Shaders</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Framebuffers-1"></span><h4 class="subsection">2.3.11 Framebuffers</h4>
+<span id="Framebuffers-1"></span><h4 class="subsection">5.3.14 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
@@ -130,6 +130,16 @@ framebuffer <var>fb</var>.
<dd><p>The default framebuffer.
</p></dd></dl>
+<dl>
+<dt id="index-current_002dframebuffer">Procedure: <strong>current-framebuffer</strong></dt>
+<dd><p>Return the current framebuffer.
+</p></dd></dl>
+
+<dl>
+<dt id="index-g_003aframebuffer">Variable: <strong>g:framebuffer</strong></dt>
+<dd><p>Render state for framebuffers (see <a href="Rendering-Engine.html">Rendering Engine</a>.)
+</p></dd></dl>
+
diff --git a/manuals/chickadee/GNU-Free-Documentation-License.html b/manuals/chickadee/GNU-Free-Documentation-License.html
index a1caaaf..b940738 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
diff --git a/manuals/chickadee/Getting-Started.html b/manuals/chickadee/Getting-Started.html
new file mode 100644
index 0000000..7508ebe
--- /dev/null
+++ b/manuals/chickadee/Getting-Started.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Copyright (C) 2017-2021 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.7, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Getting Started (The Chickadee Game Toolkit)</title>
+
+<meta name="description" content="Getting Started (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Getting Started (The Chickadee Game Toolkit)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="makeinfo">
+<link href="index.html" rel="start" title="Top">
+<link href="Index.html" rel="index" title="Index">
+<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="index.html" rel="up" title="Top">
+<link href="Command-Line-Interface.html" rel="next" title="Command Line Interface">
+<link href="Requirements.html" rel="prev" title="Requirements">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {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}
+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">
+<span id="Getting-Started"></span><div class="header">
+<p>
+Next: <a href="Command-Line-Interface.html" accesskey="n" rel="next">Command Line Interface</a>, Previous: <a href="Installation.html" accesskey="p" rel="prev">Installation</a>, Up: <a href="index.html" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+</div>
+<hr>
+<span id="Getting-Started-1"></span><h2 class="chapter">2 Getting Started</h2>
+
+<p>One of the simplest programs we can make with Chickadee is rendering
+the text &ldquo;Hello, world&rdquo; on screen. Here&rsquo;s what that looks like:
+</p>
+<div class="example">
+<pre class="example">(define (draw alpha)
+ (draw-text &quot;Hello, world!&quot; (vec2 64.0 240.0)))
+</pre></div>
+
+<p>The <code>draw</code> procedure is called frequently to draw the game scene.
+For the sake of simplicity, we will ignore the <code>alpha</code> variable
+in this tutorial.
+</p>
+<p>To run this program, we&rsquo;ll use the <code>chickadee play</code> command:
+</p>
+<div class="example">
+<pre class="example">chickadee play hello.scm
+</pre></div>
+
+<p>This is a good start, but it&rsquo;s boring. Let&rsquo;s make the text move!
+</p>
+<div class="example">
+<pre class="example">(define position (vec2 0.0 240.0))
+
+(define (draw alpha)
+ (draw-text &quot;Hello, world!&quot; position))
+
+(define (update dt)
+ (set-vec2-x! position (+ (vec2-x position) (* 100.0 dt))))
+</pre></div>
+
+<p>The <code>vec2</code> type is used to store 2D coordinates
+(see <a href="Vectors.html">Vectors</a>.) A variable named <code>position</code> contains the
+position where the text should be rendered. A new hook called
+<code>update</code> has been added to handle the animation. This hook is
+called frequently to update the state of the game. The variable
+<code>dt</code> (short for &ldquo;delta-time&rdquo;) contains the amount of time that
+has passed since the last update, in seconds. Putting it all
+together, this update procedure is incrementing the x coordinate of
+the position by 100 pixels per second.
+</p>
+<p>This is neat, but after a few seconds the text moves off the screen
+completely, never to be seen again. It would be better if the text
+bounced back and forth against the sides of the window.
+</p>
+<div class="example">
+<pre class="example">(define position (vec2 0.0 240.0))
+
+(define (draw alpha)
+ (draw-text &quot;Hello, world!&quot; position))
+
+(define (update dt)
+ (update-agenda dt))
+
+(define (update-x x)
+ (set-vec2-x! position x))
+
+(let ((start 0.0)
+ (end 536.0)
+ (duration 4.0))
+ (script
+ (while #t
+ (tween duration start end update-x)
+ (tween duration end start update-x))))
+</pre></div>
+
+<p>This final example uses Chickadee&rsquo;s scripting features
+(see <a href="Scripting.html">Scripting</a>) to bounce the text between the edges of the window
+indefinitely using the handy <code>tween</code> procedure. The only thing
+the <code>update</code> procedure needs to do now is advance the clock of
+the &ldquo;agenda&rdquo; (the thing that runs scripts.) The script takes care
+of the rest.
+</p>
+<p>This quick tutorial has hopefully given you a taste of what you can do
+with Chickadee. The rest of this manual gets into all of the details
+that were glossed over, and much more. Try rendering a sprite,
+playing a sound effect, or handling keyboard input. But most
+importantly: Have fun!
+</p>
+<hr>
+<div class="header">
+<p>
+Next: <a href="Command-Line-Interface.html" accesskey="n" rel="next">Command Line Interface</a>, Previous: <a href="Installation.html" accesskey="p" rel="prev">Installation</a>, Up: <a href="index.html" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+</div>
+
+
+
+</body>
+</html>
diff --git a/manuals/chickadee/Graphics.html b/manuals/chickadee/Graphics.html
index 60ba1f8..31a2c83 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -33,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" rel="up" title="API Reference">
<link href="Colors.html" rel="next" title="Colors">
-<link href="Grid.html" rel="prev" title="Grid">
+<link href="Bezier-Curves.html" rel="prev" title="Bezier Curves">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Audio.html" accesskey="n" rel="next">Audio</a>, Previous: <a href="Math.html" accesskey="p" rel="prev">Math</a>, Up: <a href="API-Reference.html" accesskey="u" rel="up">API Reference</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Graphics-1"></span><h3 class="section">2.3 Graphics</h3>
+<span id="Graphics-1"></span><h3 class="section">5.3 Graphics</h3>
<p>Chickadee aims to make hardware-accelerated graphics rendering as
simple and efficient as possible by providing high-level APIs that
@@ -99,33 +99,37 @@ blocks to implement additional rendering techniques.
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="Colors.html" accesskey="1">Colors</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Such pretty colors...
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Textures.html" 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="Textures.html" accesskey="2">Textures</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">2D images, tile atlases, cube maps, etc.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Sprites.html" accesskey="3">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="9_002dPatches.html" accesskey="4">9-Patches</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Scalable bitmap boxes.
+<tr><td align="left" valign="top">&bull; <a href="Fonts.html" accesskey="4">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="Fonts.html" accesskey="5">Fonts</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Drawing text.
+<tr><td align="left" valign="top">&bull; <a href="Vector-Paths.html" accesskey="5">Vector Paths</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Draw filled and stroked paths.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Vector-Paths.html" accesskey="6">Vector Paths</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Draw filled and stroked paths.
+<tr><td align="left" valign="top">&bull; <a href="Particles.html" 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="Particles.html" accesskey="7">Particles</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Pretty little flying pieces!
+<tr><td align="left" valign="top">&bull; <a href="Tile-Maps.html" accesskey="7">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="Tile-Maps.html" accesskey="8">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="Models.html" accesskey="8">Models</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Load 3D models from disk.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="3D-Models.html" accesskey="9">3D Models</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Spinning teapots everywhere.
+<tr><td align="left" valign="top">&bull; <a href="Lights.html" accesskey="9">Lights</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Dynamic 3D lighting.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Blending.html">Blending</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="Skyboxes.html">Skyboxes</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Backgrounds for 3D environments.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="Meshes.html">Meshes</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">3D meshes and materials.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="Buffers.html">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="Shaders.html">Shaders</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Create custom GPU programs.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Framebuffers.html">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="Viewports.html">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="Rendering-Engine.html">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="Buffers.html">Buffers</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Send data to the GPU.
+<tr><td align="left" valign="top">&bull; <a href="Render-Settings.html">Render Settings</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Depth tests, stencil tests, polygon modes, etc.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Shaders.html">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</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Rendering state management.
</td></tr>
</table>
diff --git a/manuals/chickadee/Grid.html b/manuals/chickadee/Grids.html
index ed96cd3..ef364be 100644
--- a/manuals/chickadee/Grid.html
+++ b/manuals/chickadee/Grids.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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -21,19 +21,19 @@ http://www.texinfo.org/ (GNU Texinfo).
<!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>Grid (The Chickadee Game Toolkit)</title>
+<title>Grids (The Chickadee Game Toolkit)</title>
-<meta name="description" content="Grid (The Chickadee Game Toolkit)">
-<meta name="keywords" content="Grid (The Chickadee Game Toolkit)">
+<meta name="description" content="Grids (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Grids (The Chickadee Game Toolkit)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<link href="index.html" rel="start" title="Top">
<link href="Index.html" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
-<link href="Math.html" rel="up" title="Math">
-<link href="Graphics.html" rel="next" title="Graphics">
-<link href="Path-Finding.html" rel="prev" title="Path Finding">
+<link href="Data-Structures.html" rel="up" title="Data Structures">
+<link href="Path-Finding.html" rel="next" title="Path Finding">
+<link href="Quadtrees.html" rel="prev" title="Quadtrees">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
@@ -80,14 +80,14 @@ ul.no-bullet {list-style: none}
</head>
<body lang="en">
-<span id="Grid"></span><div class="header">
+<span id="Grids"></span><div class="header">
<p>
-Previous: <a href="Path-Finding.html" accesskey="p" rel="prev">Path Finding</a>, Up: <a href="Math.html" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Path-Finding.html" accesskey="n" rel="next">Path Finding</a>, Previous: <a href="Quadtrees.html" accesskey="p" rel="prev">Quadtrees</a>, Up: <a href="Data-Structures.html" accesskey="u" rel="up">Data Structures</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Grid-1"></span><h4 class="subsection">2.2.9 Grid</h4>
+<span id="Grids-1"></span><h4 class="subsection">5.6.5 Grids</h4>
-<p>The <code>(chickadee math grid)</code> module provides a simple spatial
+<p>The <code>(chickadee data grid)</code> module provides a simple spatial
partitioning system for axis-aligned bounding boxes
(see <a href="Rectangles.html">Rectangles</a>) in 2D space. The grid divides the world into
tiles and keeps track of which rectangles occupy which tiles. When
@@ -205,7 +205,7 @@ the minimum amount needed to make it no longer overlap
<hr>
<div class="header">
<p>
-Previous: <a href="Path-Finding.html" accesskey="p" rel="prev">Path Finding</a>, Up: <a href="Math.html" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Path-Finding.html" accesskey="n" rel="next">Path Finding</a>, Previous: <a href="Quadtrees.html" accesskey="p" rel="prev">Quadtrees</a>, Up: <a href="Data-Structures.html" accesskey="u" rel="up">Data Structures</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
diff --git a/manuals/chickadee/Heaps.html b/manuals/chickadee/Heaps.html
new file mode 100644
index 0000000..8aea793
--- /dev/null
+++ b/manuals/chickadee/Heaps.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Copyright (C) 2017-2021 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.7, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Heaps (The Chickadee Game Toolkit)</title>
+
+<meta name="description" content="Heaps (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Heaps (The Chickadee Game Toolkit)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="makeinfo">
+<link href="index.html" rel="start" title="Top">
+<link href="Index.html" rel="index" title="Index">
+<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="Data-Structures.html" rel="up" title="Data Structures">
+<link href="Quadtrees.html" rel="next" title="Quadtrees">
+<link href="Queues.html" rel="prev" title="Queues">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {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}
+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">
+<span id="Heaps"></span><div class="header">
+<p>
+Next: <a href="Quadtrees.html" accesskey="n" rel="next">Quadtrees</a>, Previous: <a href="Queues.html" accesskey="p" rel="prev">Queues</a>, Up: <a href="Data-Structures.html" accesskey="u" rel="up">Data Structures</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+</div>
+<hr>
+<span id="Heaps-1"></span><h4 class="subsection">5.6.3 Heaps</h4>
+
+<p>The <code>(chickadee data heap)</code> module provides a binary heap data
+structure. The heap orders data from smallest to largest, according
+to a custom comparison predicate, making it a good choice for priority
+queues.
+</p>
+<dl>
+<dt id="index-make_002dheap">Procedure: <strong>make-heap</strong> <em>[#:&lt; &lt;]</em></dt>
+<dd><p>Return a new heap that uses the predicate <var>&lt;</var> to determine order.
+</p></dd></dl>
+
+<dl>
+<dt id="index-heap_003f">Procedure: <strong>heap?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a heap.
+</p></dd></dl>
+
+<dl>
+<dt id="index-heap_002dempty_003f">Procedure: <strong>heap-empty?</strong> <em>heap</em></dt>
+<dd><p>Return <code>#t</code> if <var>heap</var> is empty.
+</p></dd></dl>
+
+<dl>
+<dt id="index-heap_002dsize">Procedure: <strong>heap-size</strong> <em>heap</em></dt>
+<dd><p>Return the current size of <var>heap</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-heap_002dmin">Procedure: <strong>heap-min</strong> <em>heap</em></dt>
+<dd><p>Return the minimum item in <var>heap</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-heap_002dinsert_0021">Procedure: <strong>heap-insert!</strong> <em>heap item</em></dt>
+<dd><p>Add <var>item</var> to <var>heap</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-heap_002dremove_0021">Procedure: <strong>heap-remove!</strong> <em>heap</em></dt>
+<dd><p>Remove the minimum item in <var>heap</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-heap_002dclear_0021">Procedure: <strong>heap-clear!</strong> <em>heap</em></dt>
+<dd><p>Remove all items from <var>heap</var>.
+</p></dd></dl>
+
+
+
+
+</body>
+</html>
diff --git a/manuals/chickadee/Index.html b/manuals/chickadee/Index.html
index e9ea924..99a7806 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -86,7 +86,7 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<hr>
<span id="Index-1"></span><h2 class="unnumbered">Index</h2>
-<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Index_fn_symbol-1"><b>2</b></a>
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Index_fn_symbol-1"><b>%</b></a>
&nbsp;
<br>
<a class="summary-letter" href="#Index_fn_letter-A"><b>A</b></a>
@@ -139,8 +139,8 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<table class="index-fn" border="0">
<tr><td></td><th align="left">Index Entry</th><td>&nbsp;</td><th align="left"> Section</th></tr>
<tr><td colspan="4"> <hr></td></tr>
-<tr><th id="Index_fn_symbol-1">2</th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="Basics.html#index-2pi"><code>2pi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Basics.html">Basics</a></td></tr>
+<tr><th id="Index_fn_symbol-1">%</th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="Invoking-chickadee-bundle.html#index-_0025default_002dconfig"><code>%default-config</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Invoking-chickadee-bundle.html">Invoking chickadee bundle</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_fn_letter-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</a></td></tr>
@@ -156,6 +156,19 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-animation_002dframes"><code>animation-frames</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html">Tile Maps</a></td></tr>
<tr><td></td><td valign="top"><a href="Tile-Maps.html#index-animation_003f"><code>animation?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Tile-Maps.html">Tile Maps</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-arc"><code>arc</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
+<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-arc_002dto"><code>arc-to</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
+<tr><td></td><td valign="top"><a href="Array-Lists.html#index-array_002dlist"><code>array-list</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Array-Lists.html">Array Lists</a></td></tr>
+<tr><td></td><td valign="top"><a href="Array-Lists.html#index-array_002dlist_002dclear_0021"><code>array-list-clear!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Array-Lists.html">Array Lists</a></td></tr>
+<tr><td></td><td valign="top"><a href="Array-Lists.html#index-array_002dlist_002ddelete_0021"><code>array-list-delete!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Array-Lists.html">Array Lists</a></td></tr>
+<tr><td></td><td valign="top"><a href="Array-Lists.html#index-array_002dlist_002dempty_003f"><code>array-list-empty?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Array-Lists.html">Array Lists</a></td></tr>
+<tr><td></td><td valign="top"><a href="Array-Lists.html#index-array_002dlist_002dfold"><code>array-list-fold</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Array-Lists.html">Array Lists</a></td></tr>
+<tr><td></td><td valign="top"><a href="Array-Lists.html#index-array_002dlist_002dfor_002deach"><code>array-list-for-each</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Array-Lists.html">Array Lists</a></td></tr>
+<tr><td></td><td valign="top"><a href="Array-Lists.html#index-array_002dlist_002dpop_0021"><code>array-list-pop!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Array-Lists.html">Array Lists</a></td></tr>
+<tr><td></td><td valign="top"><a href="Array-Lists.html#index-array_002dlist_002dpush_0021"><code>array-list-push!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Array-Lists.html">Array Lists</a></td></tr>
+<tr><td></td><td valign="top"><a href="Array-Lists.html#index-array_002dlist_002dref"><code>array-list-ref</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Array-Lists.html">Array Lists</a></td></tr>
+<tr><td></td><td valign="top"><a href="Array-Lists.html#index-array_002dlist_002dset_0021"><code>array-list-set!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Array-Lists.html">Array Lists</a></td></tr>
+<tr><td></td><td valign="top"><a href="Array-Lists.html#index-array_002dlist_002dsize"><code>array-list-size</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Array-Lists.html">Array Lists</a></td></tr>
+<tr><td></td><td valign="top"><a href="Array-Lists.html#index-array_002dlist_003f"><code>array-list?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Array-Lists.html">Array Lists</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</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</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</a></td></tr>
@@ -170,6 +183,7 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><td></td><td valign="top"><a href="Audio-Files.html#index-audio_003f"><code>audio?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Audio-Files.html">Audio Files</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_fn_letter-B">B</th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-back_002dcull_002dface_002dmode"><code>back-cull-face-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-below"><code>below</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-beside"><code>beside</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></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</a></td></tr>
@@ -180,16 +194,17 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<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</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</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-bezier_002dpath-1"><code>bezier-path</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-bezier_002dto"><code>bezier-to</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
<tr><td></td><td valign="top"><a href="Colors.html#index-black"><code>black</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Colors.html">Colors</a></td></tr>
-<tr><td></td><td valign="top"><a href="Blending.html#index-blend_003aadd"><code>blend:add</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Blending.html">Blending</a></td></tr>
-<tr><td></td><td valign="top"><a href="Blending.html#index-blend_003aalpha"><code>blend:alpha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Blending.html">Blending</a></td></tr>
-<tr><td></td><td valign="top"><a href="Blending.html#index-blend_003adarken"><code>blend:darken</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Blending.html">Blending</a></td></tr>
-<tr><td></td><td valign="top"><a href="Blending.html#index-blend_003alighten"><code>blend:lighten</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Blending.html">Blending</a></td></tr>
-<tr><td></td><td valign="top"><a href="Blending.html#index-blend_003amultiply"><code>blend:multiply</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Blending.html">Blending</a></td></tr>
-<tr><td></td><td valign="top"><a href="Blending.html#index-blend_003areplace"><code>blend:replace</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Blending.html">Blending</a></td></tr>
-<tr><td></td><td valign="top"><a href="Blending.html#index-blend_003ascreen"><code>blend:screen</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Blending.html">Blending</a></td></tr>
-<tr><td></td><td valign="top"><a href="Blending.html#index-blend_003asubtract"><code>blend:subtract</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Blending.html">Blending</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-blend_003aadd"><code>blend:add</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-blend_003aalpha"><code>blend:alpha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-blend_003adarken"><code>blend:darken</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-blend_003alighten"><code>blend:lighten</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-blend_003amultiply"><code>blend:multiply</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-blend_003areplace"><code>blend:replace</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-blend_003ascreen"><code>blend:screen</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-blend_003asubtract"><code>blend:subtract</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
<tr><td></td><td valign="top"><a href="Colors.html#index-blue"><code>blue</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Colors.html">Colors</a></td></tr>
<tr><td></td><td valign="top"><a href="Shaders.html#index-bool"><code>bool</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html">Shaders</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</a></td></tr>
@@ -198,21 +213,15 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<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</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</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</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</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</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</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</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</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</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</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</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_fn_letter-C">C</th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="Agendas.html#index-call_002dwhen"><code>call-when</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Agendas.html">Agendas</a></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</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-canvas_003f"><code>canvas?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</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</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Grids.html#index-cell_002dcount"><code>cell-count</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grids.html">Grids</a></td></tr>
+<tr><td></td><td valign="top"><a href="Grids.html#index-cell_003f"><code>cell?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grids.html">Grids</a></td></tr>
+<tr><td></td><td valign="top"><a href="Channels.html#index-channel_002dclear_0021"><code>channel-clear!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Channels.html">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</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</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</a></td></tr>
@@ -235,28 +244,51 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><td></td><td valign="top"><a href="Input-Devices.html#index-controller_002dbutton_002dpressed_003f"><code>controller-button-pressed?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Input-Devices.html">Input Devices</a></td></tr>
<tr><td></td><td valign="top"><a href="Input-Devices.html#index-controller_002dbutton_002dreleased_003f"><code>controller-button-released?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Input-Devices.html">Input Devices</a></td></tr>
<tr><td></td><td valign="top"><a href="Input-Devices.html#index-controller_002dname"><code>controller-name</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Input-Devices.html">Input Devices</a></td></tr>
+<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-corner_002dsplit"><code>corner-split</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-cube_002dmap_003f"><code>cube-map?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-cull_002dface_002dmode_002dback_003f"><code>cull-face-mode-back?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-cull_002dface_002dmode_002dfront_003f"><code>cull-face-mode-front?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-cull_002dface_002dmode_003f"><code>cull-face-mode?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</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</a></td></tr>
<tr><td></td><td valign="top"><a href="Agendas.html#index-current_002dagenda-1"><code>current-agenda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Agendas.html">Agendas</a></td></tr>
-<tr><td></td><td valign="top"><a href="Rendering-Engine.html#index-current_002dblend_002dmode"><code>current-blend-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering-Engine.html">Rendering Engine</a></td></tr>
-<tr><td></td><td valign="top"><a href="Rendering-Engine.html#index-current_002ddepth_002dtest"><code>current-depth-test</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering-Engine.html">Rendering Engine</a></td></tr>
-<tr><td></td><td valign="top"><a href="Rendering-Engine.html#index-current_002dframebuffer"><code>current-framebuffer</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering-Engine.html">Rendering Engine</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-current_002dbuffer"><code>current-buffer</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-current_002dcull_002dface_002dmode"><code>current-cull-face-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-current_002ddepth_002dtest"><code>current-depth-test</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Framebuffers.html#index-current_002dframebuffer"><code>current-framebuffer</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Framebuffers.html">Framebuffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-current_002dmultisample"><code>current-multisample</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-current_002dpolygon_002dmode"><code>current-polygon-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
<tr><td></td><td valign="top"><a href="Rendering-Engine.html#index-current_002dprojection"><code>current-projection</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering-Engine.html">Rendering Engine</a></td></tr>
-<tr><td></td><td valign="top"><a href="Rendering-Engine.html#index-current_002dtexture"><code>current-texture</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering-Engine.html">Rendering Engine</a></td></tr>
-<tr><td></td><td valign="top"><a href="Rendering-Engine.html#index-current_002dviewport"><code>current-viewport</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering-Engine.html">Rendering Engine</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-current_002dstencil_002dtest"><code>current-stencil-test</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-current_002dtexture_002d0"><code>current-texture-0</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-current_002dtexture_002d1"><code>current-texture-1</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-current_002dtexture_002d2"><code>current-texture-2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-current_002dtexture_002d3"><code>current-texture-3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-current_002dtexture_002d4"><code>current-texture-4</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-current_002dvertex_002darray"><code>current-vertex-array</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Viewports.html#index-current_002dviewport"><code>current-viewport</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Viewports.html">Viewports</a></td></tr>
<tr><td></td><td valign="top"><a href="Window-Manipulation.html#index-current_002dwindow"><code>current-window</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Window-Manipulation.html">Window Manipulation</a></td></tr>
<tr><td></td><td valign="top"><a href="Colors.html#index-cyan"><code>cyan</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Colors.html">Colors</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_fn_letter-D">D</th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-default_002dstencil_002dtest"><code>default-stencil-test</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
<tr><td></td><td valign="top"><a href="Shaders.html#index-define_002dshader_002dtype"><code>define-shader-type</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html">Shaders</a></td></tr>
<tr><td></td><td valign="top"><a href="Basics.html#index-degrees_002d_003eradians"><code>degrees-&gt;radians</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Basics.html">Basics</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-depth_002dtest_002dfar"><code>depth-test-far</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-depth_002dtest_002dfunction"><code>depth-test-function</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-depth_002dtest_002dnear"><code>depth-test-near</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-depth_002dtest_002dwrite_003f"><code>depth-test-write?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-depth_002dtest_003f"><code>depth-test?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Queues.html#index-dequeue_0021"><code>dequeue!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Queues.html">Queues</a></td></tr>
+<tr><td></td><td valign="top"><a href="Lights.html#index-directional_002dlight_003f"><code>directional-light?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lights.html">Lights</a></td></tr>
<tr><td></td><td valign="top"><a href="The-Environment.html#index-distance_002dmodel"><code>distance-model</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="The-Environment.html">The Environment</a></td></tr>
<tr><td></td><td valign="top"><a href="The-Environment.html#index-doppler_002dfactor"><code>doppler-factor</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="The-Environment.html">The Environment</a></td></tr>
-<tr><td></td><td valign="top"><a href="9_002dPatches.html#index-draw_002d9_002dpatch"><code>draw-9-patch</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="9_002dPatches.html">9-Patches</a></td></tr>
+<tr><td></td><td valign="top"><a href="Sprites.html#index-draw_002d9_002dpatch"><code>draw-9-patch</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Sprites.html">Sprites</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-draw_002dcanvas"><code>draw-canvas</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
-<tr><td></td><td valign="top"><a href="3D-Models.html#index-draw_002dmodel"><code>draw-model</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="3D-Models.html">3D Models</a></td></tr>
+<tr><td></td><td valign="top"><a href="Models.html#index-draw_002dmodel"><code>draw-model</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Models.html">Models</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</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Skyboxes.html#index-draw_002dskybox"><code>draw-skybox</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Skyboxes.html">Skyboxes</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</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</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</a></td></tr>
@@ -280,12 +312,14 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><td></td><td valign="top"><a href="Easings.html#index-ease_002dout_002dsine"><code>ease-out-sine</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Easings.html">Easings</a></td></tr>
<tr><td></td><td valign="top"><a href="The-Game-Loop.html#index-elapsed_002dtime"><code>elapsed-time</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="The-Game-Loop.html">The Game Loop</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-ellipse"><code>ellipse</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
+<tr><td></td><td valign="top"><a href="Queues.html#index-enqueue_0021"><code>enqueue!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Queues.html">Queues</a></td></tr>
<tr><td></td><td valign="top"><a href="Agendas.html#index-every"><code>every</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Agendas.html">Agendas</a></td></tr>
<tr><td></td><td valign="top"><a href="Agendas.html#index-every-1"><code>every</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Agendas.html">Agendas</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_fn_letter-F">F</th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-fill"><code>fill</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-fill_002dand_002dstroke"><code>fill-and-stroke</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-fill_002dpolygon_002dmode"><code>fill-polygon-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
<tr><td></td><td valign="top"><a href="Shaders.html#index-float"><code>float</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html">Shaders</a></td></tr>
<tr><td></td><td valign="top"><a href="Shaders.html#index-float_002dvec2"><code>float-vec2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html">Shaders</a></td></tr>
<tr><td></td><td valign="top"><a href="Shaders.html#index-float_002dvec3"><code>float-vec3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html">Shaders</a></td></tr>
@@ -296,26 +330,51 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><td></td><td valign="top"><a href="Fonts.html#index-font_002dline_002dheight"><code>font-line-height</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Fonts.html">Fonts</a></td></tr>
<tr><td></td><td valign="top"><a href="Fonts.html#index-font_002dline_002dheight-1"><code>font-line-height</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Fonts.html">Fonts</a></td></tr>
<tr><td></td><td valign="top"><a href="Fonts.html#index-font_003f"><code>font?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Fonts.html">Fonts</a></td></tr>
-<tr><td></td><td valign="top"><a href="Grid.html#index-for_002deach_002dcell"><code>for-each-cell</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grid.html">Grid</a></td></tr>
-<tr><td></td><td valign="top"><a href="Grid.html#index-for_002deach_002ditem"><code>for-each-item</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grid.html">Grid</a></td></tr>
+<tr><td></td><td valign="top"><a href="Grids.html#index-for_002deach_002dcell"><code>for-each-cell</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grids.html">Grids</a></td></tr>
+<tr><td></td><td valign="top"><a href="Grids.html#index-for_002deach_002ditem"><code>for-each-item</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grids.html">Grids</a></td></tr>
<tr><td></td><td valign="top"><a href="Scripts.html#index-forever"><code>forever</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Scripts.html">Scripts</a></td></tr>
<tr><td></td><td valign="top"><a href="Framebuffers.html#index-framebuffer_002dtexture"><code>framebuffer-texture</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Framebuffers.html">Framebuffers</a></td></tr>
<tr><td></td><td valign="top"><a href="Framebuffers.html#index-framebuffer_002dviewport"><code>framebuffer-viewport</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Framebuffers.html">Framebuffers</a></td></tr>
<tr><td></td><td valign="top"><a href="Framebuffers.html#index-framebuffer_003f"><code>framebuffer?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Framebuffers.html">Framebuffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-front_002dand_002dback_002dcull_002dface_002dmode"><code>front-and-back-cull-face-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-front_002dcull_002dface_002dmode"><code>front-cull-face-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_fn_letter-G">G</th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-g_003abuffer"><code>g:buffer</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-g_003acull_002dface_002dmode"><code>g:cull-face-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-g_003adepth_002dtest"><code>g:depth-test</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Framebuffers.html#index-g_003aframebuffer"><code>g:framebuffer</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Framebuffers.html">Framebuffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-g_003amultisample_003f"><code>g:multisample?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-g_003apolygon_002dmode"><code>g:polygon-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-g_003astencil_002dtest"><code>g:stencil-test</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-g_003atexture_002d0"><code>g:texture-0</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-g_003atexture_002d1"><code>g:texture-1</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-g_003atexture_002d2"><code>g:texture-2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-g_003atexture_002d3"><code>g:texture-3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-g_003atexture_002d4"><code>g:texture-4</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html">Textures</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-g_003avertex_002darray"><code>g:vertex-array</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Viewports.html#index-g_003aviewport"><code>g:viewport</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Viewports.html">Viewports</a></td></tr>
+<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-gradient_003f"><code>gradient?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
<tr><td></td><td valign="top"><a href="Colors.html#index-green"><code>green</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Colors.html">Colors</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</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</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</a></td></tr>
-<tr><td></td><td valign="top"><a href="Grid.html#index-grid_002dclear"><code>grid-clear</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grid.html">Grid</a></td></tr>
-<tr><td></td><td valign="top"><a href="Grid.html#index-grid_002ditem_002dcount"><code>grid-item-count</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grid.html">Grid</a></td></tr>
-<tr><td></td><td valign="top"><a href="Grid.html#index-grid_002dmove"><code>grid-move</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grid.html">Grid</a></td></tr>
-<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</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Grids.html#index-grid_002dadd"><code>grid-add</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grids.html">Grids</a></td></tr>
+<tr><td></td><td valign="top"><a href="Grids.html#index-grid_002dcell_002dcount"><code>grid-cell-count</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grids.html">Grids</a></td></tr>
+<tr><td></td><td valign="top"><a href="Grids.html#index-grid_002dcell_002dsize"><code>grid-cell-size</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grids.html">Grids</a></td></tr>
+<tr><td></td><td valign="top"><a href="Grids.html#index-grid_002dclear"><code>grid-clear</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grids.html">Grids</a></td></tr>
+<tr><td></td><td valign="top"><a href="Grids.html#index-grid_002ditem_002dcount"><code>grid-item-count</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grids.html">Grids</a></td></tr>
+<tr><td></td><td valign="top"><a href="Grids.html#index-grid_002dmove"><code>grid-move</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grids.html">Grids</a></td></tr>
+<tr><td></td><td valign="top"><a href="Grids.html#index-grid_002dremove"><code>grid-remove</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grids.html">Grids</a></td></tr>
+<tr><td></td><td valign="top"><a href="Grids.html#index-grid_003f"><code>grid?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grids.html">Grids</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_fn_letter-H">H</th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="Heaps.html#index-heap_002dclear_0021"><code>heap-clear!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Heaps.html">Heaps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Heaps.html#index-heap_002dempty_003f"><code>heap-empty?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Heaps.html">Heaps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Heaps.html#index-heap_002dinsert_0021"><code>heap-insert!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Heaps.html">Heaps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Heaps.html#index-heap_002dmin"><code>heap-min</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Heaps.html">Heaps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Heaps.html#index-heap_002dremove_0021"><code>heap-remove!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Heaps.html">Heaps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Heaps.html#index-heap_002dsize"><code>heap-size</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Heaps.html">Heaps</a></td></tr>
+<tr><td></td><td valign="top"><a href="Heaps.html#index-heap_003f"><code>heap?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Heaps.html">Heaps</a></td></tr>
<tr><td></td><td valign="top"><a href="Window-Manipulation.html#index-hide_002dwindow_0021"><code>hide-window!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Window-Manipulation.html">Window Manipulation</a></td></tr>
+<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-horizontal_002dflip"><code>horizontal-flip</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_fn_letter-I">I</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</a></td></tr>
@@ -327,19 +386,28 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_fn_letter-L">L</th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="Basics.html#index-lerp"><code>lerp</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Basics.html">Basics</a></td></tr>
+<tr><td></td><td valign="top"><a href="Lights.html#index-light_002dcolor"><code>light-color</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lights.html">Lights</a></td></tr>
+<tr><td></td><td valign="top"><a href="Lights.html#index-light_002dcut_002doff"><code>light-cut-off</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lights.html">Lights</a></td></tr>
+<tr><td></td><td valign="top"><a href="Lights.html#index-light_002ddirection"><code>light-direction</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lights.html">Lights</a></td></tr>
+<tr><td></td><td valign="top"><a href="Lights.html#index-light_002dintensity"><code>light-intensity</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lights.html">Lights</a></td></tr>
+<tr><td></td><td valign="top"><a href="Lights.html#index-light_002dposition"><code>light-position</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lights.html">Lights</a></td></tr>
+<tr><td></td><td valign="top"><a href="Lights.html#index-light_002dtype"><code>light-type</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lights.html">Lights</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-line"><code>line</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-line_002dpolygon_002dmode"><code>line-polygon-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-line_002dto"><code>line-to</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-linear_002dgradient"><code>linear-gradient</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
<tr><td></td><td valign="top"><a href="The-Listener.html#index-listener_002dorientation"><code>listener-orientation</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="The-Listener.html">The Listener</a></td></tr>
<tr><td></td><td valign="top"><a href="The-Listener.html#index-listener_002dposition"><code>listener-position</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="The-Listener.html">The Listener</a></td></tr>
<tr><td></td><td valign="top"><a href="The-Listener.html#index-listener_002dvelocity"><code>listener-velocity</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="The-Listener.html">The Listener</a></td></tr>
<tr><td></td><td valign="top"><a href="The-Listener.html#index-listener_002dvolume"><code>listener-volume</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="The-Listener.html">The Listener</a></td></tr>
<tr><td></td><td valign="top"><a href="Audio-Files.html#index-load_002daudio"><code>load-audio</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Audio-Files.html">Audio Files</a></td></tr>
<tr><td></td><td valign="top"><a href="Fonts.html#index-load_002dbitmap_002dfont"><code>load-bitmap-font</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Fonts.html">Fonts</a></td></tr>
+<tr><td></td><td valign="top"><a href="Textures.html#index-load_002dcube_002dmap"><code>load-cube-map</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html">Textures</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</a></td></tr>
-<tr><td></td><td valign="top"><a href="3D-Models.html#index-load_002dgltf"><code>load-gltf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="3D-Models.html">3D Models</a></td></tr>
+<tr><td></td><td valign="top"><a href="Models.html#index-load_002dgltf"><code>load-gltf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Models.html">Models</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</a></td></tr>
-<tr><td></td><td valign="top"><a href="3D-Models.html#index-load_002dobj"><code>load-obj</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="3D-Models.html">3D Models</a></td></tr>
+<tr><td></td><td valign="top"><a href="Models.html#index-load_002dobj"><code>load-obj</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Models.html">Models</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</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</a></td></tr>
<tr><td></td><td valign="top"><a href="Textures.html#index-load_002dtileset"><code>load-tileset</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Textures.html">Textures</a></td></tr>
@@ -348,31 +416,52 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><th id="Index_fn_letter-M">M</th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="Colors.html#index-magenta"><code>magenta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Colors.html">Colors</a></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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Array-Lists.html#index-make_002darray_002dlist"><code>make-array-list</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Array-Lists.html">Array Lists</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</a></td></tr>
-<tr><td></td><td valign="top"><a href="Blending.html#index-make_002dblend_002dmode"><code>make-blend-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Blending.html">Blending</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-make_002dblend_002dmode"><code>make-blend-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</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</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</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-make_002dcanvas"><code>make-canvas</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</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</a></td></tr>
<tr><td></td><td valign="top"><a href="Colors.html#index-make_002dcolor"><code>make-color</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Colors.html">Colors</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-make_002dcube"><code>make-cube</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-make_002ddepth_002dtest"><code>make-depth-test</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Lights.html#index-make_002ddirectional_002dlight"><code>make-directional-light</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lights.html">Lights</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-make_002dempty_002dcanvas"><code>make-empty-canvas</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</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</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Grids.html#index-make_002dgrid"><code>make-grid</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grids.html">Grids</a></td></tr>
+<tr><td></td><td valign="top"><a href="Heaps.html#index-make_002dheap"><code>make-heap</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Heaps.html">Heaps</a></td></tr>
<tr><td></td><td valign="top"><a href="Matrices.html#index-make_002didentity_002dmatrix3"><code>make-identity-matrix3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html">Matrices</a></td></tr>
<tr><td></td><td valign="top"><a href="Matrices.html#index-make_002didentity_002dmatrix4"><code>make-identity-matrix4</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html">Matrices</a></td></tr>
<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</a></td></tr>
<tr><td></td><td valign="top"><a href="Matrices.html#index-make_002dmatrix3"><code>make-matrix3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html">Matrices</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-make_002dmesh"><code>make-mesh</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
<tr><td></td><td valign="top"><a href="Matrices.html#index-make_002dnull_002dmatrix3"><code>make-null-matrix3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html">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</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</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</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-make_002dpbr_002dmaterial"><code>make-pbr-material</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-make_002dpbr_002dproperties"><code>make-pbr-properties</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-make_002dphong_002dmaterial"><code>make-phong-material</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-make_002dphong_002dproperties"><code>make-phong-properties</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-make_002dplane"><code>make-plane</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Lights.html#index-make_002dpoint_002dlight"><code>make-point-light</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lights.html">Lights</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-make_002dpolygon_002dmode"><code>make-polygon-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-make_002dprimitive"><code>make-primitive</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-make_002dquadtree"><code>make-quadtree</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></td></tr>
+<tr><td></td><td valign="top"><a href="Queues.html#index-make_002dqueue"><code>make-queue</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Queues.html">Queues</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</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Skyboxes.html#index-make_002dskybox"><code>make-skybox</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Skyboxes.html">Skyboxes</a></td></tr>
<tr><td></td><td valign="top"><a href="Sources.html#index-make_002dsource"><code>make-source</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Sources.html">Sources</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-make_002dsphere"><code>make-sphere</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Lights.html#index-make_002dspot_002dlight"><code>make-spot-light</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lights.html">Lights</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-make_002dstencil_002dtest"><code>make-stencil-test</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-make_002dtesselated_002dplane"><code>make-tesselated-plane</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-make_002dvertex_002dattribute"><code>make-vertex-attribute</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html">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</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</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</a></td></tr>
@@ -380,9 +469,27 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<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</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</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-mat3"><code>mat3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html">Shaders</a></td></tr>
<tr><td></td><td valign="top"><a href="Shaders.html#index-mat4"><code>mat4</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html">Shaders</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-material_002dblend_002dmode"><code>material-blend-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-material_002dcull_002dface_002dmode"><code>material-cull-face-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-material_002ddepth_002dtest"><code>material-depth-test</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-material_002dmultisample_003f"><code>material-multisample?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-material_002dname"><code>material-name</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-material_002dpolygon_002dmode"><code>material-polygon-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-material_002dproperties"><code>material-properties</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-material_002dshader"><code>material-shader</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-material_002dstencil_002dtest"><code>material-stencil-test</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-material_002dtexture_002d0"><code>material-texture-0</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-material_002dtexture_002d1"><code>material-texture-1</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-material_002dtexture_002d2"><code>material-texture-2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-material_002dtexture_002d3"><code>material-texture-3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-material_002dtexture_002d4"><code>material-texture-4</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-material_003f"><code>material?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
<tr><td></td><td valign="top"><a href="Matrices.html#index-matrix3_002a"><code>matrix3*</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html">Matrices</a></td></tr>
<tr><td></td><td valign="top"><a href="Matrices.html#index-matrix3_002didentity_0021"><code>matrix3-identity!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html">Matrices</a></td></tr>
+<tr><td></td><td valign="top"><a href="Matrices.html#index-matrix3_002dinverse"><code>matrix3-inverse</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html">Matrices</a></td></tr>
+<tr><td></td><td valign="top"><a href="Matrices.html#index-matrix3_002dinverse_0021"><code>matrix3-inverse!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html">Matrices</a></td></tr>
<tr><td></td><td valign="top"><a href="Matrices.html#index-matrix3_002dmult_0021"><code>matrix3-mult!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html">Matrices</a></td></tr>
<tr><td></td><td valign="top"><a href="Matrices.html#index-matrix3_002drotate"><code>matrix3-rotate</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html">Matrices</a></td></tr>
<tr><td></td><td valign="top"><a href="Matrices.html#index-matrix3_002drotate_0021"><code>matrix3-rotate!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html">Matrices</a></td></tr>
@@ -408,8 +515,11 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><td></td><td valign="top"><a href="Matrices.html#index-matrix4_002dtranslate_0021"><code>matrix4-translate!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Matrices.html">Matrices</a></td></tr>
<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</a></td></tr>
<tr><td></td><td valign="top"><a href="Window-Manipulation.html#index-maximize_002dwindow_0021"><code>maximize-window!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Window-Manipulation.html">Window Manipulation</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-mesh_002dname"><code>mesh-name</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-mesh_002dprimitives"><code>mesh-primitives</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-mesh_003f"><code>mesh?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
<tr><td></td><td valign="top"><a href="Window-Manipulation.html#index-minimize_002dwindow_0021"><code>minimize-window!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Window-Manipulation.html">Window Manipulation</a></td></tr>
-<tr><td></td><td valign="top"><a href="3D-Models.html#index-model_003f"><code>model?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="3D-Models.html">3D Models</a></td></tr>
+<tr><td></td><td valign="top"><a href="Models.html#index-model_003f"><code>model?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Models.html">Models</a></td></tr>
<tr><td></td><td valign="top"><a href="Input-Devices.html#index-mouse_002dbutton_002dpressed_003f"><code>mouse-button-pressed?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Input-Devices.html">Input Devices</a></td></tr>
<tr><td></td><td valign="top"><a href="Input-Devices.html#index-mouse_002dbutton_002dreleased_003f"><code>mouse-button-released?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Input-Devices.html">Input Devices</a></td></tr>
<tr><td></td><td valign="top"><a href="Input-Devices.html#index-mouse_002dx"><code>mouse-x</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Input-Devices.html">Input Devices</a></td></tr>
@@ -417,6 +527,7 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-move_002dto"><code>move-to</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_fn_letter-N">N</th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-no_002dcull_002dface_002dmode"><code>no-cull-face-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></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</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</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</a></td></tr>
@@ -439,23 +550,69 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<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</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-path"><code>path</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-pbr_002dproperties_002dalpha_002dcutoff"><code>pbr-properties-alpha-cutoff</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-pbr_002dproperties_002dalpha_002dmode"><code>pbr-properties-alpha-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-pbr_002dproperties_002dbase_002dcolor_002dfactor"><code>pbr-properties-base-color-factor</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-pbr_002dproperties_002dbase_002dcolor_002dtexcoord"><code>pbr-properties-base-color-texcoord</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-pbr_002dproperties_002demissive_002dfactor"><code>pbr-properties-emissive-factor</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-pbr_002dproperties_002demissive_002dtexcoord"><code>pbr-properties-emissive-texcoord</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-pbr_002dproperties_002dmetallic_002dfactor"><code>pbr-properties-metallic-factor</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-pbr_002dproperties_002dmetallic_002droughness_002dtexcoord"><code>pbr-properties-metallic-roughness-texcoord</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-pbr_002dproperties_002dnormal_002dtexcoord"><code>pbr-properties-normal-texcoord</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-pbr_002dproperties_002docclusion_002dtexcoord"><code>pbr-properties-occlusion-texcoord</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-pbr_002dproperties_002droughness"><code>pbr-properties-roughness</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-pbr_002dproperties_003f"><code>pbr-properties?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-phong_002dproperties_002dambient"><code>phong-properties-ambient</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-phong_002dproperties_002ddiffuse"><code>phong-properties-diffuse</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-phong_002dproperties_002dshininess"><code>phong-properties-shininess</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-phong_002dproperties_002dspecular"><code>phong-properties-specular</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-phong_002dproperties_003f"><code>phong-properties?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</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</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</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Lights.html#index-point_002dlight_003f"><code>point-light?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lights.html">Lights</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-point_002dpolygon_002dmode"><code>point-polygon-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-polygon_002dmode_003f"><code>polygon-mode?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</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</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</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-polyline"><code>polyline</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-primitive_002dmaterial"><code>primitive-material</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-primitive_002dname"><code>primitive-name</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-primitive_002dvertex_002darray"><code>primitive-vertex-array</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Meshes.html#index-primitive_003f"><code>primitive?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Meshes.html">Meshes</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_fn_letter-Q">Q</th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-quadtree_002dbounds"><code>quadtree-bounds</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-quadtree_002dclear_0021"><code>quadtree-clear!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-quadtree_002ddelete_0021"><code>quadtree-delete!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-quadtree_002ddepth"><code>quadtree-depth</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-quadtree_002dfind"><code>quadtree-find</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-quadtree_002dfold"><code>quadtree-fold</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-quadtree_002dfor_002deach"><code>quadtree-for-each</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-quadtree_002dinsert_0021"><code>quadtree-insert!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-quadtree_002dleaf_003f"><code>quadtree-leaf?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-quadtree_002dmax_002ddepth"><code>quadtree-max-depth</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-quadtree_002dmax_002dsize"><code>quadtree-max-size</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-quadtree_002dq1"><code>quadtree-q1</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-quadtree_002dq2"><code>quadtree-q2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-quadtree_002dq3"><code>quadtree-q3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-quadtree_002dq4"><code>quadtree-q4</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-quadtree_002dsize"><code>quadtree-size</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></td></tr>
+<tr><td></td><td valign="top"><a href="Quadtrees.html#index-quadtree_003f"><code>quadtree?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quadtrees.html">Quadtrees</a></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</a></td></tr>
<tr><td></td><td valign="top"><a href="Quaternions.html#index-quaternion_002dw"><code>quaternion-w</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quaternions.html">Quaternions</a></td></tr>
<tr><td></td><td valign="top"><a href="Quaternions.html#index-quaternion_002dx"><code>quaternion-x</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quaternions.html">Quaternions</a></td></tr>
<tr><td></td><td valign="top"><a href="Quaternions.html#index-quaternion_002dy"><code>quaternion-y</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quaternions.html">Quaternions</a></td></tr>
<tr><td></td><td valign="top"><a href="Quaternions.html#index-quaternion_002dz"><code>quaternion-z</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Quaternions.html">Quaternions</a></td></tr>
<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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Queues.html#index-queue_002dclear_0021"><code>queue-clear!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Queues.html">Queues</a></td></tr>
+<tr><td></td><td valign="top"><a href="Queues.html#index-queue_002dempty_003f"><code>queue-empty?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Queues.html">Queues</a></td></tr>
+<tr><td></td><td valign="top"><a href="Queues.html#index-queue_002dlength"><code>queue-length</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Queues.html">Queues</a></td></tr>
+<tr><td></td><td valign="top"><a href="Queues.html#index-queue_003f"><code>queue?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Queues.html">Queues</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_fn_letter-R">R</th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-radial_002dgradient"><code>radial-gradient</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
<tr><td></td><td valign="top"><a href="Basics.html#index-radians_002d_003edegrees"><code>radians-&gt;degrees</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Basics.html">Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="Window-Manipulation.html#index-raise_002dwindow_0021"><code>raise-window!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Window-Manipulation.html">Window Manipulation</a></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</a></td></tr>
@@ -500,6 +657,7 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><td></td><td valign="top"><a href="Window-Manipulation.html#index-restore_002dwindow_0021"><code>restore-window!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Window-Manipulation.html">Window Manipulation</a></td></tr>
<tr><td></td><td valign="top"><a href="Colors.html#index-rgb"><code>rgb</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Colors.html">Colors</a></td></tr>
<tr><td></td><td valign="top"><a href="Colors.html#index-rgba"><code>rgba</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Colors.html">Colors</a></td></tr>
+<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-right_002dsplit"><code>right-split</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-rotate"><code>rotate</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-rounded_002drectangle"><code>rounded-rectangle</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
<tr><td></td><td valign="top"><a href="The-Game-Loop.html#index-run_002dgame"><code>run-game</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="The-Game-Loop.html">The Game Loop</a></td></tr>
@@ -507,6 +665,7 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_fn_letter-S">S</th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="Shaders.html#index-sampler_002d2d"><code>sampler-2d</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html">Shaders</a></td></tr>
+<tr><td></td><td valign="top"><a href="Shaders.html#index-sampler_002dcube"><code>sampler-cube</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html">Shaders</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-scale"><code>scale</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></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</a></td></tr>
<tr><td></td><td valign="top"><a href="Agendas.html#index-schedule_002dat"><code>schedule-at</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Agendas.html">Agendas</a></td></tr>
@@ -520,6 +679,10 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-set_002dcanvas_002dpainter_0021"><code>set-canvas-painter!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
<tr><td></td><td valign="top"><a href="The-Environment.html#index-set_002ddistance_002dmodel_0021"><code>set-distance-model!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="The-Environment.html">The Environment</a></td></tr>
<tr><td></td><td valign="top"><a href="The-Environment.html#index-set_002ddoppler_002dfactor_0021"><code>set-doppler-factor!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="The-Environment.html">The Environment</a></td></tr>
+<tr><td></td><td valign="top"><a href="Lights.html#index-set_002dlight_002dcolor_0021"><code>set-light-color!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lights.html">Lights</a></td></tr>
+<tr><td></td><td valign="top"><a href="Lights.html#index-set_002dlight_002dcut_002doff_0021"><code>set-light-cut-off!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lights.html">Lights</a></td></tr>
+<tr><td></td><td valign="top"><a href="Lights.html#index-set_002dlight_002ddirection_0021"><code>set-light-direction!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lights.html">Lights</a></td></tr>
+<tr><td></td><td valign="top"><a href="Lights.html#index-set_002dlight_002dposition_0021"><code>set-light-position!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lights.html">Lights</a></td></tr>
<tr><td></td><td valign="top"><a href="The-Listener.html#index-set_002dlistener_002dorientation_0021"><code>set-listener-orientation!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="The-Listener.html">The Listener</a></td></tr>
<tr><td></td><td valign="top"><a href="The-Listener.html#index-set_002dlistener_002dposition_0021"><code>set-listener-position!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="The-Listener.html">The Listener</a></td></tr>
<tr><td></td><td valign="top"><a href="The-Listener.html#index-set_002dlistener_002dvelocity_0021"><code>set-listener-velocity!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="The-Listener.html">The Listener</a></td></tr>
@@ -569,8 +732,10 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<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</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</a></td></tr>
<tr><td></td><td valign="top"><a href="Window-Manipulation.html#index-show_002dwindow_0021"><code>show-window!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Window-Manipulation.html">Window Manipulation</a></td></tr>
+<tr><td></td><td valign="top"><a href="Skyboxes.html#index-skybox_002dcube_002dmap"><code>skybox-cube-map</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Skyboxes.html">Skyboxes</a></td></tr>
+<tr><td></td><td valign="top"><a href="Skyboxes.html#index-skybox_003f"><code>skybox?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Skyboxes.html">Skyboxes</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</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Grids.html#index-slide"><code>slide</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Grids.html">Grids</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</a></td></tr>
<tr><td></td><td valign="top"><a href="Sources.html#index-source_002dcone_002dinner_002dangle"><code>source-cone-inner-angle</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Sources.html">Sources</a></td></tr>
<tr><td></td><td valign="top"><a href="Sources.html#index-source_002dcone_002douter_002dangle"><code>source-cone-outer-angle</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Sources.html">Sources</a></td></tr>
@@ -598,6 +763,7 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<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</a></td></tr>
<tr><td></td><td valign="top"><a href="The-Environment.html#index-speed_002dof_002dsound"><code>speed-of-sound</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="The-Environment.html">The Environment</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Lights.html#index-spot_002dlight_003f"><code>spot-light?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Lights.html">Lights</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</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</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</a></td></tr>
@@ -605,6 +771,21 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-square"><code>square</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</a></td></tr>
<tr><td></td><td valign="top"><a href="Audio-Files.html#index-static_002daudio_003f"><code>static-audio?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Audio-Files.html">Audio Files</a></td></tr>
<tr><td></td><td valign="top"><a href="Sources.html#index-static_002dsource_003f"><code>static-source?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Sources.html">Sources</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-stencil_002dtest_002dfunction_002dback"><code>stencil-test-function-back</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-stencil_002dtest_002dfunction_002dfront"><code>stencil-test-function-front</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-stencil_002dtest_002dfunction_002dmask_002dback"><code>stencil-test-function-mask-back</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-stencil_002dtest_002dfunction_002dmask_002dfront"><code>stencil-test-function-mask-front</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-stencil_002dtest_002dmask_002dback"><code>stencil-test-mask-back</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-stencil_002dtest_002dmask_002dfront"><code>stencil-test-mask-front</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-stencil_002dtest_002don_002ddepth_002dfail_002dback"><code>stencil-test-on-depth-fail-back</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-stencil_002dtest_002don_002ddepth_002dfail_002dfront"><code>stencil-test-on-depth-fail-front</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-stencil_002dtest_002don_002dfail_002dback"><code>stencil-test-on-fail-back</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-stencil_002dtest_002don_002dfail_002dfront"><code>stencil-test-on-fail-front</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-stencil_002dtest_002don_002dpass_002dback"><code>stencil-test-on-pass-back</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-stencil_002dtest_002don_002dpass_002dfront"><code>stencil-test-on-pass-front</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-stencil_002dtest_002dreference_002dback"><code>stencil-test-reference-back</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-stencil_002dtest_002dreference_002dfront"><code>stencil-test-reference-front</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
+<tr><td></td><td valign="top"><a href="Render-Settings.html#index-stencil_002dtest_003f"><code>stencil-test?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Render-Settings.html">Render Settings</a></td></tr>
<tr><td></td><td valign="top"><a href="Audio-Files.html#index-streaming_002daudio_003f"><code>streaming-audio?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Audio-Files.html">Audio Files</a></td></tr>
<tr><td></td><td valign="top"><a href="Sources.html#index-streaming_002dsource_003f"><code>streaming-source?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Sources.html">Sources</a></td></tr>
<tr><td></td><td valign="top"><a href="Colors.html#index-string_002d_003ecolor"><code>string-&gt;color</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Colors.html">Colors</a></td></tr>
@@ -640,6 +821,7 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><td></td><td valign="top"><a href="Colors.html#index-tango_002dplum"><code>tango-plum</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Colors.html">Colors</a></td></tr>
<tr><td></td><td valign="top"><a href="Colors.html#index-tango_002dscarlet_002dred"><code>tango-scarlet-red</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Colors.html">Colors</a></td></tr>
<tr><td></td><td valign="top"><a href="Colors.html#index-tango_002dsky_002dblue"><code>tango-sky-blue</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Colors.html">Colors</a></td></tr>
+<tr><td></td><td valign="top"><a href="Basics.html#index-tau"><code>tau</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Basics.html">Basics</a></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</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</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</a></td></tr>
@@ -693,6 +875,7 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<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</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</a></td></tr>
<tr><td></td><td valign="top"><a href="Shaders.html#index-unsigned_002dint"><code>unsigned-int</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Shaders.html">Shaders</a></td></tr>
+<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-up_002dsplit"><code>up-split</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</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</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</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
@@ -705,7 +888,7 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><td></td><td valign="top"><a href="Rectangles.html#index-vec2_002dclamp_002dto_002drect_0021"><code>vec2-clamp-to-rect!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rectangles.html">Rectangles</a></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-vec2_002dcopy"><code>vec2-copy</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-vec2_002dcopy_0021"><code>vec2-copy!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html">Vectors</a></td></tr>
-<tr><td></td><td valign="top"><a href="Vectors.html#index-vec2_002ddot_002dproduct"><code>vec2-dot-product</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html">Vectors</a></td></tr>
+<tr><td></td><td valign="top"><a href="Vectors.html#index-vec2_002ddot"><code>vec2-dot</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-vec2_002dmagnitude"><code>vec2-magnitude</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-vec2_002dmult_0021"><code>vec2-mult!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-vec2_002dnormalize"><code>vec2-normalize</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html">Vectors</a></td></tr>
@@ -723,7 +906,7 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><td></td><td valign="top"><a href="Vectors.html#index-vec3_002dcopy_0021"><code>vec3-copy!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-vec3_002dcross"><code>vec3-cross</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-vec3_002dcross_0021"><code>vec3-cross!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html">Vectors</a></td></tr>
-<tr><td></td><td valign="top"><a href="Vectors.html#index-vec3_002ddot_002dproduct"><code>vec3-dot-product</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html">Vectors</a></td></tr>
+<tr><td></td><td valign="top"><a href="Vectors.html#index-vec3_002ddot"><code>vec3-dot</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-vec3_002dmagnitude"><code>vec3-magnitude</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-vec3_002dmult_0021"><code>vec3-mult!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="Vectors.html#index-vec3_002dnormalize"><code>vec3-normalize</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vectors.html">Vectors</a></td></tr>
@@ -736,6 +919,14 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<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</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</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-vertex_002dattribute_002d_003ebuffer"><code>vertex-attribute-&gt;buffer</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-vertex_002dattribute_002dcomponent_002dtype"><code>vertex-attribute-component-type</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-vertex_002dattribute_002ddivisor"><code>vertex-attribute-divisor</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-vertex_002dattribute_002dname"><code>vertex-attribute-name</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-vertex_002dattribute_002doffset"><code>vertex-attribute-offset</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-vertex_002dattribute_002dtype"><code>vertex-attribute-type</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-vertex_002dattribute_003f"><code>vertex-attribute?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html">Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-vertical_002dflip"><code>vertical-flip</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</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</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</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</a></td></tr>
@@ -754,22 +945,18 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><td></td><td valign="top"><a href="Window-Manipulation.html#index-window_002dy"><code>window-y</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Window-Manipulation.html">Window Manipulation</a></td></tr>
<tr><td></td><td valign="top"><a href="Window-Manipulation.html#index-window_003f"><code>window?</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Window-Manipulation.html">Window Manipulation</a></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</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</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</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Rendering-Engine.html#index-with_002dgraphics_002dstate"><code>with-graphics-state</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering-Engine.html">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</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</a></td></tr>
+<tr><td></td><td valign="top"><a href="Buffers.html#index-with_002dmapped_002dvertex_002dattribute"><code>with-mapped-vertex-attribute</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Buffers.html">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</a></td></tr>
<tr><td></td><td valign="top"><a href="Vector-Paths.html#index-with_002dstyle"><code>with-style</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Vector-Paths.html">Vector Paths</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</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</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_fn_letter-Y">Y</th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="Colors.html#index-yellow"><code>yellow</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Colors.html">Colors</a></td></tr>
<tr><td></td><td valign="top"><a href="Scripts.html#index-yield"><code>yield</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Scripts.html">Scripts</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
</table>
-<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Index_fn_symbol-1"><b>2</b></a>
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Index_fn_symbol-1"><b>%</b></a>
&nbsp;
<br>
<a class="summary-letter" href="#Index_fn_letter-A"><b>A</b></a>
diff --git a/manuals/chickadee/Input-Devices.html b/manuals/chickadee/Input-Devices.html
index 388387c..b3baf96 100644
--- a/manuals/chickadee/Input-Devices.html
+++ b/manuals/chickadee/Input-Devices.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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Window-Manipulation.html" accesskey="n" rel="next">Window Manipulation</a>, Previous: <a href="The-Game-Loop.html" accesskey="p" rel="prev">The Game Loop</a>, Up: <a href="Kernel.html" accesskey="u" rel="up">Kernel</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Input-Devices-1"></span><h4 class="subsection">2.1.2 Input Devices</h4>
+<span id="Input-Devices-1"></span><h4 class="subsection">5.1.2 Input Devices</h4>
<p>While <code>run-game</code> provides hooks for mouse/keyboard/controller
input events, it is often necessary to query input devices for their
diff --git a/manuals/chickadee/Installation.html b/manuals/chickadee/Installation.html
index 95254be..d02aaaa 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -82,7 +82,7 @@ ul.no-bullet {list-style: none}
<body lang="en">
<span id="Installation"></span><div class="header">
<p>
-Next: <a href="API-Reference.html" accesskey="n" rel="next">API Reference</a>, Previous: <a href="index.html" accesskey="p" rel="prev">Top</a>, Up: <a href="index.html" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Getting-Started.html" accesskey="n" rel="next">Getting Started</a>, Previous: <a href="index.html" accesskey="p" rel="prev">Top</a>, Up: <a href="index.html" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<span id="Installation-1"></span><h2 class="chapter">1 Installation</h2>
diff --git a/manuals/chickadee/Invoking-chickadee-bundle.html b/manuals/chickadee/Invoking-chickadee-bundle.html
new file mode 100644
index 0000000..5c9e8f6
--- /dev/null
+++ b/manuals/chickadee/Invoking-chickadee-bundle.html
@@ -0,0 +1,219 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Copyright (C) 2017-2021 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.7, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Invoking chickadee bundle (The Chickadee Game Toolkit)</title>
+
+<meta name="description" content="Invoking chickadee bundle (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Invoking chickadee bundle (The Chickadee Game Toolkit)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="makeinfo">
+<link href="index.html" rel="start" title="Top">
+<link href="Index.html" rel="index" title="Index">
+<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="Command-Line-Interface.html" rel="up" title="Command Line Interface">
+<link href="Live-Coding.html" rel="next" title="Live Coding">
+<link href="Invoking-chickadee-play.html" rel="prev" title="Invoking chickadee play">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {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}
+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">
+<span id="Invoking-chickadee-bundle"></span><div class="header">
+<p>
+Previous: <a href="Invoking-chickadee-play.html" accesskey="p" rel="prev">Invoking chickadee play</a>, Up: <a href="Command-Line-Interface.html" accesskey="u" rel="up">Command Line Interface</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+</div>
+<hr>
+<span id="Invoking-chickadee-bundle-1"></span><h3 class="section">3.2 Invoking <code>chickadee bundle</code></h3>
+
+<p>Distributing games is difficult. While Chickadee games are free
+software, it would be far too burdensome on the player to ask them to
+compile a game from source in order to try it out. Many potential
+players will simply not even try. Players expect to be able to
+download a compressed archive, extract it, and play. If there are any
+more steps than that then the chances of the game being played drop
+dramatically. If you can&rsquo;t beat &rsquo;em, join &rsquo;em. The
+<code>chickadee bundle</code> tool creates redistributable binary bundles
+by combining the game code and assets with shared libraries and
+executables from the host operating system.
+</p>
+<p>Bundling is currently only supported on Linux. In the future, it may
+be possible to bundle on MacOS. Patches very much welcome for that.
+</p>
+<p>It should be noted that bundling is a problematic way to distribute
+software. All of the libraries that the bundled application includes
+are separated from the distribution that was so carefully making sure
+that they stay up-to-date with regard to security patches. The
+bundled libraries are frozen in time, vulnerabilities and all.
+Unfortunately, the release model used by the most popular
+distributions, while wonderful for stable, mature software, does not
+fit the needs of game distribution at all. So, we compromise, knowing
+that most games are only played for only a short amount of time before
+being disposed. Perhaps, in time, the Linux world will shift to using
+more robust package management solutions such as
+<a href="https://guix.gnu.org">GNU Guix</a> which support long-term
+maintenance of stable software as well as the &ldquo;fire and forget&rdquo;
+nature of game releases. And maybe a game made with Chickadee will
+become so popular that major distributions decide to package it, but
+let&rsquo;s get back to reality.
+</p>
+<p>To get started with bundling, simply add a <samp>bundle.scm</samp> file to
+the root of the project directory. It could look something like this:
+</p>
+<div class="example">
+<pre class="example">'((asset-directories . (&quot;images&quot; &quot;models&quot;))
+ (bundle-name . &quot;the-legend-of-emacs-1.0&quot;)
+ (code . &quot;the-legend-of-emacs.scm&quot;)
+ (launcher-name . &quot;the-legend-of-emacs&quot;))
+</pre></div>
+
+<p>To create the bundle, simply run <code>chickadee bundle</code>. Upon
+success, the file <samp>the-legend-of-emacs-1.0.tar.gz</samp> would be
+created in the current directory.
+</p>
+<p>To maximize the chances that the bundle will work on someone else&rsquo;s
+computer, it&rsquo;s best to build on the oldest supported Linux
+distribution available. As of this writing, Ubuntu 18.04 LTS is a
+good choice.
+</p>
+<p>In addition to including system libraries and executables,
+<code>chickadee bundle</code> also includes the compiled Guile bytecode
+(the <samp>.go</samp> files) for all modules used by the game. The module
+source files are <em>not</em> included, so it&rsquo;s critical that all of the
+modules used by the game have been compiled.
+</p>
+<p>Available options:
+</p>
+<ul>
+<li> <code>asset-directories</code>
+
+<p>A list of directories that hold static game assets such as images or
+audio. Files in these directories will be copied into the bundle
+archive.
+</p>
+</li><li> <code>binary-directories</code>
+
+<p>A list of directories to search for system binaries, such as
+<code>guile</code>. By default, <samp>/usr/bin</samp> is searched.
+</p>
+</li><li> <code>bundle-name</code>
+
+<p>The name of the bundle archive. By default, the name is
+<code>&quot;chickadee-bundle&quot;</code>.
+</p>
+</li><li> <code>launcher-name</code>
+
+<p>The name of the launcher script. By default, the name is
+<code>&quot;launch-game&quot;</code>.
+</p>
+</li><li> <code>libraries</code>
+
+<p>A list of shared libraries to include in the bundle. By default, all
+of the libraries necessary for running Guile, Guile-SDL2, and
+Chickadee are included. This list is compatible with the names given
+to the libraries on Ubuntu, which may be different than on other
+distributions. In such cases, this list will need to be customized.
+See below for more information on the <code>%default-config</code> variable
+that can be of help.
+</p>
+</li><li> <code>library-directories</code>
+
+<p>A list of directories to search for system shared libraries. By
+default, the list contains common directories used by most
+distributions.
+</p>
+</li><li> <code>method</code>
+
+<p>The method by which the game is launched. Can be either <code>play</code>
+or <code>manual</code>. The default is <code>play</code>, which means that
+<code>chickadee play</code> will be used to launch the game. For games
+that do not use <code>chickadee play</code>, opting to start the game
+loop on their own, the <code>manual</code> method should be used.
+</p>
+</li><li> <code>play-args</code>
+
+<p>A list of command line arguments to pass to <code>chickadee play</code>.
+Only used when the <code>method</code> option is set to <code>play</code>.
+</p>
+</li></ul>
+
+<p>Default configuration options, such as the list of C shared libaries,
+can be found in the <code>%default-config</code> variable. This way they
+can be programatically modified, if necessary.
+</p>
+<dl>
+<dt id="index-_0025default_002dconfig">Variable: <strong>%default-config</strong></dt>
+<dd><p>An association list of default configuration options.
+</p></dd></dl>
+
+<hr>
+<div class="header">
+<p>
+Previous: <a href="Invoking-chickadee-play.html" accesskey="p" rel="prev">Invoking chickadee play</a>, Up: <a href="Command-Line-Interface.html" accesskey="u" rel="up">Command Line Interface</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+</div>
+
+
+
+</body>
+</html>
diff --git a/manuals/chickadee/Invoking-chickadee-play.html b/manuals/chickadee/Invoking-chickadee-play.html
new file mode 100644
index 0000000..0c9c065
--- /dev/null
+++ b/manuals/chickadee/Invoking-chickadee-play.html
@@ -0,0 +1,198 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Copyright (C) 2017-2021 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.7, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Invoking chickadee play (The Chickadee Game Toolkit)</title>
+
+<meta name="description" content="Invoking chickadee play (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Invoking chickadee play (The Chickadee Game Toolkit)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="makeinfo">
+<link href="index.html" rel="start" title="Top">
+<link href="Index.html" rel="index" title="Index">
+<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="Command-Line-Interface.html" rel="up" title="Command Line Interface">
+<link href="Invoking-chickadee-bundle.html" rel="next" title="Invoking chickadee bundle">
+<link href="Command-Line-Interface.html" rel="prev" title="Command Line Interface">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {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}
+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">
+<span id="Invoking-chickadee-play"></span><div class="header">
+<p>
+Next: <a href="Invoking-chickadee-bundle.html" accesskey="n" rel="next">Invoking chickadee bundle</a>, Up: <a href="Command-Line-Interface.html" accesskey="u" rel="up">Command Line Interface</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+</div>
+<hr>
+<span id="Invoking-chickadee-play-1"></span><h3 class="section">3.1 Invoking <code>chickadee play</code></h3>
+
+<p>The <code>chickadee play</code> command is used to open a window and run
+the Chickadee game contained within a Scheme source file.
+</p>
+<div class="example">
+<pre class="example">chickadee play the-legend-of-emacs.scm
+</pre></div>
+
+<p>In this file, special procedures may be defined to handle various
+events from the game loop:
+</p>
+<ul>
+<li> load-game
+</li><li> quit-game
+</li><li> draw
+</li><li> update
+</li><li> key-press
+</li><li> key-release
+</li><li> text-input
+</li><li> mouse-press
+</li><li> mouse-release
+</li><li> mouse-move
+</li><li> mouse-wheel
+</li><li> controller-add
+</li><li> controller-remove
+</li><li> controller-press
+</li><li> controller-release
+</li><li> controller-move
+</li></ul>
+
+<p>See <a href="The-Game-Loop.html">The Game Loop</a> for complete information on all of these
+hooks, such as the arguments that each procedure receives.
+</p>
+<p>In additional to evaluating the specified source file, the directory
+containing that file is added to Guile&rsquo;s load path so that games can
+easily be divided into many different files. Furthermore, that
+directory is entered prior to evaluating the file so that data files
+(images, sounds, etc.) can be loaded relative to the main source file,
+regardless of what the current directory was when <code>chickadee
+play</code> was invoked.
+</p>
+<p>Many aspects of the initial game window and environment can be
+controlled via the following options:
+</p>
+<dl compact="compact">
+<dt><code>--title=<var>title</var></code></dt>
+<dt><code>-t <var>title</var></code></dt>
+<dd>
+<p>Set the window title to <var>title</var>.
+</p>
+</dd>
+<dt><code>--width=<var>width</var></code></dt>
+<dt><code>-w <var>width</var></code></dt>
+<dd>
+<p>Set the window width to <var>width</var> pixels.
+</p>
+</dd>
+<dt><code>--height=<var>height</var></code></dt>
+<dt><code>-h <var>height</var></code></dt>
+<dd>
+<p>Set the window height to <var>height</var> pixels.
+</p>
+</dd>
+<dt><code>--fullscreen</code></dt>
+<dt><code>-f</code></dt>
+<dd>
+<p>Open window in fullscreen mode.
+</p>
+</dd>
+<dt><code>--resizable</code></dt>
+<dt><code>-r</code></dt>
+<dd>
+<p>Make window resizable.
+</p>
+</dd>
+<dt><code>--update-hz=<var>n</var></code></dt>
+<dt><code>-u <var>n</var></code></dt>
+<dd>
+<p>Update the game <var>n</var> times per second.
+</p>
+</dd>
+<dt><code>--repl</code></dt>
+<dd>
+<p>Launch a REPL in the terminal. This will allow the game environment
+to debugged and modified without having to stop and restart the game
+after each change.
+</p>
+</dd>
+<dt><code>--repl-server[=<var>port</var>]</code></dt>
+<dd>
+<p>Launch a REPL server on port <var>port</var>, or 37146 by default.
+</p>
+<p><code>telnet localhost 37146</code> (or whatever port number was given)
+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>
+</dd>
+</dl>
+
+<hr>
+<div class="header">
+<p>
+Next: <a href="Invoking-chickadee-bundle.html" accesskey="n" rel="next">Invoking chickadee bundle</a>, Up: <a href="Command-Line-Interface.html" accesskey="u" rel="up">Command Line Interface</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+</div>
+
+
+
+</body>
+</html>
diff --git a/manuals/chickadee/Kernel.html b/manuals/chickadee/Kernel.html
index 7c17f80..64647aa 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Math.html" accesskey="n" rel="next">Math</a>, Up: <a href="API-Reference.html" accesskey="u" rel="up">API Reference</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Kernel-1"></span><h3 class="section">2.1 Kernel</h3>
+<span id="Kernel-1"></span><h3 class="section">5.1 Kernel</h3>
<p>This section of the manual covers the foundation of Chickadee: The
game loop and desktop environment interaction.
@@ -97,8 +97,6 @@ game loop and desktop environment interaction.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Window-Manipulation.html" accesskey="3">Window Manipulation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Inspect and modify the graphical window.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Live-Coding.html" accesskey="4">Live Coding</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Tips for building games from the REPL.
-</td></tr>
</table>
diff --git a/manuals/chickadee/Lights.html b/manuals/chickadee/Lights.html
new file mode 100644
index 0000000..1e6d234
--- /dev/null
+++ b/manuals/chickadee/Lights.html
@@ -0,0 +1,212 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Copyright (C) 2017-2021 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.7, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Lights (The Chickadee Game Toolkit)</title>
+
+<meta name="description" content="Lights (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Lights (The Chickadee Game Toolkit)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="makeinfo">
+<link href="index.html" rel="start" title="Top">
+<link href="Index.html" rel="index" title="Index">
+<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="Graphics.html" rel="up" title="Graphics">
+<link href="Skyboxes.html" rel="next" title="Skyboxes">
+<link href="Models.html" rel="prev" title="Models">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {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}
+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">
+<span id="Lights"></span><div class="header">
+<p>
+Next: <a href="Skyboxes.html" accesskey="n" rel="next">Skyboxes</a>, Previous: <a href="Models.html" accesskey="p" rel="prev">Models</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+</div>
+<hr>
+<span id="Lights-1"></span><h4 class="subsection">5.3.9 Lights</h4>
+
+<p>The <code>(chickadee graphics light)</code> module provides a data type for
+dynamic lights that can be used to light 3D objects (such as
+<a href="Models.html">Models</a> or <a href="Meshes.html">Meshes</a>.)
+</p>
+<p>There are 3 types of dynamic lights:
+</p>
+<ul>
+<li> point light:
+Emits light in all directions from a specific point in space, like a
+light bulb.
+</li><li> directional light:
+Emits light of a constant intensity in a direction, like sunlight.
+</li><li> spot light:
+Emits a cone of light in a direction, like a flashlight.
+</li></ul>
+
+<dl>
+<dt id="index-make_002dpoint_002dlight">Procedure: <strong>make-point-light</strong> <em>[#:position (vec3 0 0 0)] [#:color black] [#:intensity 1]</em></dt>
+<dd>
+<p>Return a new point light located at <var>position</var> that emits
+<var>color</var> light.
+</p></dd></dl>
+
+<dl>
+<dt id="index-make_002ddirectional_002dlight">Procedure: <strong>make-directional-light</strong> <em>[#:direction (vec3 0 -1 0)] [#:color black] [#:intensity 1]</em></dt>
+<dd>
+<p>Return a new directional light that emits <var>color</var> light in
+<var>direction</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-make_002dspot_002dlight">Procedure: <strong>make-spot-light</strong> <em>[#:position (vec3 0 0 0)] [#:direction (vec3 0 -1 0)] [#:color black] [#:cut-off <em>π/4</em>] [#:intensity 1]</em></dt>
+<dd>
+<p>Return a new spot light located at <var>position</var> that emits
+<var>color</var> light in <var>direction</var> in a cone that cuts off at
+<var>cut-off</var> radians.
+</p></dd></dl>
+
+<dl>
+<dt id="index-point_002dlight_003f">Procedure: <strong>point-light?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a point light.
+</p></dd></dl>
+
+<dl>
+<dt id="index-directional_002dlight_003f">Procedure: <strong>directional-light?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a directional light.
+</p></dd></dl>
+
+<dl>
+<dt id="index-spot_002dlight_003f">Procedure: <strong>spot-light?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a spot light.
+</p></dd></dl>
+
+<dl>
+<dt id="index-light_002dtype">Procedure: <strong>light-type</strong> <em>light</em></dt>
+<dd><p>Return the type of <var>light</var>, one of:
+</p>
+<ul>
+<li> point
+</li><li> directional
+</li><li> spot
+</li></ul>
+
+</dd></dl>
+
+<dl>
+<dt id="index-light_002dcolor">Procedure: <strong>light-color</strong> <em>light</em></dt>
+<dd><p>Return the color of <var>light</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-light_002dintensity">Procedure: <strong>light-intensity</strong> <em>light</em></dt>
+<dd><p>Return the intensity of <var>light</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-light_002dposition">Procedure: <strong>light-position</strong> <em>light</em></dt>
+<dd><p>Return the position of <var>light</var>. The value is irrelevant for
+directional lights.
+</p></dd></dl>
+
+<dl>
+<dt id="index-light_002ddirection">Procedure: <strong>light-direction</strong> <em>light</em></dt>
+<dd><p>Return the direction of <var>light</var>. The value is irrelevant for
+point lights.
+</p></dd></dl>
+
+<dl>
+<dt id="index-light_002dcut_002doff">Procedure: <strong>light-cut-off</strong> <em>light</em></dt>
+<dd><p>Return the cosine of the cut off angle of <var>light</var>. The value is
+only relevant for spot lights.
+</p></dd></dl>
+
+<dl>
+<dt id="index-set_002dlight_002dcolor_0021">Procedure: <strong>set-light-color!</strong> <em>light color</em></dt>
+<dd><p>Set the color of <var>light</var> to <var>color</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-set_002dlight_002dposition_0021">Procedure: <strong>set-light-position!</strong> <em>light position</em></dt>
+<dd><p>Set the position of <var>light</var> to <var>position</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-set_002dlight_002ddirection_0021">Procedure: <strong>set-light-direction!</strong> <em>light direction</em></dt>
+<dd><p>Set the direction of <var>light</var> to <var>direction</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-set_002dlight_002dcut_002doff_0021">Procedure: <strong>set-light-cut-off!</strong> <em>light cut-off</em></dt>
+<dd><p>Set the cut off angle of <var>light</var> to <var>cut-off</var>.
+</p></dd></dl>
+
+<hr>
+<div class="header">
+<p>
+Next: <a href="Skyboxes.html" accesskey="n" rel="next">Skyboxes</a>, Previous: <a href="Models.html" accesskey="p" rel="prev">Models</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+</div>
+
+
+
+</body>
+</html>
diff --git a/manuals/chickadee/Live-Coding.html b/manuals/chickadee/Live-Coding.html
index 74a927c..4e3c174 100644
--- a/manuals/chickadee/Live-Coding.html
+++ b/manuals/chickadee/Live-Coding.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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -31,9 +31,9 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="index.html" rel="start" title="Top">
<link href="Index.html" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
-<link href="Kernel.html" rel="up" title="Kernel">
-<link href="Math.html" rel="next" title="Math">
-<link href="Window-Manipulation.html" rel="prev" title="Window Manipulation">
+<link href="index.html" rel="up" title="Top">
+<link href="API-Reference.html" rel="next" title="API Reference">
+<link href="Invoking-chickadee-bundle.html" rel="prev" title="Invoking chickadee bundle">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
@@ -82,18 +82,24 @@ ul.no-bullet {list-style: none}
<body lang="en">
<span id="Live-Coding"></span><div class="header">
<p>
-Previous: <a href="Window-Manipulation.html" accesskey="p" rel="prev">Window Manipulation</a>, Up: <a href="Kernel.html" accesskey="u" rel="up">Kernel</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+Next: <a href="API-Reference.html" accesskey="n" rel="next">API Reference</a>, Previous: <a href="Command-Line-Interface.html" accesskey="p" rel="prev">Command Line Interface</a>, Up: <a href="index.html" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Live-Coding-1"></span><h4 class="subsection">2.1.4 Live Coding</h4>
+<span id="Live-Coding-1"></span><h2 class="chapter">4 Live Coding</h2>
<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.
+a game using the Chickadee library!) require special care for this
+workflow to be pleasant.
+</p>
+<p>If you are using the <code>chickadee play</code> command to run your
+game, then the <code>--repl</code> or <code>--repl-server</code> arguments are all
+you need to get a live coding environment running.
+</p>
+<p>If, however, you are using <code>run-game</code> to start the game loop then
+it&rsquo;s still fairly easy to hook up a special kind of REPL by 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
diff --git a/manuals/chickadee/Math.html b/manuals/chickadee/Math.html
index cc2203e..b3e4b0a 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -33,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" rel="up" title="API Reference">
<link href="Basics.html" rel="next" title="Basics">
-<link href="Live-Coding.html" rel="prev" title="Live Coding">
+<link href="Window-Manipulation.html" rel="prev" title="Window Manipulation">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Graphics.html" accesskey="n" rel="next">Graphics</a>, Previous: <a href="Kernel.html" accesskey="p" rel="prev">Kernel</a>, Up: <a href="API-Reference.html" accesskey="u" rel="up">API Reference</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Math-1"></span><h3 class="section">2.2 Math</h3>
+<span id="Math-1"></span><h3 class="section">5.2 Math</h3>
<p>Chickadee contains data types and procedures for performing the most
common computations in video game simulations such as linear algebra
@@ -107,10 +107,6 @@ detection.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Bezier-Curves.html" accesskey="7">Bezier Curves</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Cubic Bezier curves and paths in 2D space.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Path-Finding.html" accesskey="8">Path Finding</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Generic A* path finding.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Grid.html" accesskey="9">Grid</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Spatial partitioning for bounding boxes.
-</td></tr>
</table>
diff --git a/manuals/chickadee/Matrices.html b/manuals/chickadee/Matrices.html
index d616fa8..551664d 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Quaternions.html" accesskey="n" rel="next">Quaternions</a>, Previous: <a href="Rectangles.html" accesskey="p" rel="prev">Rectangles</a>, Up: <a href="Math.html" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Matrices-1"></span><h4 class="subsection">2.2.4 Matrices</h4>
+<span id="Matrices-1"></span><h4 class="subsection">5.2.4 Matrices</h4>
<p>The <code>(chickadee math matrix)</code> module provides an interface for
working with the most common type of matrices in game development: 4x4
@@ -99,7 +99,7 @@ garbage generated and improve matrix multiplication performance, there
are many procedures that perform in-place modifications of matrix
objects.
</p>
-<span id="g_t3x3-Matrices"></span><h4 class="subsubsection">2.2.4.1 3x3 Matrices</h4>
+<span id="g_t3x3-Matrices"></span><h4 class="subsubsection">5.2.4.1 3x3 Matrices</h4>
<dl>
<dt id="index-make_002dmatrix3">Procedure: <strong>make-matrix3</strong> <em>aa ab ac ba bb bc ca cb cc</em></dt>
@@ -163,6 +163,11 @@ radians.
matrix <var>matrix</var>.
</p></dd></dl>
+<dl>
+<dt id="index-matrix3_002dinverse">Procedure: <strong>matrix3-inverse</strong> <em>matrix</em></dt>
+<dd><p>Return the inverse of <var>matrix</var>.
+</p></dd></dl>
+
<p>The following procedures perform in-place, destructive updates to 3x3
matrix objects:
</p>
@@ -201,7 +206,13 @@ radians.
transformed by the 3x3 matrix <var>matrix</var>.
</p></dd></dl>
-<span id="g_t4x4-Matrices"></span><h4 class="subsubsection">2.2.4.2 4x4 Matrices</h4>
+<dl>
+<dt id="index-matrix3_002dinverse_0021">Procedure: <strong>matrix3-inverse!</strong> <em>matrix target</em></dt>
+<dd><p>Compute the inverse of <var>matrix</var> and store the results in
+<var>target</var>.
+</p></dd></dl>
+
+<span id="g_t4x4-Matrices"></span><h4 class="subsubsection">5.2.4.2 4x4 Matrices</h4>
<dl>
<dt id="index-make_002dmatrix4">Procedure: <strong>make-matrix4</strong> <em>aa ab ac ad ba bb bc bd ca cb cc cd da db dc dd</em></dt>
diff --git a/manuals/chickadee/Meshes.html b/manuals/chickadee/Meshes.html
new file mode 100644
index 0000000..2cd159e
--- /dev/null
+++ b/manuals/chickadee/Meshes.html
@@ -0,0 +1,413 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Copyright (C) 2017-2021 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.7, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Meshes (The Chickadee Game Toolkit)</title>
+
+<meta name="description" content="Meshes (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Meshes (The Chickadee Game Toolkit)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="makeinfo">
+<link href="index.html" rel="start" title="Top">
+<link href="Index.html" rel="index" title="Index">
+<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="Graphics.html" rel="up" title="Graphics">
+<link href="Buffers.html" rel="next" title="Buffers">
+<link href="Skyboxes.html" rel="prev" title="Skyboxes">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {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}
+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">
+<span id="Meshes"></span><div class="header">
+<p>
+Next: <a href="Buffers.html" accesskey="n" rel="next">Buffers</a>, Previous: <a href="Skyboxes.html" accesskey="p" rel="prev">Skyboxes</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+</div>
+<hr>
+<span id="Meshes-1"></span><h4 class="subsection">5.3.11 Meshes</h4>
+
+<p>The <code>(chickadee graphics mesh)</code> modules provides procedures for
+programmatically creating 3D objects (to load 3D models from a file on
+disk, see <a href="#Meshes">Meshes</a>.)
+</p>
+<span id="Materials"></span><h4 class="subsubsection">5.3.11.1 Materials</h4>
+
+<p>Before we talk about meshes themselves, let&rsquo;s discuss &ldquo;materials.&rdquo;
+Materials control the appearance of 3D objects. Whether an object
+appears like a rough rock, a smooth and shiny metal, etc. depends on
+the material that is applied to it. Different types of materials use
+different lighting models. Chickadee supports two lighting models:
+The classic Blinn-Phong model and a more modern physically based
+rendering (PBR) model.
+</p>
+<p>All materials share some common data:
+</p>
+<dl>
+<dt id="index-material_003f">Procedure: <strong>material?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a material.
+</p></dd></dl>
+
+<dl>
+<dt id="index-material_002dname">Procedure: <strong>material-name</strong> <em>material</em></dt>
+<dd><p>Return the name of <var>material</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-material_002dshader">Procedure: <strong>material-shader</strong> <em>material</em></dt>
+<dd><p>Return the shader of <var>material</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-material_002dblend_002dmode">Procedure: <strong>material-blend-mode</strong> <em>material</em></dt>
+<dd><p>Return the blend mode of <var>material</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-material_002dpolygon_002dmode">Procedure: <strong>material-polygon-mode</strong> <em>material</em></dt>
+<dd><p>Return the polygon mode of <var>material</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-material_002dcull_002dface_002dmode">Procedure: <strong>material-cull-face-mode</strong> <em>material</em></dt>
+<dd><p>Return the cull face mode of <var>material</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-material_002ddepth_002dtest">Procedure: <strong>material-depth-test</strong> <em>material</em></dt>
+<dd><p>Return the depth test of <var>material</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-material_002dstencil_002dtest">Procedure: <strong>material-stencil-test</strong> <em>material</em></dt>
+<dd><p>Return the stencil test of <var>material</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-material_002dmultisample_003f">Procedure: <strong>material-multisample?</strong> <em>material</em></dt>
+<dd><p>Return <code>#t</code> if <var>material</var> uses multisampling.
+</p></dd></dl>
+
+<p>Materials support 5 textures. What each texture is used for depends
+on the lighting model.
+</p>
+<dl>
+<dt id="index-material_002dtexture_002d0">Procedure: <strong>material-texture-0</strong> <em>material</em></dt>
+<dd><p>Return the first texture of <var>material</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-material_002dtexture_002d1">Procedure: <strong>material-texture-1</strong> <em>material</em></dt>
+<dd><p>Return the second texture of <var>material</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-material_002dtexture_002d2">Procedure: <strong>material-texture-2</strong> <em>material</em></dt>
+<dd><p>Return the third texture of <var>material</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-material_002dtexture_002d3">Procedure: <strong>material-texture-3</strong> <em>material</em></dt>
+<dd><p>Return the fourth texture of <var>material</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-material_002dtexture_002d4">Procedure: <strong>material-texture-4</strong> <em>material</em></dt>
+<dd><p>Return the fifth texture of <var>material</var>.
+</p></dd></dl>
+
+<p>For all data that is specific to the lighting model, materials have a
+&ldquo;properties&rdquo; field.
+</p>
+<dl>
+<dt id="index-material_002dproperties">Procedure: <strong>material-properties</strong> <em>material</em></dt>
+<dd><p>Return the lighting model specific properties of <var>material</var>.
+</p></dd></dl>
+
+<span id="Blinn_002dPhong-Materials"></span><h4 class="subsubsection">5.3.11.2 Blinn-Phong Materials</h4>
+
+<p>The <code>(chickadee graphics phong)</code> module has the Blinn-Phong
+lighting model:
+</p>
+<dl>
+<dt id="index-make_002dphong_002dmaterial">Procedure: <strong>make-phong-material</strong> <em>[#:name &quot;anonymous&quot;] [#:blend-mode] [#:polygon-mode] [#:cull-face-mode] [#:depth-test] [#:stencil-test] [#:multisample? #f] [#:ambient-factor (vec3 1 1 1)] [#:diffuse-factor (vec3 1 1 1)] [#:specular-factor (vec3 1 1 1)] [#:shininess 32] [#:ambient-texture] [#:diffuse-texture] [#:specular-texture] [#:normal-texture]</em></dt>
+<dd>
+<p>Return a new Blinn-Phong material.
+</p></dd></dl>
+
+<dl>
+<dt id="index-make_002dphong_002dproperties">Procedure: <strong>make-phong-properties</strong> <em>[#:ambient] [#:diffuse] [#:specular] [#:shininess]</em></dt>
+<dd>
+<p>Return a new Blinn-Phong properties object.
+</p></dd></dl>
+
+<dl>
+<dt id="index-phong_002dproperties_003f">Procedure: <strong>phong-properties?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a Blinn-Phong properties object.
+</p></dd></dl>
+
+<dl>
+<dt id="index-phong_002dproperties_002dambient">Procedure: <strong>phong-properties-ambient</strong> <em>properties</em></dt>
+<dd><p>Return the ambient factor of <var>properties</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-phong_002dproperties_002ddiffuse">Procedure: <strong>phong-properties-diffuse</strong> <em>properties</em></dt>
+<dd><p>Return the diffuse factor of <var>properties</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-phong_002dproperties_002dspecular">Procedure: <strong>phong-properties-specular</strong> <em>properties</em></dt>
+<dd><p>Return the specular factor of <var>properties</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-phong_002dproperties_002dshininess">Procedure: <strong>phong-properties-shininess</strong> <em>properties</em></dt>
+<dd><p>Return the shininess factor of <var>properties</var>.
+</p></dd></dl>
+
+<span id="PBR-Materials"></span><h4 class="subsubsection">5.3.11.3 PBR Materials</h4>
+
+<p>The <code>(chickadee graphics pbr)</code> module has the PBR lighting model:
+</p>
+<dl>
+<dt id="index-make_002dpbr_002dmaterial">Procedure: <strong>make-pbr-material</strong> <em>[#:name &quot;anonymous&quot;] [#:blend-mode] [#:polygon-mode] [#:cull-face-mode] [#:depth-test] [#:stencil-test] [#:multisample? #f] [#:base-color-factor (vec3 1 1 1)] [#:base-color-texcoord 0] [#:metallic-factor 1.0] [#:roughness-factor 1.0] [#:metallic-roughness-texcoord 0] [#:normal-texcoord 0] [#:occlusion-texcoord 0] [#:emissive-factor (vec3 1 1 1)] [#:emissive-texcoord 0] [#:alpha-mode opaque] [#:alpha-cutoff 0.5] [#:base-color-texture] [#:metallic-roughness-texture] [#:normal-texture] [#:occlusion-texture] [#:emissive-texture]</em></dt>
+<dd>
+<p>Return a new PBR material.
+</p></dd></dl>
+
+<dl>
+<dt id="index-make_002dpbr_002dproperties">Procedure: <strong>make-pbr-properties</strong> <em>[#:base-color-factor] [#:base-color-texcoord] [#:metallic-factor] [#:roughness-factor] [#:metallic-roughness-texcoord] [#:normal-texcoord] [#:occlusion-texcoord] [#:emissive-factor] [#:emissive-texcoord] [#:alpha-mode] [#:alpha-cutoff]</em></dt>
+<dd>
+<p>Return a new PBR properties object.
+</p></dd></dl>
+
+<dl>
+<dt id="index-pbr_002dproperties_003f">Procedure: <strong>pbr-properties?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a PBR properties object.
+</p></dd></dl>
+
+<dl>
+<dt id="index-pbr_002dproperties_002dbase_002dcolor_002dfactor">Procedure: <strong>pbr-properties-base-color-factor</strong> <em>properties</em></dt>
+<dd><p>Return the base color factor of <var>properties</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-pbr_002dproperties_002dbase_002dcolor_002dtexcoord">Procedure: <strong>pbr-properties-base-color-texcoord</strong> <em>properties</em></dt>
+<dd><p>Return the base color texture coordinate attribute index of
+<var>properties</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-pbr_002dproperties_002dmetallic_002dfactor">Procedure: <strong>pbr-properties-metallic-factor</strong> <em>properties</em></dt>
+<dd><p>Return the metallic factor of <var>properties</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-pbr_002dproperties_002droughness">Procedure: <strong>pbr-properties-roughness</strong> <em>properties</em></dt>
+<dd><p>Return the roughness factor of <var>properties</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-pbr_002dproperties_002dmetallic_002droughness_002dtexcoord">Procedure: <strong>pbr-properties-metallic-roughness-texcoord</strong> <em>properties</em></dt>
+<dd><p>Return the metallic-roughness texture coordinate attribute index of
+<var>properties</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-pbr_002dproperties_002dnormal_002dtexcoord">Procedure: <strong>pbr-properties-normal-texcoord</strong> <em>properties</em></dt>
+<dd><p>Return the normal texture coordinate attribute index of
+<var>properties</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-pbr_002dproperties_002docclusion_002dtexcoord">Procedure: <strong>pbr-properties-occlusion-texcoord</strong> <em>properties</em></dt>
+<dd><p>Return the ambient occlusion texture coordinate attribute index of
+<var>properties</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-pbr_002dproperties_002demissive_002dfactor">Procedure: <strong>pbr-properties-emissive-factor</strong> <em>properties</em></dt>
+<dd><p>Return the emissive factor of <var>properties</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-pbr_002dproperties_002demissive_002dtexcoord">Procedure: <strong>pbr-properties-emissive-texcoord</strong> <em>properties</em></dt>
+<dd><p>Return the emissive texture coordinate attribute index of
+<var>properties</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-pbr_002dproperties_002dalpha_002dmode">Procedure: <strong>pbr-properties-alpha-mode</strong> <em>properties</em></dt>
+<dd><p>Return the alpha mode of <var>properties</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-pbr_002dproperties_002dalpha_002dcutoff">Procedure: <strong>pbr-properties-alpha-cutoff</strong> <em>properties</em></dt>
+<dd><p>Return the alpha cutoff threshold of <var>properties</var>.
+</p></dd></dl>
+
+<span id="Primitives-and-Meshes"></span><h4 class="subsubsection">5.3.11.4 Primitives and Meshes</h4>
+
+<p>A mesh is a collection of &ldquo;primitives,&rdquo; so we should discuss those
+next. A primitive contains vertex data and a material.
+</p>
+<dl>
+<dt id="index-make_002dprimitive">Procedure: <strong>make-primitive</strong> <em>name vertex-array material</em></dt>
+<dd><p>Return a new primitive named <var>name</var> that renders
+<var>vertex-array</var> (see <a href="Buffers.html">Buffers</a>) using <var>material</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-primitive_003f">Procedure: <strong>primitive?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a primitive.
+</p></dd></dl>
+
+<dl>
+<dt id="index-primitive_002dname">Procedure: <strong>primitive-name</strong> <em>primitive</em></dt>
+<dd><p>Return the name of <var>primitive</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-primitive_002dvertex_002darray">Procedure: <strong>primitive-vertex-array</strong> <em>primitive</em></dt>
+<dd><p>Return the vertex array of <var>primitive</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-primitive_002dmaterial">Procedure: <strong>primitive-material</strong> <em>primitive</em></dt>
+<dd><p>Return the material of <var>primitive</var>.
+</p></dd></dl>
+
+<p>Okay, now we can talk about meshes, which are just a glorified list of
+primitive objects.
+</p>
+<dl>
+<dt id="index-make_002dmesh">Procedure: <strong>make-mesh</strong> <em>name primitives</em></dt>
+<dd><p>Return a new mesh named <var>name</var> that is composed of the list
+<var>primitives</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-mesh_003f">Procedure: <strong>mesh?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a mesh.
+</p></dd></dl>
+
+<dl>
+<dt id="index-mesh_002dname">Procedure: <strong>mesh-name</strong> <em>mesh</em></dt>
+<dd><p>Return the name of <var>mesh</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-mesh_002dprimitives">Procedure: <strong>mesh-primitives</strong> <em>mesh</em></dt>
+<dd><p>Return the list of primitives for <var>mesh</var>.
+</p></dd></dl>
+
+<p>The mesh module also conveniently provides procedures to build several
+basic 3D shapes.
+</p>
+<dl>
+<dt id="index-make_002dplane">Procedure: <strong>make-plane</strong> <em>length width material</em></dt>
+<dd><p>Return a new mesh that forms a flat plane on the XZ axis that is
+<var>width</var> units long along the X axis and <var>length</var> units long
+along the Z axis.
+</p></dd></dl>
+
+<dl>
+<dt id="index-make_002dtesselated_002dplane">Procedure: <strong>make-tesselated-plane</strong> <em>length width resolution material</em></dt>
+<dd><p>Return a new mesh that forms a tesselated plane on the XZ axis that is
+<var>width</var> units long along the X axis and <var>length</var> units long
+along the Z axis.
+</p>
+<p>A regular plane is a single rectangle, but a tesselated plane is
+subdivided into many smaller rectangles by <var>resolution</var>. This
+allows for transforming the vertices in a shader to achieve effects
+such as waves in water or mountainous terrain.
+</p></dd></dl>
+
+<dl>
+<dt id="index-make_002dcube">Procedure: <strong>make-cube</strong> <em>size material</em></dt>
+<dd><p>Return a new mesh that forms a cube that is <var>size</var> units big.
+</p></dd></dl>
+
+<dl>
+<dt id="index-make_002dsphere">Procedure: <strong>make-sphere</strong> <em>radius material [#:quality 2]</em></dt>
+<dd><p>Return a new mesh that forms a sphere that has a radius of
+<var>radius</var> units. Since 3D models are composed of triangles, the
+quality of a sphere is entirely dependent upon how many triangles are
+used to appromixate the shape. The higher the value of <var>quality</var>,
+the better the appromixation, but the more time it will take to
+generate and the more expensive it will be to draw. The number of
+triangles in the resulting sphere increases exponentially with each
+increment to <var>quality</var>.
+</p></dd></dl>
+
+<hr>
+<div class="header">
+<p>
+Next: <a href="Buffers.html" accesskey="n" rel="next">Buffers</a>, Previous: <a href="Skyboxes.html" accesskey="p" rel="prev">Skyboxes</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+</div>
+
+
+
+</body>
+</html>
diff --git a/manuals/chickadee/3D-Models.html b/manuals/chickadee/Models.html
index 6d0f7c7..3a1a6d6 100644
--- a/manuals/chickadee/3D-Models.html
+++ b/manuals/chickadee/Models.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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -21,10 +21,10 @@ http://www.texinfo.org/ (GNU Texinfo).
<!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>3D Models (The Chickadee Game Toolkit)</title>
+<title>Models (The Chickadee Game Toolkit)</title>
-<meta name="description" content="3D Models (The Chickadee Game Toolkit)">
-<meta name="keywords" content="3D Models (The Chickadee Game Toolkit)">
+<meta name="description" content="Models (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Models (The Chickadee Game Toolkit)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
@@ -32,7 +32,7 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="Index.html" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Graphics.html" rel="up" title="Graphics">
-<link href="Blending.html" rel="next" title="Blending">
+<link href="Lights.html" rel="next" title="Lights">
<link href="Tile-Maps.html" rel="prev" title="Tile Maps">
<style type="text/css">
<!--
@@ -80,45 +80,38 @@ ul.no-bullet {list-style: none}
</head>
<body lang="en">
-<span id="g_t3D-Models"></span><div class="header">
+<span id="Models"></span><div class="header">
<p>
-Next: <a href="Blending.html" accesskey="n" rel="next">Blending</a>, Previous: <a href="Tile-Maps.html" accesskey="p" rel="prev">Tile Maps</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Lights.html" accesskey="n" rel="next">Lights</a>, Previous: <a href="Tile-Maps.html" accesskey="p" rel="prev">Tile Maps</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="g_t3D-Models-1"></span><h4 class="subsection">2.3.9 3D Models</h4>
+<span id="Models-1"></span><h4 class="subsection">5.3.8 Models</h4>
<p><em>Disclaimer: Chickadee is alpha software, but 3D model support is
even more alpha than that. There are many missing features in both
the model loading and rendering components, so set your expectations
accordingly!</em>
</p>
-<p>Chickadee can load and render 3D models in the classic OBJ and more
-modern glTF 2.0 formats.
+<p>The <code>(chickadee graphics model)</code> module provides procedures to
+load and render 3D models in the classic OBJ and more modern glTF 2.0
+formats.
</p>
<p>Here&rsquo;s some basic boilerplate to render a 3D model:
</p>
<div class="example">
-<pre class="example">(use-modules (chickadee)
- (chickadee math)
- (chickadee math matrix)
- (chickadee graphics model))
+<pre class="example">(use-modules (chickadee graphics light)
+ (chickadee graphics model)
+ (chickadee graphics skybox))
-(define model #f)
-(define projection-matrix
- (perspective-projection (/ pi 3.0) (/ 4.0 3.0) 0.1 500.0))
-;; Adjust these 2 matrices so that you can actually see the model.
-(define view-matrix (make-identity-matrix4))
-(define model-matrix (make-identity-matrix4))
-
-(define (load)
- (set! model (load-obj &quot;model.obj&quot;))
+(define model (load-gltf &quot;Suzanne.gltf&quot;))
+(define camera-position (vec3 0.0 0.0 3.0))
+(define world (make-identity-matrix4))
+(define view (look-at camera-position (vec3 0.0 0.0 0.0) (vec3 0.0 1.0 0.0)))
+(define projection (perspective-projection (/ pi 3.0) (/ 4.0 3.0) 0.1 5.0))
(define (draw alpha)
- (with-projection projection-matrix
- (with-depth-test #t
- (draw-model model model-matrix view-matrix))))
-
-(run-game #:load load #:draw draw)
+ (with-projection projection
+ (draw-model model world view camera-position
</pre></div>
<dl>
@@ -145,11 +138,28 @@ which is currently a stub to be implemented later.
</p></dd></dl>
<dl>
-<dt id="index-draw_002dmodel">Procedure: <strong>draw-model</strong> <em>model model-matrix view-matrix</em></dt>
-<dd><p>Render <var>model</var> with the transformation matrices <var>model-matrix</var>
-and <var>view-matrix</var> applied.
+<dt id="index-draw_002dmodel">Procedure: <strong>draw-model</strong> <em>model [#:model-matrix] [#:view-matrix] [#:camera-position (vec3 0 0 0)] [#:skybox] [#:lights '()]</em></dt>
+<dd>
+<p>Render <var>model</var> with the transformation matrices <var>model-matrix</var>
+and <var>view-matrix</var> applied. <var>camera-position</var> is the world
+position of the camera, for correct specular lighting calculations.
+<var>skybox</var> is used to apply ambient lighting to the model.
+<var>lights</var> contains all of the dynamic lights (see <a href="Lights.html">Lights</a>) that
+should have an effect on the model.
</p></dd></dl>
+<p>Models are composed of simpler data types: meshes, primitives, and
+materials. Let&rsquo;s start with materials. A material controls the
+appearance of a 3D object. Is the object a rough stone? Or maybe a
+smooth metal? Materials control all of this and more.
+</p>
+<p>There are two types of materials in Chickadee: Phong and PBR.
+</p>
+<hr>
+<div class="header">
+<p>
+Next: <a href="Lights.html" accesskey="n" rel="next">Lights</a>, Previous: <a href="Tile-Maps.html" accesskey="p" rel="prev">Tile Maps</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+</div>
diff --git a/manuals/chickadee/Particles.html b/manuals/chickadee/Particles.html
index d058996..38943fa 100644
--- a/manuals/chickadee/Particles.html
+++ b/manuals/chickadee/Particles.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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Tile-Maps.html" accesskey="n" rel="next">Tile Maps</a>, Previous: <a href="Vector-Paths.html" accesskey="p" rel="prev">Vector Paths</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Particles-1"></span><h4 class="subsection">2.3.7 Particles</h4>
+<span id="Particles-1"></span><h4 class="subsection">5.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,
@@ -127,8 +127,8 @@ at the coordinates <code>(320, 240)</code>:
particles. Achieving the desired particle effect involves tweaking
the following keyword arguments as needed:
</p>
-<p>- <var>blend-mode</var>: Pixel blending mode. Alpha blending is used by default.
-(see <a href="Blending.html">Blending</a> for more about blend modes).
+<p>- <var>blend-mode</var>: Pixel blending mode. Alpha blending is used by
+default. (see <a href="Render-Settings.html">Render Settings</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.
diff --git a/manuals/chickadee/Path-Finding.html b/manuals/chickadee/Path-Finding.html
index d423b36..40dc80e 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -31,9 +31,9 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="index.html" rel="start" title="Top">
<link href="Index.html" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
-<link href="Math.html" rel="up" title="Math">
-<link href="Grid.html" rel="next" title="Grid">
-<link href="Bezier-Curves.html" rel="prev" title="Bezier Curves">
+<link href="Data-Structures.html" rel="up" title="Data Structures">
+<link href="Copying-This-Manual.html" rel="next" title="Copying This Manual">
+<link href="Grids.html" rel="prev" title="Grids">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
@@ -82,10 +82,10 @@ ul.no-bullet {list-style: none}
<body lang="en">
<span id="Path-Finding"></span><div class="header">
<p>
-Next: <a href="Grid.html" accesskey="n" rel="next">Grid</a>, Previous: <a href="Bezier-Curves.html" accesskey="p" rel="prev">Bezier Curves</a>, Up: <a href="Math.html" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+Previous: <a href="Grids.html" accesskey="p" rel="prev">Grids</a>, Up: <a href="Data-Structures.html" accesskey="u" rel="up">Data Structures</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Path-Finding-1"></span><h4 class="subsection">2.2.8 Path Finding</h4>
+<span id="Path-Finding-1"></span><h4 class="subsection">5.6.6 Path Finding</h4>
<p>Most game worlds have maps. Often, these games have a need to move
non-player characters around in an unscripted fashion. For example,
@@ -94,7 +94,7 @@ units to attack something in the enemy base. To do so, the unit must
calculate the shortest route to get there. It wouldn&rsquo;t be a very fun
game if units didn&rsquo;t know how to transport themselves efficiently.
This is where path finding algorithms come in handy. The
-<code>(chickadee math path-finding)</code> module provides a generic
+<code>(chickadee data path-finding)</code> module provides a generic
implementation of the popular A* path finding algorithm. Just add a
map implementation!
</p>
@@ -162,7 +162,7 @@ returns an approximate distance between them.
<hr>
<div class="header">
<p>
-Next: <a href="Grid.html" accesskey="n" rel="next">Grid</a>, Previous: <a href="Bezier-Curves.html" accesskey="p" rel="prev">Bezier Curves</a>, Up: <a href="Math.html" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+Previous: <a href="Grids.html" accesskey="p" rel="prev">Grids</a>, Up: <a href="Data-Structures.html" accesskey="u" rel="up">Data Structures</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
diff --git a/manuals/chickadee/Quadtrees.html b/manuals/chickadee/Quadtrees.html
new file mode 100644
index 0000000..e6962a4
--- /dev/null
+++ b/manuals/chickadee/Quadtrees.html
@@ -0,0 +1,222 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Copyright (C) 2017-2021 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.7, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Quadtrees (The Chickadee Game Toolkit)</title>
+
+<meta name="description" content="Quadtrees (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Quadtrees (The Chickadee Game Toolkit)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="makeinfo">
+<link href="index.html" rel="start" title="Top">
+<link href="Index.html" rel="index" title="Index">
+<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="Data-Structures.html" rel="up" title="Data Structures">
+<link href="Grids.html" rel="next" title="Grids">
+<link href="Heaps.html" rel="prev" title="Heaps">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {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}
+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">
+<span id="Quadtrees"></span><div class="header">
+<p>
+Next: <a href="Grids.html" accesskey="n" rel="next">Grids</a>, Previous: <a href="Heaps.html" accesskey="p" rel="prev">Heaps</a>, Up: <a href="Data-Structures.html" accesskey="u" rel="up">Data Structures</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+</div>
+<hr>
+<span id="Quadtrees-1"></span><h4 class="subsection">5.6.4 Quadtrees</h4>
+
+<p>The <code>(chickadee data quadtree)</code> module provides a 2D spatial
+partitioning implementation known as a &ldquo;quadtree&rdquo;. A quadtree
+recursively subdivides the world into rectangular quadrants. This
+data structure is very useful for handling broad-phase collision
+detection because it can quickly determine the objects that may
+possibly be colliding with another, resulting in fewer narrow-phase
+collision tests that are typically much more expensive.
+</p>
+<dl>
+<dt id="index-make_002dquadtree">Procedure: <strong>make-quadtree</strong> <em>bounds [#:max-size 5] [#:max-depth 4]</em></dt>
+<dd><p>Return a new quadtree that covers the area <var>bounds</var>. Each node
+will try to hold at maximum <var>max-size</var> objects and the tree depth
+will be restricted to <var>max-depth</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-quadtree_003f">Procedure: <strong>quadtree?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a quadtree.
+</p></dd></dl>
+
+<dl>
+<dt id="index-quadtree_002dclear_0021">Procedure: <strong>quadtree-clear!</strong> <em>quadtree</em></dt>
+<dd><p>Clear all objects from <var>quadtree</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-quadtree_002dinsert_0021">Procedure: <strong>quadtree-insert!</strong> <em>quadtree rect object</em></dt>
+<dd><p>Insert <var>object</var> with bounding box <var>rect</var> into <var>quadtree</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-quadtree_002ddelete_0021">Procedure: <strong>quadtree-delete!</strong> <em>quadtree rect object</em></dt>
+<dd><p>Delete <var>object</var>, who occupies the space <var>rect</var>, from
+<var>quadtree</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-quadtree_002dfind">Procedure: <strong>quadtree-find</strong> <em>rect pred</em></dt>
+<dd><p>Return the first object in <var>quadtree</var> in the vicinity of
+<var>rect</var> that satisfies <var>pred</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-quadtree_002dfold">Procedure: <strong>quadtree-fold</strong> <em>quadtree rect init proc</em></dt>
+<dd><p>Apply <var>proc</var> to all objects in the vicinity of <var>rect</var> in
+<var>quadtree</var> to build a result and return that result. <var>init</var>
+is the initial result. If there are no objects in the vicinity of
+<var>rect</var>, just <var>init</var> is returned.
+</p></dd></dl>
+
+<dl>
+<dt id="index-quadtree_002dfor_002deach">Procedure: <strong>quadtree-for-each</strong> <em>quadtree rect proc</em></dt>
+<dd><p>Call <var>proc</var> for all objects in the vicinity of <var>rect</var> in
+<var>quadtree</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-quadtree_002dleaf_003f">Procedure: <strong>quadtree-leaf?</strong> <em>quadtree</em></dt>
+<dd><p>Return <code>#t</code> if <var>quadtree</var> is a leaf node.
+</p></dd></dl>
+
+<dl>
+<dt id="index-quadtree_002dbounds">Procedure: <strong>quadtree-bounds</strong> <em>quadtree</em></dt>
+<dd><p>Return the bounding rectangle of <var>quadtree</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-quadtree_002dmax_002ddepth">Procedure: <strong>quadtree-max-depth</strong> <em>quadtree</em></dt>
+<dd><p>Return the maximum depth of <var>quadtree</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-quadtree_002dmax_002dsize">Procedure: <strong>quadtree-max-size</strong> <em>quadtree</em></dt>
+<dd><p>Return the desired per-node maximum object count of <var>quadtree</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-quadtree_002ddepth">Procedure: <strong>quadtree-depth</strong> <em>quadtree</em></dt>
+<dd><p>Return the depth of the node <var>quadtree</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-quadtree_002dsize">Procedure: <strong>quadtree-size</strong> <em>quadtree</em></dt>
+<dd><p>Return the number of objects stored in the node <var>quadtree</var>.
+</p></dd></dl>
+
+<p>Non-leaf nodes always have four child nodes, which correspond to the
+quadrants of a Cartesian coordinate system:
+</p>
+<pre class="verbatim">*------*------*
+| | |
+| Q2 | Q1 |
+| | |
+*------*------*
+| | |
+| Q3 | Q4 |
+| | |
+*------*------*
+</pre>
+<dl>
+<dt id="index-quadtree_002dq1">Procedure: <strong>quadtree-q1</strong> <em>quadtree</em></dt>
+<dd><p>Return the upper-right child node of <var>quadtree</var>, or <code>#f</code> if
+<var>quadtree</var> is a leaf node.
+</p></dd></dl>
+
+<dl>
+<dt id="index-quadtree_002dq2">Procedure: <strong>quadtree-q2</strong> <em>quadtree</em></dt>
+<dd><p>Return the upper-left child node of <var>quadtree</var>, or <code>#f</code> if
+<var>quadtree</var> is a leaf node.
+</p></dd></dl>
+
+<dl>
+<dt id="index-quadtree_002dq3">Procedure: <strong>quadtree-q3</strong> <em>quadtree</em></dt>
+<dd><p>Return the lower-left child node of <var>quadtree</var>, or <code>#f</code> if
+<var>quadtree</var> is a leaf node.
+</p></dd></dl>
+
+<dl>
+<dt id="index-quadtree_002dq4">Procedure: <strong>quadtree-q4</strong> <em>quadtree</em></dt>
+<dd><p>Return the lower-right child node of <var>quadtree</var>, or <code>#f</code> if
+<var>quadtree</var> is a leaf node.
+</p></dd></dl>
+
+<hr>
+<div class="header">
+<p>
+Next: <a href="Grids.html" accesskey="n" rel="next">Grids</a>, Previous: <a href="Heaps.html" accesskey="p" rel="prev">Heaps</a>, Up: <a href="Data-Structures.html" accesskey="u" rel="up">Data Structures</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+</div>
+
+
+
+</body>
+</html>
diff --git a/manuals/chickadee/Quaternions.html b/manuals/chickadee/Quaternions.html
index aaf3187..3728f66 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Easings.html" accesskey="n" rel="next">Easings</a>, Previous: <a href="Matrices.html" accesskey="p" rel="prev">Matrices</a>, Up: <a href="Math.html" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Quaternions-1"></span><h4 class="subsection">2.2.5 Quaternions</h4>
+<span id="Quaternions-1"></span><h4 class="subsection">5.2.5 Quaternions</h4>
<p>In game development, the quaternion is most often used to represent
rotations. Why not use a matrix for that, you may ask. Unlike
diff --git a/manuals/chickadee/Queues.html b/manuals/chickadee/Queues.html
new file mode 100644
index 0000000..1df6f78
--- /dev/null
+++ b/manuals/chickadee/Queues.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Copyright (C) 2017-2021 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.7, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Queues (The Chickadee Game Toolkit)</title>
+
+<meta name="description" content="Queues (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Queues (The Chickadee Game Toolkit)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="makeinfo">
+<link href="index.html" rel="start" title="Top">
+<link href="Index.html" rel="index" title="Index">
+<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="Data-Structures.html" rel="up" title="Data Structures">
+<link href="Heaps.html" rel="next" title="Heaps">
+<link href="Array-Lists.html" rel="prev" title="Array Lists">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {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}
+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">
+<span id="Queues"></span><div class="header">
+<p>
+Next: <a href="Heaps.html" accesskey="n" rel="next">Heaps</a>, Previous: <a href="Array-Lists.html" accesskey="p" rel="prev">Array Lists</a>, Up: <a href="Data-Structures.html" accesskey="u" rel="up">Data Structures</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+</div>
+<hr>
+<span id="Queues-1"></span><h4 class="subsection">5.6.2 Queues</h4>
+
+<p>The <code>(chickadee data queue)</code> module provides a mutable queue that
+is more memory efficient than Guile&rsquo;s built-in <code>(ice-9 q)</code>
+module.
+</p>
+<dl>
+<dt id="index-make_002dqueue">Procedure: <strong>make-queue</strong></dt>
+<dd><p>Return a new, empty queue.
+</p></dd></dl>
+
+<dl>
+<dt id="index-queue_003f">Procedure: <strong>queue?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a queue.
+</p></dd></dl>
+
+<dl>
+<dt id="index-queue_002dempty_003f">Procedure: <strong>queue-empty?</strong> <em>queue</em></dt>
+<dd><p>Return <code>#t</code> if <var>queue</var> is empty.
+</p></dd></dl>
+
+<dl>
+<dt id="index-queue_002dlength">Procedure: <strong>queue-length</strong> <em>queue</em></dt>
+<dd><p>Return the current length of <var>queue</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-enqueue_0021">Procedure: <strong>enqueue!</strong> <em>queue item</em></dt>
+<dd><p>Add <var>item</var> to <var>queue</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-dequeue_0021">Procedure: <strong>dequeue!</strong> <em>queue</em></dt>
+<dd><p>Remove and return the first item in <var>queue</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-queue_002dclear_0021">Procedure: <strong>queue-clear!</strong> <em>queue</em></dt>
+<dd><p>Remove all items from <var>queue</var>.
+</p></dd></dl>
+
+
+
+
+</body>
+</html>
diff --git a/manuals/chickadee/Rectangles.html b/manuals/chickadee/Rectangles.html
index 3dde39d..62d4f16 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Matrices.html" accesskey="n" rel="next">Matrices</a>, Previous: <a href="Vectors.html" accesskey="p" rel="prev">Vectors</a>, Up: <a href="Math.html" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Rectangles-1"></span><h4 class="subsection">2.2.3 Rectangles</h4>
+<span id="Rectangles-1"></span><h4 class="subsection">5.2.3 Rectangles</h4>
<p>The <code>(chickadee math rect)</code> module provides an API for
manipulating axis-aligned bounding boxes (AABBs). AABBs are often
diff --git a/manuals/chickadee/Render-Settings.html b/manuals/chickadee/Render-Settings.html
new file mode 100644
index 0000000..fe3fa98
--- /dev/null
+++ b/manuals/chickadee/Render-Settings.html
@@ -0,0 +1,512 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Copyright (C) 2017-2021 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.7, http://www.gnu.org/software/texinfo/ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Render Settings (The Chickadee Game Toolkit)</title>
+
+<meta name="description" content="Render Settings (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Render Settings (The Chickadee Game Toolkit)">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="makeinfo">
+<link href="index.html" rel="start" title="Top">
+<link href="Index.html" rel="index" title="Index">
+<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="Graphics.html" rel="up" title="Graphics">
+<link href="Rendering-Engine.html" rel="next" title="Rendering Engine">
+<link href="Viewports.html" rel="prev" title="Viewports">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {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}
+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">
+<span id="Render-Settings"></span><div class="header">
+<p>
+Next: <a href="Rendering-Engine.html" accesskey="n" rel="next">Rendering Engine</a>, Previous: <a href="Viewports.html" accesskey="p" rel="prev">Viewports</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+</div>
+<hr>
+<span id="Render-Settings-1"></span><h4 class="subsection">5.3.16 Render Settings</h4>
+
+<span id="Blending"></span><h4 class="subsubsection">5.3.16.1 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. The
+<code>(chickadee graphics blend)</code> module provides a data type for
+blending modes.
+</p>
+<p>Chickadee provides the following blend modes:
+</p>
+<dl>
+<dt id="index-blend_003aalpha">Variable: <strong>blend:alpha</strong></dt>
+<dd><p>Blend pixels according to the values of their alpha channels. This is
+the most commonly used blend mode.
+</p></dd></dl>
+
+<dl>
+<dt id="index-blend_003areplace">Variable: <strong>blend:replace</strong></dt>
+<dd><p>Overwrite the output pixel color with the color being drawn.
+</p></dd></dl>
+
+<dl>
+<dt id="index-blend_003aadd">Variable: <strong>blend:add</strong></dt>
+<dd><p>Add all pixel color values together. The more colors blended
+together, the more white the final color becomes.
+</p></dd></dl>
+
+<dl>
+<dt id="index-blend_003asubtract">Variable: <strong>blend:subtract</strong></dt>
+<dd><p>Subtract all pixel color values. The more colors blended together,
+the more black the final color becomes.
+</p></dd></dl>
+
+<dl>
+<dt id="index-blend_003amultiply">Variable: <strong>blend:multiply</strong></dt>
+</dl>
+
+<dl>
+<dt id="index-blend_003adarken">Variable: <strong>blend:darken</strong></dt>
+</dl>
+
+<dl>
+<dt id="index-blend_003alighten">Variable: <strong>blend:lighten</strong></dt>
+</dl>
+
+<dl>
+<dt id="index-blend_003ascreen">Variable: <strong>blend:screen</strong></dt>
+</dl>
+
+<p>Custom blend modes can be created using the <code>make-blend-mode</code> procedure:
+</p>
+<dl>
+<dt id="index-make_002dblend_002dmode">Procedure: <strong>make-blend-mode</strong> <em>equation source-function destination-function</em></dt>
+<dd><p>Return a new custom blend mode that applies <var>source-function</var> to
+the source color, <var>destination-function</var> to the destination color,
+and finally applies <var>equation</var> to the transformed
+source/destination color values. These arguments are <em>not</em>
+procedures, but symbolic representations of the functions that OpenGL
+supports.
+</p>
+<p>Valid values for <var>equation</var> are:
+</p>
+<ul>
+<li> <code>add</code>
+</li><li> <code>subtract</code>
+</li><li> <code>reverse-subtract</code>
+</li><li> <code>min</code>
+</li><li> <code>max</code>
+</li><li> <code>alpha-min</code>
+</li><li> <code>alpha-max</code>
+</li></ul>
+
+<p>Valid values for <var>source-function</var> are:
+</p>
+<ul>
+<li> <code>zero</code>
+</li><li> <code>one</code>
+</li><li> <code>destination-color</code>
+</li><li> <code>one-minus-destination-color</code>
+</li><li> <code>source-alpha-saturate</code>
+</li><li> <code>source-alpha</code>
+</li><li> <code>one-minus-source-alpha</code>
+</li><li> <code>destination-alpha</code>
+</li><li> <code>one-minus-destination-alpha</code>
+</li><li> <code>constant-color</code>
+</li><li> <code>one-minus-constant-color</code>
+</li><li> <code>constant-alpha</code>
+</li><li> <code>one-minus-constant-alpha</code>
+</li></ul>
+
+<p>Valid values for <var>destination-function</var> are:
+</p>
+<ul>
+<li> <code>zero</code>
+</li><li> <code>one</code>
+</li><li> <code>source-color</code>
+</li><li> <code>one-minus-source-color</code>
+</li><li> <code>source-alpha</code>
+</li><li> <code>one-minus-source-alpha</code>
+</li><li> <code>destination-alpha</code>
+</li><li> <code>one-minus-destination-alpha</code>
+</li><li> <code>constant-color</code>
+</li><li> <code>one-minus-constant-color</code>
+</li><li> <code>constant-alpha</code>
+</li><li> <code>one-minus-constant-alpha</code>
+</li></ul>
+
+</dd></dl>
+
+<span id="Polygon-Modes-and-Culling"></span><h4 class="subsubsection">5.3.16.2 Polygon Modes and Culling</h4>
+
+<p>The <code>(chickadee graphics polygon)</code> module provides access to the
+<code>g:polygon-mode</code> and <code>g:cull-face-mode</code> render states.
+</p>
+<dl>
+<dt id="index-fill_002dpolygon_002dmode">Variable: <strong>fill-polygon-mode</strong></dt>
+<dd><p>Completely fill in the polygon. This is the default mode.
+</p></dd></dl>
+
+<dl>
+<dt id="index-line_002dpolygon_002dmode">Variable: <strong>line-polygon-mode</strong></dt>
+<dd><p>Render only the edges of the polygon. Produces a wireframe.
+</p></dd></dl>
+
+<dl>
+<dt id="index-point_002dpolygon_002dmode">Variable: <strong>point-polygon-mode</strong></dt>
+<dd><p>Render only the vertex positions as points.
+</p></dd></dl>
+
+<dl>
+<dt id="index-make_002dpolygon_002dmode">Procedure: <strong>make-polygon-mode</strong> <em>front back</em></dt>
+<dd><p>Return a new polygon mode that uses the method <var>front</var> for the
+front face and <var>back</var> for the back face. The valid modes are
+<code>fill</code>, <code>line</code>, and <var>point</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-polygon_002dmode_003f">Procedure: <strong>polygon-mode?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a polygon mode.
+</p></dd></dl>
+
+<dl>
+<dt id="index-current_002dpolygon_002dmode">Procedure: <strong>current-polygon-mode</strong></dt>
+<dd><p>Return the current polygon mode.
+</p></dd></dl>
+
+<dl>
+<dt id="index-g_003apolygon_002dmode">Variable: <strong>g:polygon-mode</strong></dt>
+<dd><p>Render state for polygon modes (see <a href="Rendering-Engine.html">Rendering Engine</a>.)
+</p></dd></dl>
+
+<dl>
+<dt id="index-no_002dcull_002dface_002dmode">Variable: <strong>no-cull-face-mode</strong></dt>
+<dd><p>Don&rsquo;t cull any faces.
+</p></dd></dl>
+
+<dl>
+<dt id="index-back_002dcull_002dface_002dmode">Variable: <strong>back-cull-face-mode</strong></dt>
+<dd><p>Cull only back faces.
+</p></dd></dl>
+
+<dl>
+<dt id="index-front_002dcull_002dface_002dmode">Variable: <strong>front-cull-face-mode</strong></dt>
+<dd><p>Cull only front faces.
+</p></dd></dl>
+
+<dl>
+<dt id="index-front_002dand_002dback_002dcull_002dface_002dmode">Variable: <strong>front-and-back-cull-face-mode</strong></dt>
+<dd><p>Cull both front and back faces.
+</p></dd></dl>
+
+<dl>
+<dt id="index-cull_002dface_002dmode_003f">Procedure: <strong>cull-face-mode?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a cull face mode.
+</p></dd></dl>
+
+<dl>
+<dt id="index-cull_002dface_002dmode_002dfront_003f">Procedure: <strong>cull-face-mode-front?</strong> <em>cull-face-mode</em></dt>
+<dd><p>Return <code>#t</code> if <var>cull-face-mode</var> culls front faces.
+</p></dd></dl>
+
+<dl>
+<dt id="index-cull_002dface_002dmode_002dback_003f">Procedure: <strong>cull-face-mode-back?</strong> <em>cull-face-mode</em></dt>
+<dd><p>Return <code>#t</code> if <var>cull-face-mode</var> culls back faces.
+</p></dd></dl>
+
+<dl>
+<dt id="index-current_002dcull_002dface_002dmode">Procedure: <strong>current-cull-face-mode</strong></dt>
+<dd><p>Return the current cull face mode.
+</p></dd></dl>
+
+<dl>
+<dt id="index-g_003acull_002dface_002dmode">Variable: <strong>g:cull-face-mode</strong></dt>
+<dd><p>Render state for cull face modes (see <a href="Rendering-Engine.html">Rendering Engine</a>.)
+</p></dd></dl>
+
+<span id="Depth-Testing"></span><h4 class="subsubsection">5.3.16.3 Depth Testing</h4>
+
+<p>The <code>(chickadee graphics depth)</code> module provides access to the
+<code>g:depth-test</code> render state.
+</p>
+<dl>
+<dt id="index-make_002ddepth_002dtest">Procedure: <strong>make-depth-test</strong> <em>[#:write? #t] [#:function 'less-than] [#:near 0.0] [#:far 1.0]</em></dt>
+<dd>
+<p>Return a new depth test object. If <var>write</var> is <code>#t</code>, the
+depth buffer will be written to during a draw call. <var>near</var> and
+<var>far</var> define the min/max Z values for which depth testing may
+pass.
+</p>
+<p><var>function</var> specifies how the depth value of pixel being drawn
+compares to the depth value that is already in the depth buffer. When
+this comparison is true, the depth test passes and the pixel is drawn.
+When it fails, the pixel is discarded.
+</p>
+<p>The possible values of <var>function</var> are:
+</p>
+<ul>
+<li> <code>always</code>
+</li><li> <code>never</code>
+</li><li> <code>equal</code>
+</li><li> <code>not-equal</code>
+</li><li> <code>less-than</code>
+</li><li> <code>less-than-or-equal</code>
+</li><li> <code>greater-than</code>
+</li><li> <code>greater-than-or-equal</code>
+</li></ul>
+
+</dd></dl>
+
+<dl>
+<dt id="index-depth_002dtest_003f">Procedure: <strong>depth-test?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> when <var>obj</var> is a depth test object.
+</p></dd></dl>
+
+<dl>
+<dt id="index-depth_002dtest_002dwrite_003f">Procedure: <strong>depth-test-write?</strong> <em>depth-test</em></dt>
+<dd><p>Return <code>#t</code> when <var>depth-test</var> will write to the depth buffer.
+</p></dd></dl>
+
+<dl>
+<dt id="index-depth_002dtest_002dfunction">Procedure: <strong>depth-test-function</strong> <em>depth-test</em></dt>
+<dd><p>Return the comparison function of <var>depth-test</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-depth_002dtest_002dnear">Procedure: <strong>depth-test-near</strong> <em>depth-test</em></dt>
+<dd><p>Return the near Z value of <var>depth-test</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-depth_002dtest_002dfar">Procedure: <strong>depth-test-far</strong> <em>depth-test</em></dt>
+<dd><p>Return the far Z value of <var>depth-test</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-current_002ddepth_002dtest">Procedure: <strong>current-depth-test</strong></dt>
+<dd><p>Return the current depth test.
+</p></dd></dl>
+
+<dl>
+<dt id="index-g_003adepth_002dtest">Variable: <strong>g:depth-test</strong></dt>
+<dd><p>Render state for depth tests (see <a href="Rendering-Engine.html">Rendering Engine</a>.)
+</p></dd></dl>
+
+<span id="Stencil-Testing"></span><h4 class="subsubsection">5.3.16.4 Stencil Testing</h4>
+
+<p>The <code>(chickadee graphics stencil)</code> module provides access to the
+<code>g:stencil-test</code> render state.
+</p>
+<dl>
+<dt id="index-default_002dstencil_002dtest">Variable: <strong>default-stencil-test</strong></dt>
+<dd><p>A stencil test that always passes.
+</p></dd></dl>
+
+<dl>
+<dt id="index-make_002dstencil_002dtest">Procedure: <strong>make-stencil-test</strong> <em>[#:mask #xFF] [#:function always] [#:function-mask #xFF] [#:reference 0] [#:on-fail keep] [#:on-depth-fail keep] [#:on-pass keep] [#:mask-front mask] [#:mask-back mask] [#:function-mask-front function-mask] [#:function-mask-back function-mask] [#:refrence-front reference] [#:reference-back reference] [#:on-fail-front on-fail] [#:on-fail-back on-fail] [#:on-depth-fail-front on-depth-fail] [#:on-depth-fail-back on-depth-fail] [#:on-pass-front on-pass] [#:on-pass-back on-pass]</em></dt>
+<dd>
+<p>Return a new stencil test object. Different configurations can be
+used for the front and back faces by using the arguments that end in
+&ldquo;front&rdquo; or &ldquo;back&rdquo;.
+</p>
+<p>Valid values for <var>on-pass</var>, <var>on-fail</var>, and <var>on-depth-fail</var>
+are:
+</p>
+<ul>
+<li> <code>zero</code>
+</li><li> <code>keep</code>
+</li><li> <code>replace</code>
+</li><li> <code>increment</code>
+</li><li> <code>increment-wrap</code>
+</li><li> <code>decrement</code>
+</li><li> <code>decrement-wrap</code>
+</li><li> <code>invert</code>
+</li></ul>
+
+<p>Valid values for <var>function</var> are:
+</p>
+<ul>
+<li> <code>always</code>
+</li><li> <code>never</code>
+</li><li> <code>equal</code>
+</li><li> <code>not-equal</code>
+</li><li> <code>less-than</code>
+</li><li> <code>less-than-or-equal</code>
+</li><li> <code>greater-than</code>
+</li><li> <code>greater-than-or-equal</code>
+</li></ul>
+
+</dd></dl>
+
+<dl>
+<dt id="index-stencil_002dtest_003f">Procedure: <strong>stencil-test?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> when <var>obj</var> is a stencil test object.
+</p></dd></dl>
+
+<dl>
+<dt id="index-stencil_002dtest_002dmask_002dfront">Procedure: <strong>stencil-test-mask-front</strong> <em>stencil-test</em></dt>
+<dd><p>Return the front mask of <var>stencil-test</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-stencil_002dtest_002dmask_002dback">Procedure: <strong>stencil-test-mask-back</strong> <em>stencil-test</em></dt>
+<dd><p>Return the back mask of <var>stencil-test</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-stencil_002dtest_002dfunction_002dfront">Procedure: <strong>stencil-test-function-front</strong> <em>stencil-test</em></dt>
+<dd><p>Return the front function of <var>stencil-test</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-stencil_002dtest_002dfunction_002dback">Procedure: <strong>stencil-test-function-back</strong> <em>stencil-test</em></dt>
+<dd><p>Return the back function of <var>stencil-test</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-stencil_002dtest_002dfunction_002dmask_002dfront">Procedure: <strong>stencil-test-function-mask-front</strong> <em>stencil-test</em></dt>
+<dd><p>Return the front function-mask of <var>stencil-test</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-stencil_002dtest_002dfunction_002dmask_002dback">Procedure: <strong>stencil-test-function-mask-back</strong> <em>stencil-test</em></dt>
+<dd><p>Return the back function-mask of <var>stencil-test</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-stencil_002dtest_002dreference_002dfront">Procedure: <strong>stencil-test-reference-front</strong> <em>stencil-test</em></dt>
+<dd><p>Return the front reference value of <var>stencil-test</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-stencil_002dtest_002dreference_002dback">Procedure: <strong>stencil-test-reference-back</strong> <em>stencil-test</em></dt>
+<dd><p>Return the back reference value of <var>stencil-test</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-stencil_002dtest_002don_002dfail_002dfront">Procedure: <strong>stencil-test-on-fail-front</strong> <em>stencil-test</em></dt>
+<dd><p>Return the front failure action of <var>stencil-test</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-stencil_002dtest_002don_002dfail_002dback">Procedure: <strong>stencil-test-on-fail-back</strong> <em>stencil-test</em></dt>
+<dd><p>Return the back failure action of <var>stencil-test</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-stencil_002dtest_002don_002ddepth_002dfail_002dfront">Procedure: <strong>stencil-test-on-depth-fail-front</strong> <em>stencil-test</em></dt>
+<dd><p>Return the front depth test failure action of <var>stencil-test</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-stencil_002dtest_002don_002ddepth_002dfail_002dback">Procedure: <strong>stencil-test-on-depth-fail-back</strong> <em>stencil-test</em></dt>
+<dd><p>Return the back depth test failure action of <var>stencil-test</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-stencil_002dtest_002don_002dpass_002dfront">Procedure: <strong>stencil-test-on-pass-front</strong> <em>stencil-test</em></dt>
+<dd><p>Return the front pass action of <var>stencil-test</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-stencil_002dtest_002don_002dpass_002dback">Procedure: <strong>stencil-test-on-pass-back</strong> <em>stencil-test</em></dt>
+<dd><p>Return the back pass action of <var>stencil-test</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-current_002dstencil_002dtest">Procedure: <strong>current-stencil-test</strong></dt>
+<dd><p>Return the current stencil test.
+</p></dd></dl>
+
+<dl>
+<dt id="index-g_003astencil_002dtest">Variable: <strong>g:stencil-test</strong></dt>
+<dd><p>Render state for stencil testing (see <a href="Rendering-Engine.html">Rendering Engine</a>.)
+</p></dd></dl>
+
+<span id="Multisample-Antialiasing"></span><h4 class="subsubsection">5.3.16.5 Multisample Antialiasing</h4>
+
+<p>Multisample antialiasing is a feature supported by many, but not all,
+graphics cards. It is a nice easy way to improve the final frame that
+the user sees, particularly in 3D scenes. The <code>(chickadee
+graphics multisample)</code> module provides access to the
+<code>g:multisample?</code> render state.
+</p>
+<dl>
+<dt id="index-current_002dmultisample">Procedure: <strong>current-multisample</strong></dt>
+<dd><p>Return <code>#t</code> if multisampling is enabled.
+</p></dd></dl>
+
+<dl>
+<dt id="index-g_003amultisample_003f">Variable: <strong>g:multisample?</strong></dt>
+<dd><p>Render state for multisampling (see <a href="Rendering-Engine.html">Rendering Engine</a>.)
+</p></dd></dl>
+
+<hr>
+<div class="header">
+<p>
+Next: <a href="Rendering-Engine.html" accesskey="n" rel="next">Rendering Engine</a>, Previous: <a href="Viewports.html" accesskey="p" rel="prev">Viewports</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+</div>
+
+
+
+</body>
+</html>
diff --git a/manuals/chickadee/Rendering-Engine.html b/manuals/chickadee/Rendering-Engine.html
index bdc2444..1c90022 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -32,8 +32,8 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="Index.html" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Graphics.html" rel="up" title="Graphics">
-<link href="Buffers.html" rel="next" title="Buffers">
-<link href="Viewports.html" rel="prev" title="Viewports">
+<link href="Audio.html" rel="next" title="Audio">
+<link href="Render-Settings.html" rel="prev" title="Render Settings">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
@@ -82,27 +82,60 @@ ul.no-bullet {list-style: none}
<body lang="en">
<span id="Rendering-Engine"></span><div class="header">
<p>
-Next: <a href="Buffers.html" accesskey="n" rel="next">Buffers</a>, Previous: <a href="Viewports.html" accesskey="p" rel="prev">Viewports</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+Previous: <a href="Render-Settings.html" accesskey="p" rel="prev">Render Settings</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Rendering-Engine-1"></span><h4 class="subsection">2.3.13 Rendering Engine</h4>
-
-<p>Chickadee defines rendering using a metaphor familiar to Scheme
-programmers: procedure application. A shader (see <a href="Shaders.html">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="Buffers.html">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>shader-apply</code> for calling shaders.
+<span id="Rendering-Engine-1"></span><h4 class="subsection">5.3.17 Rendering Engine</h4>
+
+<p>The <code>(chickadee graphics engine)</code> module provides a Scheme
+abstraction to the state of the GPU driver. When the Chickadee game
+loop launches, it takes care to initialize the engine. All draw calls
+and state changes happen within the context of this engine.
+</p>
+<p>Performing a custom draw call could look something like this:
</p>
-<p>Additionally, there is some dynamic state that effects how
-<code>shader-apply</code> will behave. Things like the current viewport,
-framebuffer, and blend mode are stored as dynamic state because it
-would be tedious to have to have to specify them each time
-<code>shader-apply</code> is called.
+<div class="example">
+<pre class="example">(with-graphics-state ((g:blend-mode blend:alpha)
+ (g:texture-0 my-texture))
+ (shader-apply my-shader #:foo 1))
+</pre></div>
+
+<span id="Render-States"></span><h4 class="subsubsection">5.3.17.1 Render States</h4>
+
+<p>Render states represent individual state values on the GPU. For
+example, the current shader. As a naming convention, Chickadee
+prefixes variables containing render states with <code>g:</code>. Render
+states can be manipulated using the <code>with-graphics-state</code> macro.
+</p>
+<dl>
+<dt id="index-with_002dgraphics_002dstate">Syntax: <strong>with-graphics-state</strong> <em>((name value) &hellip;) body &hellip;</em></dt>
+<dd><p>Evaluate <var>body</var> with render states defined by <var>name</var> changed
+to <var>value</var>. The render states are restored to their previous
+values afterwards.
+</p></dd></dl>
+
+<p>One additional piece of state that the rendering engine has, that is
+not part of the GPU state, is the current projection matrix:
</p>
-<p>The following procedures and syntax can be found in the
-<code>(chickadee graphics)</code> module.
+<dl>
+<dt id="index-current_002dprojection">Procedure: <strong>current-projection</strong></dt>
+<dd><p>Return the currently bound projection matrix (see <a href="Matrices.html">Matrices</a>).
+</p></dd></dl>
+
+<dl>
+<dt id="index-with_002dprojection">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</a>).
+</p></dd></dl>
+
+<span id="Rendering"></span><h4 class="subsubsection">5.3.17.2 Rendering</h4>
+
+<p>Chickadee likens a GPU draw call to a Scheme procedure call. A shader
+(see <a href="Shaders.html">Shaders</a>) is like a procedure for the GPU to apply. Shaders
+are passed arguments: The positional arguments are vertex array
+attributes (see <a href="Buffers.html">Buffers</a>) and the keyword arguments correspond to
+the shader&rsquo;s uniform variables. Scheme uses <code>apply</code> to call a
+procedure, so Chickadee uses <code>shader-apply</code> to call a shader.
</p>
<dl>
<dt id="index-shader_002dapply">Syntax: <strong>shader-apply</strong> <em>shader vertex-array [#:uniform-key uniform-value &hellip;]</em></dt>
@@ -131,75 +164,10 @@ particle effects described in <a href="Particles.html">Particles</a> use instanc
vertices.
</p></dd></dl>
-<dl>
-<dt id="index-current_002dviewport">Procedure: <strong>current-viewport</strong></dt>
-<dd><p>Return the currently bound viewport (see <a href="Viewports.html">Viewports</a>).
-</p></dd></dl>
-
-<dl>
-<dt id="index-current_002dframebuffer">Procedure: <strong>current-framebuffer</strong></dt>
-<dd><p>Return the currently bound framebuffer (see <a href="Framebuffers.html">Framebuffers</a>).
-</p></dd></dl>
-
-<dl>
-<dt id="index-current_002dblend_002dmode">Procedure: <strong>current-blend-mode</strong></dt>
-<dd><p>Return the currently bound blend mode (see <a href="Blending.html">Blending</a>).
-</p></dd></dl>
-
-<dl>
-<dt id="index-current_002ddepth_002dtest">Procedure: <strong>current-depth-test</strong></dt>
-<dd><p>Return <code>#t</code> if depth testing is currently enabled (see <a href="Blending.html">Blending</a>).
-</p></dd></dl>
-
-<dl>
-<dt id="index-current_002dtexture">Procedure: <strong>current-texture</strong></dt>
-<dd><p>Return the currently bound texture (see <a href="Textures.html">Textures</a>).
-</p></dd></dl>
-
-<dl>
-<dt id="index-current_002dprojection">Procedure: <strong>current-projection</strong></dt>
-<dd><p>Return the currently bound projection matrix (see <a href="Matrices.html">Matrices</a>).
-</p></dd></dl>
-
-<dl>
-<dt id="index-with_002dviewport">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</a>).
-</p></dd></dl>
-
-<dl>
-<dt id="index-with_002dframebuffer">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</a>).
-</p></dd></dl>
-
-<dl>
-<dt id="index-with_002dblend_002dmode">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.html">Blending</a>).
-</p></dd></dl>
-
-<dl>
-<dt id="index-with_002ddepth_002dtest">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.html">Blending</a>).
-</p></dd></dl>
-
-<dl>
-<dt id="index-with_002dtexture">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</a>).
-</p></dd></dl>
-
-<dl>
-<dt id="index-with_002dprojection">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</a>).
-</p></dd></dl>
-
<hr>
<div class="header">
<p>
-Next: <a href="Buffers.html" accesskey="n" rel="next">Buffers</a>, Previous: <a href="Viewports.html" accesskey="p" rel="prev">Viewports</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+Previous: <a href="Render-Settings.html" accesskey="p" rel="prev">Render Settings</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
diff --git a/manuals/chickadee/Requirements.html b/manuals/chickadee/Requirements.html
index 09f4b48..980a180 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -32,7 +32,7 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="Index.html" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Installation.html" rel="up" title="Installation">
-<link href="API-Reference.html" rel="next" title="API Reference">
+<link href="Getting-Started.html" rel="next" title="Getting Started">
<link href="Installation.html" rel="prev" title="Installation">
<style type="text/css">
<!--
@@ -90,18 +90,16 @@ Up: <a href="Installation.html" accesskey="u" rel="up">Installation</a> &nbsp; [
<p>Chickadee depends on the following packages:
</p>
<ul>
-<li> <a href="https://gnu.org/software/guile">GNU Guile</a>, version 2.1.0 or later;
+<li> <a href="https://gnu.org/software/guile">GNU Guile</a>, version 3.0.0 or later;
</li><li> <a href="https://gnu.org/software/guile-opengl">GNU guile-opengl</a>, version 0.1 or later.
-</li><li> <a href="https://dthompson.us/pages/software/guile-sdl2.html">guile-sdl2</a>, version 0.2.0 or later;
+</li><li> <a href="https://dthompson.us/pages/software/guile-sdl2.html">guile-sdl2</a>, version 0.7.0 or later;
+</li><li> libfreetype
+</li><li> libmpg123
</li><li> libopenal
+</li><li> libreadline
</li><li> libvorbisfile
-</li><li> libmpg123
</li></ul>
-<p>Additionally, Chickadee depends on being able to create an OpenGL 3.3
-context at runtime, which means that some older computers may not be
-able to run games written with Chickadee.
-</p>
diff --git a/manuals/chickadee/Scripting.html b/manuals/chickadee/Scripting.html
index a8a42c5..1a285c6 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -82,10 +82,10 @@ ul.no-bullet {list-style: none}
<body lang="en">
<span id="Scripting"></span><div class="header">
<p>
-Previous: <a href="Audio.html" accesskey="p" rel="prev">Audio</a>, Up: <a href="API-Reference.html" accesskey="u" rel="up">API Reference</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Data-Structures.html" accesskey="n" rel="next">Data Structures</a>, Previous: <a href="Audio.html" accesskey="p" rel="prev">Audio</a>, Up: <a href="API-Reference.html" accesskey="u" rel="up">API Reference</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Scripting-1"></span><h3 class="section">2.5 Scripting</h3>
+<span id="Scripting-1"></span><h3 class="section">5.5 Scripting</h3>
<p>Game logic is a web of asynchronous events that are carefully
coordinated to bring the game world to life. In order to make an
diff --git a/manuals/chickadee/Scripts.html b/manuals/chickadee/Scripts.html
index 86a6068..d9b0b32 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Tweening.html" accesskey="n" rel="next">Tweening</a>, Previous: <a href="Agendas.html" accesskey="p" rel="prev">Agendas</a>, Up: <a href="Scripting.html" accesskey="u" rel="up">Scripting</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Scripts-1"></span><h4 class="subsection">2.5.2 Scripts</h4>
+<span id="Scripts-1"></span><h4 class="subsection">5.5.2 Scripts</h4>
<p>Now that we can schedule tasks, let&rsquo;s take things to the next level.
It sure would be great if we could make procedures that described a
diff --git a/manuals/chickadee/Shaders.html b/manuals/chickadee/Shaders.html
index aed0f49..95c5186 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -32,7 +32,7 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="Index.html" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Graphics.html" rel="up" title="Graphics">
-<link href="Audio.html" rel="next" title="Audio">
+<link href="Framebuffers.html" rel="next" title="Framebuffers">
<link href="Buffers.html" rel="prev" title="Buffers">
<style type="text/css">
<!--
@@ -82,10 +82,10 @@ ul.no-bullet {list-style: none}
<body lang="en">
<span id="Shaders"></span><div class="header">
<p>
-Previous: <a href="Buffers.html" accesskey="p" rel="prev">Buffers</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Framebuffers.html" accesskey="n" rel="next">Framebuffers</a>, Previous: <a href="Buffers.html" accesskey="p" rel="prev">Buffers</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Shaders-1"></span><h4 class="subsection">2.3.15 Shaders</h4>
+<span id="Shaders-1"></span><h4 class="subsection">5.3.13 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
@@ -201,7 +201,7 @@ compile them into a GPU shader program.
<dt id="index-shader_002duniform_002dset_0021">Procedure: <strong>shader-uniform-set!</strong> <em>shader uniform value</em></dt>
</dl>
-<span id="Attributes"></span><h4 class="subsubsection">2.3.15.1 Attributes</h4>
+<span id="Attributes"></span><h4 class="subsubsection">5.3.13.1 Attributes</h4>
<dl>
<dt id="index-attribute_003f">Procedure: <strong>attribute?</strong> <em>obj</em></dt>
@@ -223,7 +223,7 @@ compile them into a GPU shader program.
<dd><p>Return the data type of <var>attribute</var>.
</p></dd></dl>
-<span id="Uniforms"></span><h4 class="subsubsection">2.3.15.2 Uniforms</h4>
+<span id="Uniforms"></span><h4 class="subsubsection">5.3.13.2 Uniforms</h4>
<dl>
<dt id="index-uniform_003f">Procedure: <strong>uniform?</strong> <em>obj</em></dt>
@@ -245,44 +245,49 @@ compile them into a GPU shader program.
<dd><p>Return the current value of <var>uniform</var>.
</p></dd></dl>
-<span id="User_002dDefined-Shader-Types"></span><h4 class="subsubsection">2.3.15.3 User-Defined Shader Types</h4>
+<span id="User_002dDefined-Shader-Types"></span><h4 class="subsubsection">5.3.13.3 User-Defined Shader Types</h4>
<p>The shader examples in this manual thus far have only shown uniforms
defined using primitive types. However, GLSL shaders support
user-defined compound structs, such as this one:
</p>
<div class="example">
-<pre class="verbatim">struct DirectionalLight {
- vec3 direction;
- vec3 ambient;
- vec3 diffuse;
- vec3 specular;
+<pre class="verbatim">struct Light {
+ bool enabled;
+ int type;
+ vec3 position;
+ vec3 direction;
+ vec4 color;
+ float intensity;
+ float cutOff;
};
-uniform DirectionalLight light;
+uniform Light light;
</pre></div>
<p>While <code>light</code> is declared as a single uniform in the shader code,
-OpenGL translates this into <em>four</em> uniforms in this case: One
-uniform each member of the <code>DirectionalLight</code> struct. This poses
-a problem for sending Scheme data to the GPU. How can compound Scheme
-data translate into compound uniform data on the GPU? The answer is
-with shader types. Shader types are a special kind of Guile struct
-that provide a one-to-one mapping between a Scheme data structure and
-a shader struct.
+OpenGL translates this into <em>seven</em> uniforms in this case: One
+uniform each member of the <code>Light</code> struct. This poses a problem
+for sending Scheme data to the GPU. How can compound Scheme data
+translate into compound uniform data on the GPU? The answer is with
+shader types. Shader types are a special kind of Guile struct that
+provide a one-to-one mapping between a Scheme data structure and a
+shader struct.
</p>
<p>Some example code will explain this concept best. Here is the Scheme
-equivalent of the <code>DirectionalLight</code> struct:
+equivalent of the <code>Light</code> struct:
</p>
<div class="example">
-<pre class="example">(define-shader-type &lt;directional-light&gt;
- make-directional-light
- directional-light?
- (float-vec3 direction directional-light-direction)
- (float-vec3 ambient directional-light-ambient)
- (float-vec3 diffuse directional-light-diffuse)
- (float-vec3 specular directional-light-specular)
- (float shininess directional-light-shininess))
+<pre class="example">(define-shader-type &lt;light&gt;
+ make-light
+ light?
+ (bool enabled light-enabled?)
+ (int type light-type)
+ (float-vec3 position light-position)
+ (float-vec3 direction light-direction)
+ (float-vec4 color light-color)
+ (float intensity light-intensity)
+ (float cut-off light-cut-off))
</pre></div>
<p>The macro <code>define-shader-type</code> closely resembles the familiar
@@ -332,12 +337,17 @@ remains to be seen if this model is robust enough for all use-cases.
<dl>
<dt id="index-float_002dvec4">Variable: <strong>float-vec4</strong></dt>
-<dd><p>A color.
+<dd><p>A color (see <a href="Colors.html">Colors</a>) or rectangle (see <a href="Rectangles.html">Rectangles</a>.)
+</p></dd></dl>
+
+<dl>
+<dt id="index-mat3">Variable: <strong>mat3</strong></dt>
+<dd><p>A 3x3 matrix (see <a href="Matrices.html">Matrices</a>.)
</p></dd></dl>
<dl>
<dt id="index-mat4">Variable: <strong>mat4</strong></dt>
-<dd><p>A matrix (see <a href="Matrices.html">Matrices</a>.)
+<dd><p>A 4x4 matrix (see <a href="Matrices.html">Matrices</a>.)
</p></dd></dl>
<dl>
@@ -346,6 +356,11 @@ remains to be seen if this model is robust enough for all use-cases.
</p></dd></dl>
<dl>
+<dt id="index-sampler_002dcube">Variable: <strong>sampler-cube</strong></dt>
+<dd><p>A cube map (see <a href="Textures.html">Textures</a>.)
+</p></dd></dl>
+
+<dl>
<dt id="index-local_002dfield">Variable: <strong>local-field</strong></dt>
<dd><p>A special type that means that the data is for the client-side
(Scheme-side) only and should not be sent to the GPU. Any object may
@@ -381,7 +396,7 @@ optional.
<hr>
<div class="header">
<p>
-Previous: <a href="Buffers.html" accesskey="p" rel="prev">Buffers</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Framebuffers.html" accesskey="n" rel="next">Framebuffers</a>, Previous: <a href="Buffers.html" accesskey="p" rel="prev">Buffers</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
diff --git a/manuals/chickadee/9_002dPatches.html b/manuals/chickadee/Skyboxes.html
index 0f6dd96..483f22f 100644
--- a/manuals/chickadee/9_002dPatches.html
+++ b/manuals/chickadee/Skyboxes.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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -21,10 +21,10 @@ http://www.texinfo.org/ (GNU Texinfo).
<!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>9-Patches (The Chickadee Game Toolkit)</title>
+<title>Skyboxes (The Chickadee Game Toolkit)</title>
-<meta name="description" content="9-Patches (The Chickadee Game Toolkit)">
-<meta name="keywords" content="9-Patches (The Chickadee Game Toolkit)">
+<meta name="description" content="Skyboxes (The Chickadee Game Toolkit)">
+<meta name="keywords" content="Skyboxes (The Chickadee Game Toolkit)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
@@ -32,8 +32,8 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="Index.html" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Graphics.html" rel="up" title="Graphics">
-<link href="Fonts.html" rel="next" title="Fonts">
-<link href="Sprites.html" rel="prev" title="Sprites">
+<link href="Meshes.html" rel="next" title="Meshes">
+<link href="Lights.html" rel="prev" title="Lights">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
@@ -80,48 +80,36 @@ ul.no-bullet {list-style: none}
</head>
<body lang="en">
-<span id="g_t9_002dPatches"></span><div class="header">
+<span id="Skyboxes"></span><div class="header">
<p>
-Next: <a href="Fonts.html" accesskey="n" rel="next">Fonts</a>, Previous: <a href="Sprites.html" accesskey="p" rel="prev">Sprites</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Meshes.html" accesskey="n" rel="next">Meshes</a>, Previous: <a href="Lights.html" accesskey="p" rel="prev">Lights</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="g_t9_002dPatches-1"></span><h4 class="subsection">2.3.4 9-Patches</h4>
+<span id="Skyboxes-1"></span><h4 class="subsection">5.3.10 Skyboxes</h4>
-<p>A 9-patch is a method of rendering a texture so that it can be
-stretched to cover an area of any size without becoming distorted.
-This is achieved by dividing up the sprite into nine regions:
-</p>
-<ul>
-<li> the center, which can be stretched or tiled horizontally and vertically
-</li><li> the four corners, which are never stretched or tiled
-</li><li> the left and right sides, which can be stretched or tiled vertically
-</li><li> the top and bottom sides, which can be stretched or tiled horizontally
-</li></ul>
-
-<p>The most common application of this technique is for graphical user
-interface widgets like buttons and dialog boxes which are often
-dynamically resizable. By using a 9-patch, they can be rendered at
-any size without scaling artifacts.
+<p>Skyboxes are used as backgrounds in 3D environments, as well as a
+source of ambient lighting data when rendering 3D objects. The
+<code>(chickadee graphics skybox)</code> module provides an API for making
+skyboxes.
</p>
<dl>
-<dt id="index-draw_002d9_002dpatch">Procedure: <strong>draw-9-patch</strong> <em>texture rect [#:margin 0] [#:top-margin margin] [#:bottom-margin margin] [#:left-margin margin] [#:right-margin margin] [#:mode stretch] [#:origin] [#:scale] [#:rotation] [#:blend-mode] [#:tint white]</em></dt>
-<dd>
-<p>Draw a 9-patch over the area <var>rect</var> using <var>texture</var> whose
-stretchable/tileable patches are defined by the given margin
-measurements. The corners are never stretched/tiled, the left and
-right edges will be stretched/tiled vertically, the top and bottom
-edges may be stretched/tiled horizontally, and the center may be
-stretched/tiled in both directions.
-</p>
-<p><var>mode</var> may be either <code>stretch</code> (the default) or <code>tile</code>.
-</p>
-<p><var>margin</var> specifies the margin size for all sides of the 9-patch.
-To make margins of differing sizes, the <var>top-margin</var>,
-<var>bottom-margin</var>, <var>left-margin</var>, and <var>right-margin</var>
-arguments may be used.
-</p>
-<p>Refer to <code>draw-sprite</code> (see <a href="Sprites.html">Sprites</a>) for information about
-the other arguments as they are the same.
+<dt id="index-make_002dskybox">Procedure: <strong>make-skybox</strong> <em>cube-map</em></dt>
+<dd><p>Return a new skybox that uses <var>cube-map</var> for a texture.
+</p></dd></dl>
+
+<dl>
+<dt id="index-skybox_003f">Procedure: <strong>skybox?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a skybox.
+</p></dd></dl>
+
+<dl>
+<dt id="index-skybox_002dcube_002dmap">Procedure: <strong>skybox-cube-map</strong> <em>sky-box</em></dt>
+<dd><p>Return the cube map of <var>skybox</var>.
+</p></dd></dl>
+
+<dl>
+<dt id="index-draw_002dskybox">Procedure: <strong>draw-skybox</strong> <em>skybox view</em></dt>
+<dd><p>Render <var>skybox</var> to the screen using the view matrix <var>view</var>.
</p></dd></dl>
diff --git a/manuals/chickadee/Sources.html b/manuals/chickadee/Sources.html
index faf1c1b..c1ca1f3 100644
--- a/manuals/chickadee/Sources.html
+++ b/manuals/chickadee/Sources.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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="The-Listener.html" accesskey="n" rel="next">The Listener</a>, Previous: <a href="Audio-Files.html" accesskey="p" rel="prev">Audio Files</a>, Up: <a href="Audio.html" accesskey="u" rel="up">Audio</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Sources-1"></span><h4 class="subsection">2.4.2 Sources</h4>
+<span id="Sources-1"></span><h4 class="subsection">5.4.2 Sources</h4>
<p>While the <code>audio-play</code> procedure provides a quick and convenient
way to play audio, it has some limitations. What if the audio is a
diff --git a/manuals/chickadee/Sprites.html b/manuals/chickadee/Sprites.html
index 93a0967..2575e87 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -32,7 +32,7 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="Index.html" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Graphics.html" rel="up" title="Graphics">
-<link href="9_002dPatches.html" rel="next" title="9-Patches">
+<link href="Fonts.html" rel="next" title="Fonts">
<link href="Textures.html" rel="prev" title="Textures">
<style type="text/css">
<!--
@@ -82,10 +82,10 @@ ul.no-bullet {list-style: none}
<body lang="en">
<span id="Sprites"></span><div class="header">
<p>
-Next: <a href="9_002dPatches.html" accesskey="n" rel="next">9-Patches</a>, Previous: <a href="Textures.html" accesskey="p" rel="prev">Textures</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Fonts.html" accesskey="n" rel="next">Fonts</a>, Previous: <a href="Textures.html" accesskey="p" rel="prev">Textures</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Sprites-1"></span><h4 class="subsection">2.3.3 Sprites</h4>
+<span id="Sprites-1"></span><h4 class="subsection">5.3.3 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
@@ -118,6 +118,8 @@ changed by specifying <var>blend-mode</var>.
arbitrary section of the screen, specify <var>rect</var>.
</p></dd></dl>
+<span id="Sprite-Batches"></span><h4 class="subsubsection">5.3.3.1 Sprite Batches</h4>
+
<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
@@ -127,12 +129,12 @@ 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</a>) to access the sub-images within.
+large 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</a>) to access
+the sub-images within.
</p>
<dl>
<dt id="index-make_002dsprite_002dbatch">Procedure: <strong>make-sprite-batch</strong> <em>texture [#:capacity 256]</em></dt>
@@ -178,10 +180,50 @@ parent is the batch texture may be specified as <var>texture-region</var>.
default.
</p></dd></dl>
+<span id="g_t9_002dPatches"></span><h4 class="subsubsection">5.3.3.2 9-Patches</h4>
+
+<p>A 9-patch is a method of rendering a texture so that it can be
+stretched to cover an area of any size without becoming distorted.
+This is achieved by dividing up the sprite into nine regions:
+</p>
+<ul>
+<li> the center, which can be stretched or tiled horizontally and vertically
+</li><li> the four corners, which are never stretched or tiled
+</li><li> the left and right sides, which can be stretched or tiled vertically
+</li><li> the top and bottom sides, which can be stretched or tiled horizontally
+</li></ul>
+
+<p>The most common application of this technique is for graphical user
+interface widgets like buttons and dialog boxes which are often
+dynamically resizable. By using a 9-patch, they can be rendered at
+any size without scaling artifacts. The <code>(chickadee graphics
+9-patch)</code> module provides this functionality.
+</p>
+<dl>
+<dt id="index-draw_002d9_002dpatch">Procedure: <strong>draw-9-patch</strong> <em>texture rect [#:margin 0] [#:top-margin margin] [#:bottom-margin margin] [#:left-margin margin] [#:right-margin margin] [#:mode stretch] [#:origin] [#:scale] [#:rotation] [#:blend-mode] [#:tint white]</em></dt>
+<dd>
+<p>Draw a 9-patch over the area <var>rect</var> using <var>texture</var> whose
+stretchable/tileable patches are defined by the given margin
+measurements. The corners are never stretched/tiled, the left and
+right edges will be stretched/tiled vertically, the top and bottom
+edges may be stretched/tiled horizontally, and the center may be
+stretched/tiled in both directions.
+</p>
+<p><var>mode</var> may be either <code>stretch</code> (the default) or <code>tile</code>.
+</p>
+<p><var>margin</var> specifies the margin size for all sides of the 9-patch.
+To make margins of differing sizes, the <var>top-margin</var>,
+<var>bottom-margin</var>, <var>left-margin</var>, and <var>right-margin</var>
+arguments may be used.
+</p>
+<p>Refer to <code>draw-sprite</code> for information about the other arguments
+as they are the same.
+</p></dd></dl>
+
<hr>
<div class="header">
<p>
-Next: <a href="9_002dPatches.html" accesskey="n" rel="next">9-Patches</a>, Previous: <a href="Textures.html" accesskey="p" rel="prev">Textures</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Fonts.html" accesskey="n" rel="next">Fonts</a>, Previous: <a href="Textures.html" accesskey="p" rel="prev">Textures</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
diff --git a/manuals/chickadee/Textures.html b/manuals/chickadee/Textures.html
index 48a580e..80a30db 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,9 +85,11 @@ ul.no-bullet {list-style: none}
Next: <a href="Sprites.html" accesskey="n" rel="next">Sprites</a>, Previous: <a href="Colors.html" accesskey="p" rel="prev">Colors</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Textures-1"></span><h4 class="subsection">2.3.2 Textures</h4>
+<span id="Textures-1"></span><h4 class="subsection">5.3.2 Textures</h4>
-<p>Textures are essentially images: a 2D grid of color values. The
+<p>Textures are essentially images: a 2D grid of color values. However,
+this is a great simplification. Textures can be used to store any
+kind of data that can be encoded into color channels. The
<code>(chickadee graphics texture)</code> module provides an interface for
working with texture objects.
</p>
@@ -102,8 +104,8 @@ respectively. Possible values are <code>nearest</code> and <code>linear</code>.
</p>
<p><var>wrap-s</var> and <var>wrap-t</var> describe how to interpret texture
coordinates that are greater than <code>1.0</code>. Possible values are
-<code>repeat</code>, <code>clamp</code>, <code>clamp-to-border</code>, and
-<code>clamp-to-edge</code>.
+<code>repeat</code>, <code>mirrored-repeat</code>, <code>clamp</code>,
+<code>clamp-to-border</code>, and <code>clamp-to-edge</code>.
</p>
<p>For color-keyed images (images where a specific color should be made
transparent), specify the appropriate <var>transparent-color</var>.
@@ -169,6 +171,58 @@ axis for <var>texture</var>.
<dd><p>Return the height of <var>texture</var> in pixels.
</p></dd></dl>
+<dl>
+<dt id="index-current_002dtexture_002d0">Procedure: <strong>current-texture-0</strong></dt>
+<dd><p>Return the current texture associated with texture unit 0 on the GPU.
+</p></dd></dl>
+
+<dl>
+<dt id="index-current_002dtexture_002d1">Procedure: <strong>current-texture-1</strong></dt>
+<dd><p>Return the current texture associated with texture unit 1 on the GPU.
+</p></dd></dl>
+
+<dl>
+<dt id="index-current_002dtexture_002d2">Procedure: <strong>current-texture-2</strong></dt>
+<dd><p>Return the current texture associated with texture unit 2 on the GPU.
+</p></dd></dl>
+
+<dl>
+<dt id="index-current_002dtexture_002d3">Procedure: <strong>current-texture-3</strong></dt>
+<dd><p>Return the current texture associated with texture unit 3 on the GPU.
+</p></dd></dl>
+
+<dl>
+<dt id="index-current_002dtexture_002d4">Procedure: <strong>current-texture-4</strong></dt>
+<dd><p>Return the current texture associated with texture unit 4 on the GPU.
+</p></dd></dl>
+
+<dl>
+<dt id="index-g_003atexture_002d0">Variable: <strong>g:texture-0</strong></dt>
+<dd><p>Render state for texture unit 0 (see <a href="Rendering-Engine.html">Rendering Engine</a>.)
+</p></dd></dl>
+
+<dl>
+<dt id="index-g_003atexture_002d1">Variable: <strong>g:texture-1</strong></dt>
+<dd><p>Render state for texture unit 1 (see <a href="Rendering-Engine.html">Rendering Engine</a>.)
+</p></dd></dl>
+
+<dl>
+<dt id="index-g_003atexture_002d2">Variable: <strong>g:texture-2</strong></dt>
+<dd><p>Render state for texture unit 2 (see <a href="Rendering-Engine.html">Rendering Engine</a>.)
+</p></dd></dl>
+
+<dl>
+<dt id="index-g_003atexture_002d3">Variable: <strong>g:texture-3</strong></dt>
+<dd><p>Render state for texture unit 3 (see <a href="Rendering-Engine.html">Rendering Engine</a>.)
+</p></dd></dl>
+
+<dl>
+<dt id="index-g_003atexture_002d4">Variable: <strong>g:texture-4</strong></dt>
+<dd><p>Render state for texture unit 4 (see <a href="Rendering-Engine.html">Rendering Engine</a>.)
+</p></dd></dl>
+
+<span id="Tile-Atlases"></span><h4 class="subsubsection">5.3.2.1 Tile Atlases</h4>
+
<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
@@ -212,6 +266,25 @@ file <var>file-name</var> into a grid of <var>tile-width</var> by
<dd><p>Return the texture region in <var>atlas</var> at <var>index</var>.
</p></dd></dl>
+<span id="Cube-Maps"></span><h4 class="subsubsection">5.3.2.2 Cube Maps</h4>
+
+<p>A cube map is a special type of texture composed of 6 images that can
+be thought of as forming the 6 faces of a cube. See <a href="Skyboxes.html">Skyboxes</a> for a
+practical use of cube maps.
+</p>
+<dl>
+<dt id="index-load_002dcube_002dmap">Procedure: <strong>load-cube-map</strong> <em>#:right #:left #:top #:bottom #:front #:back [#:min-filter linear-mipmap-linear] [#:mag-filter linear]</em></dt>
+<dd>
+<p>Return a new cube map that uses the image data in the files
+<var>right</var>, <var>left</var>, <var>top</var>, <var>bottom</var>, <var>front</var>, and
+<var>back</var> for the 6 faces of the cube.
+</p></dd></dl>
+
+<dl>
+<dt id="index-cube_002dmap_003f">Procedure: <strong>cube-map?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> if <var>obj</var> is a cube map.
+</p></dd></dl>
+
<hr>
<div class="header">
<p>
diff --git a/manuals/chickadee/The-Environment.html b/manuals/chickadee/The-Environment.html
index f60e2ff..db4e415 100644
--- a/manuals/chickadee/The-Environment.html
+++ b/manuals/chickadee/The-Environment.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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Previous: <a href="The-Listener.html" accesskey="p" rel="prev">The Listener</a>, Up: <a href="Audio.html" accesskey="u" rel="up">Audio</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="The-Environment-1"></span><h4 class="subsection">2.4.4 The Environment</h4>
+<span id="The-Environment-1"></span><h4 class="subsection">5.4.4 The Environment</h4>
<p>The environment defines global parameters that govern how sound is
processed within the 3D modeling space.
diff --git a/manuals/chickadee/The-Game-Loop.html b/manuals/chickadee/The-Game-Loop.html
index 1cb6e48..d18ad0d 100644
--- a/manuals/chickadee/The-Game-Loop.html
+++ b/manuals/chickadee/The-Game-Loop.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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Input-Devices.html" accesskey="n" rel="next">Input Devices</a>, Up: <a href="Kernel.html" accesskey="u" rel="up">Kernel</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="The-Game-Loop-1"></span><h4 class="subsection">2.1.1 The Game Loop</h4>
+<span id="The-Game-Loop-1"></span><h4 class="subsection">5.1.1 The Game Loop</h4>
<p>At the very core of Chickadee there is an event loop. This loop, or
&ldquo;kernel&rdquo;, is responsible for ensuring that the game is updated at
@@ -98,6 +98,9 @@ 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.
</p>
+<p>If you are using <code>chickadee play</code> to launch your game, then
+calling <code>run-game</code> is already taken care of for you.
+</p>
<dl>
<dt id="index-run_002dgame">Procedure: <strong>run-game</strong> <em>[#:window-title &quot;Chickadee!&quot;] [#:window-width 640] [#:window-height 480] [#:window-fullscreen? <code>#f</code>] [#:window-resizable? <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>
@@ -198,6 +201,16 @@ mouse was moved.
</li></ol>
+</li><li> <var>mouse-wheel</var>: Called with two arguments when the mouse wheel is
+scrolled:
+
+<ol>
+<li> <var>x</var>: The scroll amount along the X axis.
+
+</li><li> <var>y</var>: The scroll amount along the Y axis.
+
+</li></ol>
+
</li><li> <var>controller-add</var>: Called with a single argument, an SDL game
controller object, when a game controller is connected.
@@ -304,7 +317,7 @@ terminal rendering engine, but the developer could write one without
having to write their own core game loop.
</p>
<dl>
-<dt id="index-run_002dgame_002a">Procedure: <strong>run-game*</strong> <em>[#:update] [#:render] [#:time] [#:error] [#:update-hz 60]</em></dt>
+<dt id="index-run_002dgame_002a">Procedure: <strong>run-game*</strong> <em>[#:init] [#:update] [#:render] [#:time] [#:error] [#:update-hz 60]</em></dt>
<dd>
<p>Start the game loop. This procedure will not return until
<code>abort-game</code> is called.
@@ -313,7 +326,9 @@ having to write their own core game loop.
to operate:
</p>
<ul>
-<li> <var>update</var>: Called <var>update-hz</var> times per second to advance the
+<li> <var>init</var>: Called just before game loop is started. Use it to
+perform game initialization.
+</li><li> <var>update</var>: Called <var>update-hz</var> times per second to advance the
game simulation. This procedure is called with a single argument: The
amount of time that has passed since the last update, in milliseconds.
</li><li> <var>render</var>: Called each iteration of the loop to render the game to
diff --git a/manuals/chickadee/The-Listener.html b/manuals/chickadee/The-Listener.html
index 3f44ce9..43e0f57 100644
--- a/manuals/chickadee/The-Listener.html
+++ b/manuals/chickadee/The-Listener.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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="The-Environment.html" accesskey="n" rel="next">The Environment</a>, Previous: <a href="Sources.html" accesskey="p" rel="prev">Sources</a>, Up: <a href="Audio.html" accesskey="u" rel="up">Audio</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="The-Listener-1"></span><h4 class="subsection">2.4.3 The Listener</h4>
+<span id="The-Listener-1"></span><h4 class="subsection">5.4.3 The Listener</h4>
<p>The listener is a collection of global state that represents the
player within the 3D sound model. For games that do not need 3D sound
diff --git a/manuals/chickadee/Tile-Maps.html b/manuals/chickadee/Tile-Maps.html
index 64bb890..662d69f 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -32,7 +32,7 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="Index.html" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Graphics.html" rel="up" title="Graphics">
-<link href="3D-Models.html" rel="next" title="3D Models">
+<link href="Models.html" rel="next" title="Models">
<link href="Particles.html" rel="prev" title="Particles">
<style type="text/css">
<!--
@@ -82,10 +82,10 @@ ul.no-bullet {list-style: none}
<body lang="en">
<span id="Tile-Maps"></span><div class="header">
<p>
-Next: <a href="3D-Models.html" accesskey="n" rel="next">3D Models</a>, Previous: <a href="Particles.html" accesskey="p" rel="prev">Particles</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Models.html" accesskey="n" rel="next">Models</a>, Previous: <a href="Particles.html" accesskey="p" rel="prev">Particles</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Tile-Maps-1"></span><h4 class="subsection">2.3.8 Tile Maps</h4>
+<span id="Tile-Maps-1"></span><h4 class="subsection">5.3.7 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
@@ -94,7 +94,7 @@ support for loading and rendering Tiled maps in the <code>(chickadee
graphics tile-map)</code> module.
</p>
<dl>
-<dt id="index-load_002dtile_002dmap">Procedure: <strong>load-tile-map</strong> <em>file-name</em></dt>
+<dt id="index-load_002dtile_002dmap">Procedure: <strong>load-tile-map</strong> <em>file-name [#:chunk-size]</em></dt>
<dd><p>Load the Tiled formatted map in <var>file-name</var> and return a new tile
map object.
</p></dd></dl>
@@ -151,7 +151,7 @@ coordinates.
</p></dd></dl>
<dl>
-<dt id="index-draw_002dtile_002dmap">Procedure: <strong>draw-tile-map</strong> <em>tile-map [#:layers] [#:camera] [#:origin] [#:position] [#:scale] [#:rotation] [#:blend-mode] [#:tint] [#:time] [#:chunk-size]</em></dt>
+<dt id="index-draw_002dtile_002dmap">Procedure: <strong>draw-tile-map</strong> <em>tile-map [#:layers] [#:camera] [#:origin] [#:position] [#:scale] [#:rotation] [#:blend-mode] [#:tint] [#:time]</em></dt>
<dd>
<p>Draw the layers of <var>tile-map</var> as viewed from <var>camera</var>, a 2D
vector offset. By default, all layers are drawn. To draw a subset of
@@ -357,7 +357,7 @@ keyword argument.
<hr>
<div class="header">
<p>
-Next: <a href="3D-Models.html" accesskey="n" rel="next">3D Models</a>, Previous: <a href="Particles.html" accesskey="p" rel="prev">Particles</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Models.html" accesskey="n" rel="next">Models</a>, Previous: <a href="Particles.html" accesskey="p" rel="prev">Particles</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
diff --git a/manuals/chickadee/Tweening.html b/manuals/chickadee/Tweening.html
index ddc066b..a72886b 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Channels.html" accesskey="n" rel="next">Channels</a>, Previous: <a href="Scripts.html" accesskey="p" rel="prev">Scripts</a>, Up: <a href="Scripting.html" accesskey="u" rel="up">Scripting</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Tweening-1"></span><h4 class="subsection">2.5.3 Tweening</h4>
+<span id="Tweening-1"></span><h4 class="subsection">5.5.3 Tweening</h4>
<p>Tweening is the process of transitioning something from an initial
state to a final state over a pre-determined period of time. In other
diff --git a/manuals/chickadee/Vector-Paths.html b/manuals/chickadee/Vector-Paths.html
index 6f8987b..68af3d8 100644
--- a/manuals/chickadee/Vector-Paths.html
+++ b/manuals/chickadee/Vector-Paths.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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Particles.html" accesskey="n" rel="next">Particles</a>, Previous: <a href="Fonts.html" accesskey="p" rel="prev">Fonts</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Vector-Paths-1"></span><h4 class="subsection">2.3.6 Vector Paths</h4>
+<span id="Vector-Paths-1"></span><h4 class="subsection">5.3.5 Vector Paths</h4>
<p>The <code>(chickadee graphics path)</code> module can be used to draw lines,
curves, circles, rectangles, and more in a scalable, resolution
@@ -95,7 +95,7 @@ HTML5 Canvas API should find lots of similarities.
</p>
<p><em>This API is considered to be experimental and may change
substantially in future releases of Chickadee. There are many missing
-features such as gradient fills and dashed strokes.</em>
+features.</em>
</p>
<p>The first step to rendering vector graphics is to create a
<em>path</em>: A series of commands that can be thought of as moving a
@@ -149,6 +149,14 @@ points: <var>control1</var> and <var>control2</var>.
<var>ry</var> (set both to the same value for a circular arc.)
</p></dd></dl>
+<dl>
+<dt id="index-arc_002dto">Procedure: <strong>arc-to</strong> <em>c1 c2 radius</em></dt>
+<dd><p>Draw a circular arc with radius <var>radius</var> that is tangential to the
+line segment formed by the current pen position and <var>c1</var>, as well
+as the line segment formed by <var>c1</var> and <var>c2</var>. The result is a
+smooth corner.
+</p></dd></dl>
+
<p>Included are some helpful procedures for generating common types of
paths:
</p>
@@ -163,6 +171,15 @@ paths:
</p></dd></dl>
<dl>
+<dt id="index-bezier_002dpath-1">Procedure: <strong>bezier-path</strong> <em>p1 c1 c2 p2 . points</em></dt>
+<dd><p>Return a path that draws a series of bezier points starting at
+<var>p1</var>, moving to <var>p2</var> using control points <var>c1</var> and
+<var>c2</var>, and proceeding to draw additional bezier curves as defined
+by <var>points</var>. Each additional curve requires 3 additional
+arguments: two control points and and an ending point.
+</p></dd></dl>
+
+<dl>
<dt id="index-rectangle">Procedure: <strong>rectangle</strong> <em>bottom-left width height</em></dt>
<dd><p>Return a path that draws a rectangle whose bottom-left corner is at
<var>bottom-left</var> and whose size is defined by <var>width</var> and
@@ -226,8 +243,68 @@ combined together to form arbitrarily complex pictures.
</p></dd></dl>
<dl>
+<dt id="index-with_002dstyle">Syntax: <strong>with-style</strong> <em>((style-name value) ...) painter</em></dt>
+<dd><p>Apply all the given style settings to <var>painter</var>.
+</p>
+<p>Possible style attributes are:
+</p>
+<ul>
+<li> <code>blend-mode</code>
+</li><li> <code>fill-color</code>
+</li><li> <code>stroke-color</code>
+</li><li> <code>stroke-width</code>
+</li><li> <code>stroke-feather</code>
+</li><li> <code>stroke-cap</code>
+</li></ul>
+
+<div class="example">
+<pre class="example">(with-style ((stroke-color green)
+ (stroke-width 4.0))
+ (stroke (circle (vec2 100.0 100.0) 50.0)))
+</pre></div>
+
+</dd></dl>
+
+<p>Fill colors may be either solid colors (see <a href="Colors.html">Colors</a>) or gradients.
+For gradient fills, there are two styles: linear or radial.
+</p>
+<dl>
+<dt id="index-linear_002dgradient">Procedure: <strong>linear-gradient</strong> <em>[#:origin (vec2 0 0)] [#:start-color white] [#:end-color black] [#:rotation 0] [#:offset 0] [#:length 100]</em></dt>
+<dd>
+<p>Return a new linear gradient that transitions from <var>start-color</var>
+on the left to <var>end-color</var> on the right over <var>length</var> pixels.
+<var>offset</var> may be used to push the gradient start point to the
+right, creating a solid block of <var>start-color</var> on the right hand
+side of the painter. The line&rsquo;s direction may be changed by
+specifying a <var>rotation</var> value. The starting point for the
+gradient is determined by <var>origin</var> and defaults to the lower left
+corner of the painter&rsquo;s bounding box.
+</p></dd></dl>
+
+<dl>
+<dt id="index-radial_002dgradient">Procedure: <strong>radial-gradient</strong> <em>[#:origin (vec2 0 0)] [#:start-color white] [#:end-color black] [#:radius 50.0] [#:radius-x] [#:radius-y] [#:rotation 0] [#:offset 0]</em></dt>
+<dd>
+<p>Return a new radial gradient that transitions from <var>start-color</var>
+at the point <var>origin</var> to <var>end-color</var> at <var>radius</var> pixels
+away. <var>offset</var> specifies the distance from the origin where
+<var>start-color</var> begins to transition. The default is to immediately
+start transitioning. The default shape of this type of gradient is a
+circle, but it can also be made elliptical by specifying different
+<var>radius-x</var> and <var>radius-y</var> values. When the gradient shape is
+elliptical, <var>rotation</var> can be used to rotate it.
+</p></dd></dl>
+
+<dl>
+<dt id="index-gradient_003f">Procedure: <strong>gradient?</strong> <em>obj</em></dt>
+<dd><p>Return <code>#t</code> when <var>obj</var> is a gradient object.
+</p></dd></dl>
+
+<p>Painters can also be transformed and combined to form new painters.
+</p>
+<dl>
<dt id="index-transform">Procedure: <strong>transform</strong> <em>matrix painter</em></dt>
-<dd><p>Apply <var>matrix</var>, a 3x3 transformation matrix, to <var>painter</var>.
+<dd><p>Apply <var>matrix</var>, a 3x3 transformation matrix (see <a href="Matrices.html">Matrices</a>), to
+<var>painter</var>.
</p></dd></dl>
<dl>
@@ -246,6 +323,16 @@ combined together to form arbitrarily complex pictures.
</p></dd></dl>
<dl>
+<dt id="index-horizontal_002dflip">Procedure: <strong>horizontal-flip</strong> <em>painter</em></dt>
+<dd><p>Flip <var>painter</var> horizontally.
+</p></dd></dl>
+
+<dl>
+<dt id="index-vertical_002dflip">Procedure: <strong>vertical-flip</strong> <em>painter</em></dt>
+<dd><p>Flip <var>painter</var> vertically.
+</p></dd></dl>
+
+<dl>
<dt id="index-pad">Procedure: <strong>pad</strong> <em>pad-x pad-y painter</em></dt>
<dd><p>Add <var>pad-x</var> and <var>pad-y</var> amount of empty space around
<var>painter</var>.
@@ -256,6 +343,10 @@ combined together to form arbitrarily complex pictures.
<dd><p>Stack <var>painters</var> on top of each other.
</p></dd></dl>
+<p>The next batch of procedures is taken straight out of the picture
+language described in
+<a href="https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-15.html#%_sec_2.2.4">Structure and Interpretation of Computer Programs</a> section 2.2.4.
+</p>
<dl>
<dt id="index-beside">Procedure: <strong>beside</strong> <em>. painters</em></dt>
<dd><p>Place <var>painters</var> next to each other in a row.
@@ -267,28 +358,60 @@ combined together to form arbitrarily complex pictures.
</p></dd></dl>
<dl>
-<dt id="index-with_002dstyle">Syntax: <strong>with-style</strong> <em>((style-name value) ...) painter</em></dt>
-<dd><p>Apply all the given style settings to <var>painter</var>.
+<dt id="index-right_002dsplit">Procedure: <strong>right-split</strong> <em>painter n</em></dt>
+<dd><p>Subdivide <var>painter</var> into 3 sections, recursively, like so:
</p>
-<p>Possible style attributes are:
-</p>
-<ul>
-<li> blend-mode
-</li><li> fill-color
-</li><li> stroke-color
-</li><li> stroke-width
-</li><li> stroke-feather
-</li><li> stroke-cap
-</li></ul>
+<pre class="verbatim">*----------------*----------------*
+| | |
+| | right-split |
+| | n - 1 |
+| | |
+| painter *----------------*
+| | |
+| | right-split |
+| | n - 1 |
+| | |
+*----------------*----------------*
+</pre>
+</dd></dl>
-<div class="example">
-<pre class="example">(with-style ((stroke-color green)
- (stroke-width 4.0))
- (stroke (circle (vec2 100.0 100.0) 50.0)))
-</pre></div>
+<dl>
+<dt id="index-up_002dsplit">Procedure: <strong>up-split</strong> <em>painter n</em></dt>
+<dd><p>Subdivide <var>painter</var> into 3 sections, recursively, like so:
+</p>
+<pre class="verbatim">*----------------*----------------*
+| | |
+| up-split | up-split |
+| n - 1 | n - 1 |
+| | |
+*----------------*----------------*
+| |
+| painter |
+| |
+| |
+*----------------*----------------*
+</pre>
+</dd></dl>
+<dl>
+<dt id="index-corner_002dsplit">Procedure: <strong>corner-split</strong> <em>painter n</em></dt>
+<dd><p>Subdivide <var>painter</var> into 4 sections, recursively, like so:
+</p>
+<pre class="verbatim">*----------------*----------------*
+| | |
+| up-split | corner-split |
+| n - 1 | n - 1 |
+| | |
+*----------------*----------------*
+| | |
+| painter | right-split |
+| | n - 1 |
+| | |
+*----------------*----------------*
+</pre>
</dd></dl>
+
<p>As in real life, a painter cannot paint anything without a canvas.
Once a painter has been associated with a canvas, it can finally be
rendered to the screen.
diff --git a/manuals/chickadee/Vectors.html b/manuals/chickadee/Vectors.html
index ff07e2f..d11bfc6 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -85,7 +85,7 @@ ul.no-bullet {list-style: none}
Next: <a href="Rectangles.html" accesskey="n" rel="next">Rectangles</a>, Previous: <a href="Basics.html" accesskey="p" rel="prev">Basics</a>, Up: <a href="Math.html" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Vectors-1"></span><h4 class="subsection">2.2.2 Vectors</h4>
+<span id="Vectors-1"></span><h4 class="subsection">5.2.2 Vectors</h4>
<p>Unlike Scheme&rsquo;s vector data type, which is a sequence of arbitrary
Scheme objects, Chickadee&rsquo;s <code>(chickadee math vector)</code> module
@@ -100,13 +100,6 @@ release.
<pre class="example">(define v (vec2+ (vec2 1 2) (vec2 3 4)))
</pre></div>
-<p>Since vectors are used so frequently, the reader macro <code>#v</code> is
-used to cut down on typing:
-</p>
-<div class="example">
-<pre class="example">(define v (vec2+ #v(1 2) #v(3 4)))
-</pre></div>
-
<p><em>A Note About Performance</em>
</p>
<p>A lot of time has been spent making Chickadee&rsquo;s vector operations
@@ -119,7 +112,7 @@ order to take advantage of optimizations relating to floating point
math operations. The downside is that since these are not pure
functions, they do not compose well and create more verbose code.
</p>
-<span id="g_t2D-Vectors"></span><h4 class="subsubsection">2.2.2.1 2D Vectors</h4>
+<span id="g_t2D-Vectors"></span><h4 class="subsubsection">5.2.2.1 2D Vectors</h4>
<dl>
<dt id="index-vec2">Procedure: <strong>vec2</strong> <em>x y</em></dt>
@@ -159,7 +152,7 @@ measured in radians.
</p></dd></dl>
<dl>
-<dt id="index-vec2_002ddot_002dproduct">Procedure: <strong>vec2-dot-product</strong> <em>v1 v2</em></dt>
+<dt id="index-vec2_002ddot">Procedure: <strong>vec2-dot</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>
@@ -225,7 +218,7 @@ subtracting <var>x</var>, a 2D vector or a scalar.
multiplying it by <var>x</var>, a 2D vector or a scalar.
</p></dd></dl>
-<span id="g_t3D-Vectors"></span><h4 class="subsubsection">2.2.2.2 3D Vectors</h4>
+<span id="g_t3D-Vectors"></span><h4 class="subsubsection">5.2.2.2 3D Vectors</h4>
<dl>
<dt id="index-vec3">Procedure: <strong>vec3</strong> <em>x y</em></dt>
@@ -263,7 +256,7 @@ multiplying it by <var>x</var>, a 2D vector or a scalar.
</p></dd></dl>
<dl>
-<dt id="index-vec3_002ddot_002dproduct">Procedure: <strong>vec3-dot-product</strong> <em>v1 v2</em></dt>
+<dt id="index-vec3_002ddot">Procedure: <strong>vec3-dot</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>
diff --git a/manuals/chickadee/Viewports.html b/manuals/chickadee/Viewports.html
index a55e5c3..804b226 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -32,7 +32,7 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="Index.html" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Graphics.html" rel="up" title="Graphics">
-<link href="Rendering-Engine.html" rel="next" title="Rendering Engine">
+<link href="Render-Settings.html" rel="next" title="Render Settings">
<link href="Framebuffers.html" rel="prev" title="Framebuffers">
<style type="text/css">
<!--
@@ -82,10 +82,10 @@ ul.no-bullet {list-style: none}
<body lang="en">
<span id="Viewports"></span><div class="header">
<p>
-Next: <a href="Rendering-Engine.html" accesskey="n" rel="next">Rendering Engine</a>, Previous: <a href="Framebuffers.html" accesskey="p" rel="prev">Framebuffers</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
+Next: <a href="Render-Settings.html" accesskey="n" rel="next">Render Settings</a>, Previous: <a href="Framebuffers.html" accesskey="p" rel="prev">Framebuffers</a>, Up: <a href="Graphics.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Viewports-1"></span><h4 class="subsection">2.3.12 Viewports</h4>
+<span id="Viewports-1"></span><h4 class="subsection">5.3.15 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
@@ -147,6 +147,16 @@ in <var>clear-flags</var>.
<dd><p>Return the list of clear flags for <var>viewport</var>.
</p></dd></dl>
+<dl>
+<dt id="index-current_002dviewport">Procedure: <strong>current-viewport</strong></dt>
+<dd><p>Return the current viewport.
+</p></dd></dl>
+
+<dl>
+<dt id="index-g_003aviewport">Variable: <strong>g:viewport</strong></dt>
+<dd><p>Render state for viewports (see <a href="Rendering-Engine.html">Rendering Engine</a>.)
+</p></dd></dl>
+
diff --git a/manuals/chickadee/Window-Manipulation.html b/manuals/chickadee/Window-Manipulation.html
index 3992faa..b322014 100644
--- a/manuals/chickadee/Window-Manipulation.html
+++ b/manuals/chickadee/Window-Manipulation.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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -32,7 +32,7 @@ http://www.texinfo.org/ (GNU Texinfo).
<link href="Index.html" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Kernel.html" rel="up" title="Kernel">
-<link href="Live-Coding.html" rel="next" title="Live Coding">
+<link href="Math.html" rel="next" title="Math">
<link href="Input-Devices.html" rel="prev" title="Input Devices">
<style type="text/css">
<!--
@@ -82,10 +82,10 @@ ul.no-bullet {list-style: none}
<body lang="en">
<span id="Window-Manipulation"></span><div class="header">
<p>
-Next: <a href="Live-Coding.html" accesskey="n" rel="next">Live Coding</a>, Previous: <a href="Input-Devices.html" accesskey="p" rel="prev">Input Devices</a>, Up: <a href="Kernel.html" accesskey="u" rel="up">Kernel</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
+Previous: <a href="Input-Devices.html" accesskey="p" rel="prev">Input Devices</a>, Up: <a href="Kernel.html" accesskey="u" rel="up">Kernel</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
-<span id="Window-Manipulation-1"></span><h4 class="subsection">2.1.3 Window Manipulation</h4>
+<span id="Window-Manipulation-1"></span><h4 class="subsection">5.1.3 Window Manipulation</h4>
<dl>
<dt id="index-current_002dwindow">Procedure: <strong>current-window</strong></dt>
@@ -186,6 +186,5 @@ it is enabled.
-
</body>
</html>
diff --git a/manuals/chickadee/index.html b/manuals/chickadee/index.html
index 8daf152..915c50f 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-2020 David Thompson davet@gnu.org
+<!-- Copyright (C) 2017-2021 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
@@ -91,74 +91,114 @@ ul.no-bullet {list-style: none}
<ul class="no-bullet">
<li><a id="toc-Requirements-1" href="Requirements.html#Requirements">1.1 Requirements</a></li>
</ul></li>
- <li><a id="toc-API-Reference-1" href="API-Reference.html#API-Reference">2 API Reference</a>
+ <li><a id="toc-Getting-Started-1" href="Getting-Started.html#Getting-Started">2 Getting Started</a></li>
+ <li><a id="toc-Command-Line-Interface-1" href="Command-Line-Interface.html#Command-Line-Interface">3 Command Line Interface</a>
<ul class="no-bullet">
- <li><a id="toc-Kernel-1" href="Kernel.html#Kernel">2.1 Kernel</a>
+ <li><a id="toc-Invoking-chickadee-play-1" href="Invoking-chickadee-play.html#Invoking-chickadee-play">3.1 Invoking <code>chickadee play</code></a></li>
+ <li><a id="toc-Invoking-chickadee-bundle-1" href="Invoking-chickadee-bundle.html#Invoking-chickadee-bundle">3.2 Invoking <code>chickadee bundle</code></a></li>
+ </ul></li>
+ <li><a id="toc-Live-Coding-1" href="Live-Coding.html#Live-Coding">4 Live Coding</a></li>
+ <li><a id="toc-API-Reference-1" href="API-Reference.html#API-Reference">5 API Reference</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Kernel-1" href="Kernel.html#Kernel">5.1 Kernel</a>
<ul class="no-bullet">
- <li><a id="toc-The-Game-Loop-1" href="The-Game-Loop.html#The-Game-Loop">2.1.1 The Game Loop</a></li>
- <li><a id="toc-Input-Devices-1" href="Input-Devices.html#Input-Devices">2.1.2 Input Devices</a></li>
- <li><a id="toc-Window-Manipulation-1" href="Window-Manipulation.html#Window-Manipulation">2.1.3 Window Manipulation</a></li>
- <li><a id="toc-Live-Coding-1" href="Live-Coding.html#Live-Coding">2.1.4 Live Coding</a></li>
+ <li><a id="toc-The-Game-Loop-1" href="The-Game-Loop.html#The-Game-Loop">5.1.1 The Game Loop</a></li>
+ <li><a id="toc-Input-Devices-1" href="Input-Devices.html#Input-Devices">5.1.2 Input Devices</a></li>
+ <li><a id="toc-Window-Manipulation-1" href="Window-Manipulation.html#Window-Manipulation">5.1.3 Window Manipulation</a></li>
</ul></li>
- <li><a id="toc-Math-1" href="Math.html#Math">2.2 Math</a>
+ <li><a id="toc-Math-1" href="Math.html#Math">5.2 Math</a>
<ul class="no-bullet">
- <li><a id="toc-Basics-1" href="Basics.html#Basics">2.2.1 Basics</a></li>
- <li><a id="toc-Vectors-1" href="Vectors.html#Vectors">2.2.2 Vectors</a>
+ <li><a id="toc-Basics-1" href="Basics.html#Basics">5.2.1 Basics</a></li>
+ <li><a id="toc-Vectors-1" href="Vectors.html#Vectors">5.2.2 Vectors</a>
<ul class="no-bullet">
- <li><a id="toc-2D-Vectors" href="Vectors.html#g_t2D-Vectors">2.2.2.1 2D Vectors</a></li>
- <li><a id="toc-3D-Vectors" href="Vectors.html#g_t3D-Vectors">2.2.2.2 3D Vectors</a></li>
+ <li><a id="toc-2D-Vectors" href="Vectors.html#g_t2D-Vectors">5.2.2.1 2D Vectors</a></li>
+ <li><a id="toc-3D-Vectors" href="Vectors.html#g_t3D-Vectors">5.2.2.2 3D Vectors</a></li>
</ul></li>
- <li><a id="toc-Rectangles-1" href="Rectangles.html#Rectangles">2.2.3 Rectangles</a></li>
- <li><a id="toc-Matrices-1" href="Matrices.html#Matrices">2.2.4 Matrices</a>
+ <li><a id="toc-Rectangles-1" href="Rectangles.html#Rectangles">5.2.3 Rectangles</a></li>
+ <li><a id="toc-Matrices-1" href="Matrices.html#Matrices">5.2.4 Matrices</a>
<ul class="no-bullet">
- <li><a id="toc-3x3-Matrices" href="Matrices.html#g_t3x3-Matrices">2.2.4.1 3x3 Matrices</a></li>
- <li><a id="toc-4x4-Matrices" href="Matrices.html#g_t4x4-Matrices">2.2.4.2 4x4 Matrices</a></li>
+ <li><a id="toc-3x3-Matrices" href="Matrices.html#g_t3x3-Matrices">5.2.4.1 3x3 Matrices</a></li>
+ <li><a id="toc-4x4-Matrices" href="Matrices.html#g_t4x4-Matrices">5.2.4.2 4x4 Matrices</a></li>
</ul></li>
- <li><a id="toc-Quaternions-1" href="Quaternions.html#Quaternions">2.2.5 Quaternions</a></li>
- <li><a id="toc-Easings-1" href="Easings.html#Easings">2.2.6 Easings</a></li>
- <li><a id="toc-Bezier-Curves-1" href="Bezier-Curves.html#Bezier-Curves">2.2.7 Bezier Curves</a></li>
- <li><a id="toc-Path-Finding-1" href="Path-Finding.html#Path-Finding">2.2.8 Path Finding</a></li>
- <li><a id="toc-Grid-1" href="Grid.html#Grid">2.2.9 Grid</a></li>
+ <li><a id="toc-Quaternions-1" href="Quaternions.html#Quaternions">5.2.5 Quaternions</a></li>
+ <li><a id="toc-Easings-1" href="Easings.html#Easings">5.2.6 Easings</a></li>
+ <li><a id="toc-Bezier-Curves-1" href="Bezier-Curves.html#Bezier-Curves">5.2.7 Bezier Curves</a></li>
</ul></li>
- <li><a id="toc-Graphics-1" href="Graphics.html#Graphics">2.3 Graphics</a>
+ <li><a id="toc-Graphics-1" href="Graphics.html#Graphics">5.3 Graphics</a>
<ul class="no-bullet">
- <li><a id="toc-Colors-1" href="Colors.html#Colors">2.3.1 Colors</a>
+ <li><a id="toc-Colors-1" href="Colors.html#Colors">5.3.1 Colors</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Stock-Colors" href="Colors.html#Stock-Colors">5.3.1.1 Stock Colors</a></li>
+ </ul></li>
+ <li><a id="toc-Textures-1" href="Textures.html#Textures">5.3.2 Textures</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Tile-Atlases" href="Textures.html#Tile-Atlases">5.3.2.1 Tile Atlases</a></li>
+ <li><a id="toc-Cube-Maps" href="Textures.html#Cube-Maps">5.3.2.2 Cube Maps</a></li>
+ </ul></li>
+ <li><a id="toc-Sprites-1" href="Sprites.html#Sprites">5.3.3 Sprites</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Sprite-Batches" href="Sprites.html#Sprite-Batches">5.3.3.1 Sprite Batches</a></li>
+ <li><a id="toc-9_002dPatches" href="Sprites.html#g_t9_002dPatches">5.3.3.2 9-Patches</a></li>
+ </ul></li>
+ <li><a id="toc-Fonts-1" href="Fonts.html#Fonts">5.3.4 Fonts</a></li>
+ <li><a id="toc-Vector-Paths-1" href="Vector-Paths.html#Vector-Paths">5.3.5 Vector Paths</a></li>
+ <li><a id="toc-Particles-1" href="Particles.html#Particles">5.3.6 Particles</a></li>
+ <li><a id="toc-Tile-Maps-1" href="Tile-Maps.html#Tile-Maps">5.3.7 Tile Maps</a></li>
+ <li><a id="toc-Models-1" href="Models.html#Models">5.3.8 Models</a></li>
+ <li><a id="toc-Lights-1" href="Lights.html#Lights">5.3.9 Lights</a></li>
+ <li><a id="toc-Skyboxes-1" href="Skyboxes.html#Skyboxes">5.3.10 Skyboxes</a></li>
+ <li><a id="toc-Meshes-1" href="Meshes.html#Meshes">5.3.11 Meshes</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Materials" href="Meshes.html#Materials">5.3.11.1 Materials</a></li>
+ <li><a id="toc-Blinn_002dPhong-Materials" href="Meshes.html#Blinn_002dPhong-Materials">5.3.11.2 Blinn-Phong Materials</a></li>
+ <li><a id="toc-PBR-Materials" href="Meshes.html#PBR-Materials">5.3.11.3 PBR Materials</a></li>
+ <li><a id="toc-Primitives-and-Meshes" href="Meshes.html#Primitives-and-Meshes">5.3.11.4 Primitives and Meshes</a></li>
+ </ul></li>
+ <li><a id="toc-Buffers-1" href="Buffers.html#Buffers">5.3.12 Buffers</a></li>
+ <li><a id="toc-Shaders-1" href="Shaders.html#Shaders">5.3.13 Shaders</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Attributes" href="Shaders.html#Attributes">5.3.13.1 Attributes</a></li>
+ <li><a id="toc-Uniforms" href="Shaders.html#Uniforms">5.3.13.2 Uniforms</a></li>
+ <li><a id="toc-User_002dDefined-Shader-Types" href="Shaders.html#User_002dDefined-Shader-Types">5.3.13.3 User-Defined Shader Types</a></li>
+ </ul></li>
+ <li><a id="toc-Framebuffers-1" href="Framebuffers.html#Framebuffers">5.3.14 Framebuffers</a></li>
+ <li><a id="toc-Viewports-1" href="Viewports.html#Viewports">5.3.15 Viewports</a></li>
+ <li><a id="toc-Render-Settings-1" href="Render-Settings.html#Render-Settings">5.3.16 Render Settings</a>
<ul class="no-bullet">
- <li><a id="toc-Stock-Colors" href="Colors.html#Stock-Colors">2.3.1.1 Stock Colors</a></li>
+ <li><a id="toc-Blending" href="Render-Settings.html#Blending">5.3.16.1 Blending</a></li>
+ <li><a id="toc-Polygon-Modes-and-Culling" href="Render-Settings.html#Polygon-Modes-and-Culling">5.3.16.2 Polygon Modes and Culling</a></li>
+ <li><a id="toc-Depth-Testing" href="Render-Settings.html#Depth-Testing">5.3.16.3 Depth Testing</a></li>
+ <li><a id="toc-Stencil-Testing" href="Render-Settings.html#Stencil-Testing">5.3.16.4 Stencil Testing</a></li>
+ <li><a id="toc-Multisample-Antialiasing" href="Render-Settings.html#Multisample-Antialiasing">5.3.16.5 Multisample Antialiasing</a></li>
</ul></li>
- <li><a id="toc-Textures-1" href="Textures.html#Textures">2.3.2 Textures</a></li>
- <li><a id="toc-Sprites-1" href="Sprites.html#Sprites">2.3.3 Sprites</a></li>
- <li><a id="toc-9_002dPatches-1" href="9_002dPatches.html#g_t9_002dPatches">2.3.4 9-Patches</a></li>
- <li><a id="toc-Fonts-1" href="Fonts.html#Fonts">2.3.5 Fonts</a></li>
- <li><a id="toc-Vector-Paths-1" href="Vector-Paths.html#Vector-Paths">2.3.6 Vector Paths</a></li>
- <li><a id="toc-Particles-1" href="Particles.html#Particles">2.3.7 Particles</a></li>
- <li><a id="toc-Tile-Maps-1" href="Tile-Maps.html#Tile-Maps">2.3.8 Tile Maps</a></li>
- <li><a id="toc-3D-Models-1" href="3D-Models.html#g_t3D-Models">2.3.9 3D Models</a></li>
- <li><a id="toc-Blending-1" href="Blending.html#Blending">2.3.10 Blending</a></li>
- <li><a id="toc-Framebuffers-1" href="Framebuffers.html#Framebuffers">2.3.11 Framebuffers</a></li>
- <li><a id="toc-Viewports-1" href="Viewports.html#Viewports">2.3.12 Viewports</a></li>
- <li><a id="toc-Rendering-Engine-1" href="Rendering-Engine.html#Rendering-Engine">2.3.13 Rendering Engine</a></li>
- <li><a id="toc-Buffers-1" href="Buffers.html#Buffers">2.3.14 Buffers</a></li>
- <li><a id="toc-Shaders-1" href="Shaders.html#Shaders">2.3.15 Shaders</a>
+ <li><a id="toc-Rendering-Engine-1" href="Rendering-Engine.html#Rendering-Engine">5.3.17 Rendering Engine</a>
<ul class="no-bullet">
- <li><a id="toc-Attributes" href="Shaders.html#Attributes">2.3.15.1 Attributes</a></li>
- <li><a id="toc-Uniforms" href="Shaders.html#Uniforms">2.3.15.2 Uniforms</a></li>
- <li><a id="toc-User_002dDefined-Shader-Types" href="Shaders.html#User_002dDefined-Shader-Types">2.3.15.3 User-Defined Shader Types</a></li>
+ <li><a id="toc-Render-States" href="Rendering-Engine.html#Render-States">5.3.17.1 Render States</a></li>
+ <li><a id="toc-Rendering" href="Rendering-Engine.html#Rendering">5.3.17.2 Rendering</a></li>
</ul></li>
</ul></li>
- <li><a id="toc-Audio-1" href="Audio.html#Audio">2.4 Audio</a>
+ <li><a id="toc-Audio-1" href="Audio.html#Audio">5.4 Audio</a>
+ <ul class="no-bullet">
+ <li><a id="toc-Audio-Files-1" href="Audio-Files.html#Audio-Files">5.4.1 Audio Files</a></li>
+ <li><a id="toc-Sources-1" href="Sources.html#Sources">5.4.2 Sources</a></li>
+ <li><a id="toc-The-Listener-1" href="The-Listener.html#The-Listener">5.4.3 The Listener</a></li>
+ <li><a id="toc-The-Environment-1" href="The-Environment.html#The-Environment">5.4.4 The Environment</a></li>
+ </ul></li>
+ <li><a id="toc-Scripting-1" href="Scripting.html#Scripting">5.5 Scripting</a>
<ul class="no-bullet">
- <li><a id="toc-Audio-Files-1" href="Audio-Files.html#Audio-Files">2.4.1 Audio Files</a></li>
- <li><a id="toc-Sources-1" href="Sources.html#Sources">2.4.2 Sources</a></li>
- <li><a id="toc-The-Listener-1" href="The-Listener.html#The-Listener">2.4.3 The Listener</a></li>
- <li><a id="toc-The-Environment-1" href="The-Environment.html#The-Environment">2.4.4 The Environment</a></li>
+ <li><a id="toc-Agendas-1" href="Agendas.html#Agendas">5.5.1 Agendas</a></li>
+ <li><a id="toc-Scripts-1" href="Scripts.html#Scripts">5.5.2 Scripts</a></li>
+ <li><a id="toc-Tweening-1" href="Tweening.html#Tweening">5.5.3 Tweening</a></li>
+ <li><a id="toc-Channels-1" href="Channels.html#Channels">5.5.4 Channels</a></li>
</ul></li>
- <li><a id="toc-Scripting-1" href="Scripting.html#Scripting">2.5 Scripting</a>
+ <li><a id="toc-Data-Structures-1" href="Data-Structures.html#Data-Structures">5.6 Data Structures</a>
<ul class="no-bullet">
- <li><a id="toc-Agendas-1" href="Agendas.html#Agendas">2.5.1 Agendas</a></li>
- <li><a id="toc-Scripts-1" href="Scripts.html#Scripts">2.5.2 Scripts</a></li>
- <li><a id="toc-Tweening-1" href="Tweening.html#Tweening">2.5.3 Tweening</a></li>
- <li><a id="toc-Channels-1" href="Channels.html#Channels">2.5.4 Channels</a></li>
+ <li><a id="toc-Array-Lists-1" href="Array-Lists.html#Array-Lists">5.6.1 Array Lists</a></li>
+ <li><a id="toc-Queues-1" href="Queues.html#Queues">5.6.2 Queues</a></li>
+ <li><a id="toc-Heaps-1" href="Heaps.html#Heaps">5.6.3 Heaps</a></li>
+ <li><a id="toc-Quadtrees-1" href="Quadtrees.html#Quadtrees">5.6.4 Quadtrees</a></li>
+ <li><a id="toc-Grids-1" href="Grids.html#Grids">5.6.5 Grids</a></li>
+ <li><a id="toc-Path-Finding-1" href="Path-Finding.html#Path-Finding">5.6.6 Path Finding</a></li>
</ul></li>
</ul></li>
<li><a id="toc-Copying-This-Manual-1" href="Copying-This-Manual.html#Copying-This-Manual">Appendix A Copying This Manual</a>
@@ -177,7 +217,7 @@ Next: <a href="Installation.html" accesskey="n" rel="next">Installation</a> &nbs
<hr>
<span id="Chickadee"></span><h1 class="top">Chickadee</h1>
-<p>Copyright &copy; 2017-2020 David Thompson <a href="mailto:davet@gnu.org">davet@gnu.org</a>
+<p>Copyright &copy; 2017-2021 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
@@ -200,13 +240,17 @@ Foundation Web site at <a href="http://www.gnu.org/licenses/fdl.html">http://www
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="Installation.html" accesskey="1">Installation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Installing Chickadee.
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="API-Reference.html" accesskey="2">API Reference</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Chickadee API reference.
+<tr><td align="left" valign="top">&bull; <a href="Getting-Started.html" accesskey="2">Getting Started</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Writing your first Chickadee program.
</td></tr>
-<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
-
-</pre></th></tr><tr><td align="left" valign="top">&bull; <a href="Copying-This-Manual.html" accesskey="3">Copying This Manual</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The GNU Free Documentation License and you!
+<tr><td align="left" valign="top">&bull; <a href="Command-Line-Interface.html" accesskey="3">Command Line Interface</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Run Chickadee programs from the terminal.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="Live-Coding.html" accesskey="4">Live Coding</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Tips for building games from the REPL.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="API-Reference.html" accesskey="5">API Reference</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Chickadee API reference.
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="Copying-This-Manual.html" accesskey="6">Copying This Manual</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The GNU Free Documentation License and you!
</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="Index.html" rel="index" accesskey="4">Index</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+<tr><td align="left" valign="top">&bull; <a href="Index.html" rel="index" accesskey="7">Index</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
</table>
diff --git a/manuals/guile-sdl2/Chat.html b/manuals/guile-sdl2/Chat.html
index 434f53c..1b59200 100644
--- a/manuals/guile-sdl2/Chat.html
+++ b/manuals/guile-sdl2/Chat.html
@@ -88,7 +88,7 @@ Previous: <a href="Submitting-Patches.html" accesskey="p" rel="prev">Submitting
<span id="Chat-1"></span><h3 class="section">4.3 Chat</h3>
<p>The maintainer of this library hangs out in the <code>#guile</code> channel
-on <a href="irc.freenode.net">irc.freenode.net</a>, so help and general discussion may be found
+on <a href="irc.libera.chat">irc.libera.chat</a>, so help and general discussion may be found
there.
</p>
diff --git a/manuals/guile-sdl2/Index.html b/manuals/guile-sdl2/Index.html
index 54021a1..0f11458 100644
--- a/manuals/guile-sdl2/Index.html
+++ b/manuals/guile-sdl2/Index.html
@@ -428,9 +428,11 @@ Previous: <a href="Copying-This-Manual.html" accesskey="p" rel="prev">Copying Th
<tr><td></td><td valign="top"><a href="Rendering.html#index-set_002drenderer_002dtarget_0021"><code>set-renderer-target!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering.html">Rendering</a></td></tr>
<tr><td></td><td valign="top"><a href="Rendering.html#index-set_002drenderer_002dviewport_0021"><code>set-renderer-viewport!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering.html">Rendering</a></td></tr>
<tr><td></td><td valign="top"><a href="Rendering.html#index-set_002dtexture_002dalpha_002dmod_0021"><code>set-texture-alpha-mod!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering.html">Rendering</a></td></tr>
+<tr><td></td><td valign="top"><a href="Rendering.html#index-set_002dtexture_002dblend_002dmode_0021"><code>set-texture-blend-mode!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering.html">Rendering</a></td></tr>
<tr><td></td><td valign="top"><a href="Rendering.html#index-set_002dtexture_002dcolor_002dmod_0021"><code>set-texture-color-mod!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Rendering.html">Rendering</a></td></tr>
<tr><td></td><td valign="top"><a href="Windows.html#index-set_002dwindow_002dborder_0021"><code>set-window-border!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Windows.html">Windows</a></td></tr>
<tr><td></td><td valign="top"><a href="Windows.html#index-set_002dwindow_002dfullscreen_0021"><code>set-window-fullscreen!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Windows.html">Windows</a></td></tr>
+<tr><td></td><td valign="top"><a href="Windows.html#index-set_002dwindow_002dicon_0021"><code>set-window-icon!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Windows.html">Windows</a></td></tr>
<tr><td></td><td valign="top"><a href="Windows.html#index-set_002dwindow_002dmaximum_002dsize_0021"><code>set-window-maximum-size!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Windows.html">Windows</a></td></tr>
<tr><td></td><td valign="top"><a href="Windows.html#index-set_002dwindow_002dminimum_002dsize_0021"><code>set-window-minimum-size!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Windows.html">Windows</a></td></tr>
<tr><td></td><td valign="top"><a href="Windows.html#index-set_002dwindow_002dposition_0021"><code>set-window-position!</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Windows.html">Windows</a></td></tr>
diff --git a/manuals/guile-sdl2/Rendering.html b/manuals/guile-sdl2/Rendering.html
index bc9cf5b..87c0175 100644
--- a/manuals/guile-sdl2/Rendering.html
+++ b/manuals/guile-sdl2/Rendering.html
@@ -310,6 +310,11 @@ requires that renderer was created with the <code>texture</code> flag.
<dd><p>Set the alpha mod of <var>texture</var>.
</p></dd></dl>
+<dl>
+<dt id="index-set_002dtexture_002dblend_002dmode_0021">Procedure: <strong>set-texture-blend-mode!</strong> <em>texture blend-mode</em></dt>
+<dd><p>Set the blend of <var>texture</var> to <var>blend-mode</var>. See <a href="Blend-Modes.html">Blend Modes</a> for more information.
+</p></dd></dl>
+
<hr>
<div class="header">
<p>
diff --git a/manuals/guile-sdl2/Windows.html b/manuals/guile-sdl2/Windows.html
index 463e0fa..3353d31 100644
--- a/manuals/guile-sdl2/Windows.html
+++ b/manuals/guile-sdl2/Windows.html
@@ -190,6 +190,11 @@ remove the border.
</p></dd></dl>
<dl>
+<dt id="index-set_002dwindow_002dicon_0021">Procedure: <strong>set-window-icon!</strong> <em>window icon</em></dt>
+<dd><p>Set the icon of <var>window</var> to the surface <var>icon</var>.
+</p></dd></dl>
+
+<dl>
<dt id="index-set_002dwindow_002dposition_0021">Procedure: <strong>set-window-position!</strong> <em>window x y</em></dt>
<dd><p>Set the position of <var>window</var> to (<var>x</var>, <var>y</var>).
</p></dd></dl>
diff --git a/posts/2021-10-07-chickadee-0.8.0-released.md b/posts/2021-10-07-chickadee-0.8.0-released.md
new file mode 100644
index 0000000..4cf1970
--- /dev/null
+++ b/posts/2021-10-07-chickadee-0.8.0-released.md
@@ -0,0 +1,97 @@
+title: Chickadee 0.8.0 released
+date: 2021-10-07 20:15:00
+tags: guile gamedev chickadee
+summary: Chickadee 0.8.0 has been released
+---
+
+I'm happy to announce that Chickadee 0.8.0 has been released!
+
+Chickadee is a game development toolkit for Guile. Chickadee aims to
+provide all the features that parenthetically inclined game developers
+need to make 2D and 3D games in Scheme.
+
+Notable improvements and changes:
+
+* New `chickadee` executable for running games and producing
+ redistributable binary bundles for Linux. See [Command Line
+ Interface](/manuals/chickadee/Command-Line-Interface.html#Command-Line-Interface)
+ for more information.
+* Support for Guile < 3.0 has been dropped.
+* [Cube maps](/manuals/chickadee/Textures.html#Cube-Maps) are now a
+ supported texture type.
+* New procedural [3D mesh
+ generators](/manuals/chickadee/Meshes.html#Primitives-and-Meshes)
+ for planes, tesselated planes, cubes, and spheres in the `(chickadee
+ graphics mesh)` module.
+* New 3D [skyboxes](/manuals/chickadee/Skyboxes.html#Skyboxes) in the
+ `(chickadee graphics skybox)` module.
+* New [3D model loading](/manuals/chickadee/Models.html#Models) with
+ support for glTF 2.0 and OBJ files in the `(chickadee graphics
+ model)` module.
+* New [directional, point, and spot
+ lights](/manuals/chickadee/Lights.html#Lights) in the `(chickadee
+ graphics light)` module.
+* New
+ [Blinn-Phong](/manuals/chickadee/Meshes.html#Blinn_002dPhong-Materials)
+ lighting model for 3D meshes in the `(chickadee graphics phong)`
+ module.
+* New
+ [Physically-based](https://dthompson.us/manuals/chickadee/Meshes.html#PBR-Materials)
+ lighting model for 3D meshes in the `(chickadee graphics pbr)`
+ module.
+* New linear and radial gradient fills in the `(chickadee graphics
+ path)` module.
+* New `arc-to`, `bezier-path`, `right-split`, `up-split`,
+ `corner-split`, `square-limit`, `flip-horizontal`, and
+ `flip-vertical` procedures in the `(chickadee graphics path)`
+ module.
+* Clockwise arcs now supported by `arc` procedure in `(chickadee
+ graphics path)` module.
+* New mouse wheel event handler for `run-game`. (see [The Game
+ Loop](/manuals/chickadee/The-Game-Loop.html#The-Game-Loop))
+* `(chickadee math grid)` module moved to `(chickadee data grid)`.
+* `(chickadee math path-finding)` module moved to `(chickadee data
+ path-finding)`.
+* [Dynamic array API](/manuals/chickadee/Array-Lists.html) has been
+ made public.
+* [Queue API](/manuals/chickadee/Queues.html) has been made
+ public.
+* [Heap API](/manuals/chickadee/Heaps.html) has been made public.
+* New [quadtree](/manuals/chickadee/Quadtrees.html) spatial
+ partitioning structure in the `(chickadee data quadtree)` module.
+* New `current-timestep` parameter in `(chickadee game-loop)` module.
+* Tweens now use the current timestep as their default step value.
+* `vec2-dot-product` and `vec3-dot-product` are now named `vec2-dot`
+ and `vec3-dot` in the `(chickadee math vector)` module.
+* `2pi` is now `tau` in the `(chickadee math)` module.
+* New `look-at`, `look-at!`, `matrix3-inverse`, and `matrix3-inverse!`
+ procedures in the `(chickadee math matrix)` module.
+* `#v` reader syntax for vectors is now *deprecated* and will be
+ removed in a future release.
+
+Bug fixes:
+
+* Fixed implementation of `vec2-cross` and `vec3-copy!` in the
+`(chickadee math vector)` module
+* Fixed implementation of `matrix4-rotate!` in the `(chickadee math
+ matrix)` module.
+* Fixed looping of streaming sources in the `(chickadee audio)`
+ module.
+* Fixed implementation of `below` procedure in the `(chickadee
+ graphics path)` module.
+
+source tarball: <https://files.dthompson.us/chickadee/chickadee-0.8.0.tar.gz>
+
+signature: <https://files.dthompson.us/chickadee/chickadee-0.8.0.tar.gz.asc>
+
+See the [Chickadee project page](/projects/chickadee.html) for more
+information.
+
+Bug reports, bug fixes, feature requests, and patches are welcomed.
+
+Have fun!
+
+P.S. - The [2021 Autumn Lisp Game
+Jam](https://itch.io/jam/autumn-lisp-game-jam-2021) is coming up on
+October 15th! There are lots of great ways to make games in Lisp
+these days, so there's never been a better time to join in on the fun!
diff --git a/posts/2021-10-07-guile-sdl2-0.7.0-released.md b/posts/2021-10-07-guile-sdl2-0.7.0-released.md
new file mode 100644
index 0000000..571bb2a
--- /dev/null
+++ b/posts/2021-10-07-guile-sdl2-0.7.0-released.md
@@ -0,0 +1,35 @@
+title: Guile-SDL2 0.7.0 released
+date: 2021-10-07 18:00:00
+tags: guile gamedev guile-sdl2
+summary: Guile-SDL2 0.7.0 has been released
+---
+
+I'm happy to announce that Guile-SDL2 0.7.0 has been released!
+Guile-SDL2 provides Guile Scheme bindings for the SDL2 C shared
+library. The bindings are written in pure Scheme using Guile's foreign
+function interface.
+
+New bindings in this release:
+
+* SDL_SetTextureBlendMode
+* SDL_SetWindowIcon
+* SDL_ShowCursor
+* SDL_WarpMouseInWindow
+* SDL_WarpMouseGlobal
+
+Mouse wheel events are now supported.
+
+Thanks to Liliana Prikler for their contributions to this release, and
+the previous release which did not get a release announcement.
+
+tarball: <https://files.dthompson.us/guile-sdl2/guile-sdl2-0.8.0.tar.gz>
+
+signature: <https://files.dthompson.us/guile-sdl2/guile-sdl2-0.8.0.tar.gz.asc>
+
+See the
+[Guile-SDL2 project page](https://dthompson.us/projects/guile-sdl2.html)
+for more information.
+
+Bug reports, bug fixes, feature requests, and patches are welcomed.
+
+Happy hacking!
diff --git a/projects.scm b/projects.scm
index 8fdd861..6e05296 100644
--- a/projects.scm
+++ b/projects.scm
@@ -116,7 +116,8 @@ following modules:")
#:license "GNU LGPLv3+"
#:manual? #t
#:releases
- `(("0.6.0" ,(date 2021 04 13))
+ `(("0.7.0" ,(date 2021 10 07))
+ ("0.6.0" ,(date 2021 04 13))
("0.5.0" ,(date 2020 04 07))
("0.4.0" ,(date 2019 06 02))
("0.3.1" ,(date 2018 10 16))
@@ -221,6 +222,7 @@ and smile, because you've just generated your first Haunt site!"))
#:repo "chickadee"
#:guix-package "guile-chickadee"
#:manual? #t
+ #:irc-channel "#chickadee"
#:description
`((p "Chickadee is a game development toolkit for "
,(anchor "Guile Scheme" "https://gnu.org/s/guile") ".")
@@ -230,47 +232,91 @@ parenthetically inclined game developers need to make games in
Scheme.")
(p "Here is the obligatory “Hello, world” program:")
,(highlight-scheme
- "(use-modules (chickadee)
- (chickadee math vector)
- (chickadee graphics font))
-
-(define (draw alpha)
+ "(define (draw alpha)
(draw-text \"Hello, world!\" (vec2 260.0 240.0)))
-
-(run-game #:draw draw)
")
+ ,(centered-image "/images/chickadee/screenshot-hello-world.png"
+ "Hello world example screenshot")
(p "And here's how to draw a sprite:")
,(highlight-scheme
- "(use-modules (chickadee)
- (chickadee math vector)
- (chickadee graphics sprite)
- (chickadee graphics texture))
-
-(define sprite #f)
+ "(use-modules (chickadee graphics sprite))
-(define (load)
- (set! sprite (load-image \"images/chickadee.png\")))
+(define sprite (load-image \"chickadee.png\"))
(define (draw alpha)
(draw-sprite sprite (vec2 256.0 176.0)))
+")
+ ,(centered-image "/images/chickadee/screenshot-sprite.png"
+ "Sprite example screenshot")
+ (p "Chickadee can render vector paths:")
+ ,(highlight-scheme
+ "(use-modules (chickadee graphics path))
+
+(define gradient
+ (radial-gradient #:start-color tango-light-sky-blue
+ #:end-color tango-dark-sky-blue
+ #:radius 240.0
+ #:origin (vec2 240.0 240.0)))
+
+(define painter
+ (let ((filled-circle (with-style ((fill-color gradient))
+ (fill (circle (vec2 240.0 240.0) 240.0)))))
+ (translate (vec2 80.0 0.0) (corner-split filled-circle 4))))
-(run-game #:load load #:draw draw)
+(define canvas (make-canvas painter))
+
+(define (draw alpha)
+ (draw-canvas canvas))
+")
+ ,(centered-image "/images/chickadee/screenshot-vector-path.png"
+ "Vector path example screenshot")
+ (p "And it can also render 3D models:")
+ ,(highlight-scheme
+ "(use-modules (chickadee graphics light)
+ (chickadee graphics model)
+ (chickadee graphics skybox))
+
+(define model (load-gltf \"Suzanne.gltf\"))
+(define camera-position (vec3 0.0 0.0 3.0))
+(define world (make-identity-matrix4))
+(define view (look-at camera-position (vec3 0.0 0.0 0.0) (vec3 0.0 1.0 0.0)))
+(define projection (perspective-projection (/ pi 3.0) (/ 4.0 3.0) 0.1 5.0))
+(define skybox
+ (make-skybox
+ (load-cube-map #:right \"right.jpg\"
+ #:left \"left.jpg\"
+ #:top \"top.jpg\"
+ #:bottom \"bottom.jpg\"
+ #:front \"front.jpg\"
+ #:back \"back.jpg\")))
+
+(define (draw alpha)
+ (with-projection projection
+ (draw-skybox skybox view)
+ (draw-model model
+ #:model-matrix world
+ #:view-matrix view
+ #:camera-position camera-position
+ #:skybox skybox)))
")
- (p "Features include:")
+ ,(centered-image "/images/chickadee/screenshot-3d.png"
+ "3D example screenshot")
+ (p "Other features include:")
(ul
(li "extensible, fixed-timestep game loop")
- (li "OpenGL-based rendering engine")
- (li "keyboard, mouse, controller input events")
- (li "vectors, matrices, bounding boxes, easing functions, etc.")
+ (li "keyboard, mouse, and controller input events")
+ (li "vectors, matrices, bounding boxes, and easing functions")
+ (li "audio playback")
(li "asynchronous scripting"))
(p (small ,(anchor "chickadee sprite by Refuzzle, CC0"
"http://opengameart.org/content/winter-birds"))))
- #:requirements '("GNU Guile >= 2.1.4"
- "Guile-SDL2 >= 0.6.0"
+ #:requirements '("GNU Guile >= 3.0.0"
+ "Guile-SDL2 >= 0.7.0"
"Guile-OpenGL >= 0.1.0")
#:license "GNU GPLv3+"
#:releases
- `(("0.7.0" ,(date 2021 04 13))
+ `(("0.8.0" ,(date 2021 10 07))
+ ("0.7.0" ,(date 2021 04 13))
("0.6.0" ,(date 2020 11 19))
("0.5.0" ,(date 2020 04 08))
("0.4.0" ,(date 2019 06 04))
diff --git a/theme.scm b/theme.scm
index f7c1284..6d651cb 100644
--- a/theme.scm
+++ b/theme.scm
@@ -118,7 +118,8 @@ free culture works available under the " ,%cc-by-sa-link " license.")
sxml->html)))
(define* (project-page #:key name file-name description usage requirements
- installation manual? license repo releases guix-package)
+ installation manual? license repo releases guix-package
+ (irc-channel "#guile"))
(define (tarball-url version)
(string-append "https://files.dthompson.us/"
repo "/" repo "-" version
@@ -184,7 +185,7 @@ system. The official repository is hosted at "
(pre "git clone " ,url)))
(h2 "Community")
(p "Real-time discussion for " ,name " can be found on the "
- (code "#guile")
+ (code ,irc-channel)
" channel on the "
,(anchor "Libera.chat" "https://libera.chat")
" IRC network")