abrash-black-book/index.html
James Gregory 3760ddbdd3 Tidy HTML
2013-12-30 16:30:02 +11:00

2087 lines
86 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="vsisbn" content="1576101746" />
<meta name="vstitle" content="Michael Abrash's Graphics Programming Black Book, Special Edition" />
<meta name="vsauthor" content="Michael Abrash" />
<meta name="vspublisher" content="The Coriolis Group" />
<meta name="vspubdate" content="07/01/97" />
<meta name="vscategory" content="Web and Software Development: Game Development,Web and Software Development: Graphics and Multimedia Development" />
<title>Michael Abrash's Graphics Programming Black Book Special Edition: Table of Contents</title><!-- HEADER -->
<!-- Empty Reference Subhead -->
<!--ISBN=1576101746//-->
<!--TITLE=Michael Abrash's Graphics Programming Black Book Special Edition//-->
<!--AUTHOR=Michael Abrash//-->
<!--PUBLISHER=The Coriolis Group, Inc.//-->
<!--CHAPTER=0//-->
<!--PAGES=0//-->
<!--UNASSIGNED1//-->
<!--UNASSIGNED2//-->
</head>
<body>
<center>
<h2>Michael Abrash's Graphics Programming Black Book Special Edition</h2>
</center>
<hr />
<dl>
<dd><font size="4"><b><a href="intro.html">Introduction</a></b></font></dd>
<dd><font size="4"><b><a href="about.html">Foreword</a></b></font></dd>
<dd><font size="4"><b><a href="about_author.html">About the Author</a></b></font><br />
<br /></dd>
<dd>
<a href="01-01.html"><b>Part I</b></a>
<dl>
<dd>
<a href="01-01.html#Heading1"><b>Chapter 1&mdash;The Best Optimizer Is between Your Ears</b></a>
<dl>
<dd><font size="3"><b><a href="01-01.html#Heading2">The Human Element of Code Optimization</a></b></font></dd>
<dd>
<font size="3"><b><a href="01-01.html#Heading3">Understanding High Performance</a></b></font>
<dl>
<dd><font size="3"><b><a href="01-01.html#Heading4">When Fast Isn&rsquo;t Fast</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="01-02.html#Heading5">Rules for Building High-Performance Code</a></b></font>
<dl>
<dd><font size="3"><b><a href="01-02.html#Heading6">Know Where You&rsquo;re Going</a></b></font></dd>
<dd><font size="3"><b><a href="01-02.html#Heading7">Make a Big Map</a></b></font></dd>
<dd><font size="3"><b><a href="01-02.html#Heading8">Make Lots of Little Maps</a></b></font></dd>
<dd><font size="3"><b><a href="01-03.html#Heading9">Know the Territory</a></b></font></dd>
<dd><font size="3"><b><a href="01-04.html#Heading10">Know When It Matters</a></b></font></dd>
<dd><font size="3"><b><a href="01-04.html#Heading11">Always Consider the Alternatives</a></b></font></dd>
<dd><font size="3"><b><a href="01-05.html#Heading12">Know How to Turn On the Juice</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="01-06.html#Heading13">Where We&rsquo;ve Been, What We&rsquo;ve Seen</a></b></font>
<dl>
<dd><font size="3"><b><a href="01-06.html#Heading14">Where We&rsquo;re Going</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="02-01.html#Heading1"><b>Chapter 2&mdash;A World Apart</b></a>
<dl>
<dd><font size="3"><b><a href="02-01.html#Heading2">The Unique Nature of Assembly Language Optimization</a></b></font></dd>
<dd><font size="3"><b><a href="02-01.html#Heading3">Instructions: The Individual versus the Collective</a></b></font></dd>
<dd>
<font size="3"><b><a href="02-01.html#Heading4">Assembly Is Fundamentally Different</a></b></font>
<dl>
<dd><font size="3"><b><a href="02-02.html#Heading5">Transformation Inefficiencies</a></b></font></dd>
<dd><font size="3"><b><a href="02-02.html#Heading6">Self-Reliance</a></b></font></dd>
<dd><font size="3"><b><a href="02-02.html#Heading7">Knowledge</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="02-03.html#Heading8">The Flexible Mind</a></b></font>
<dl>
<dd><font size="3"><b><a href="02-03.html#Heading9">Where to Begin?</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="03-01.html#Heading1"><b>Chapter 3&mdash;Assume Nothing</b></a>
<dl>
<dd><font size="3"><b><a href="03-01.html#Heading2">Understanding and Using the Zen Timer</a></b></font></dd>
<dd><font size="3"><b><a href="03-01.html#Heading3">The Costs of Ignorance</a></b></font></dd>
<dd>
<font size="3"><b><a href="03-01.html#Heading4">The Zen Timer</a></b></font>
<dl>
<dd><font size="3"><b><a href="03-03.html#Heading5">The Zen Timer Is a Means, Not an End</a></b></font></dd>
<dd><font size="3"><b><a href="03-03.html#Heading6">Starting the Zen Timer</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="03-03.html#Heading7">Time and the PC</a></b></font></dd>
<dd><font size="3"><b><a href="03-04.html#Heading8">Stopping the Zen Timer</a></b></font></dd>
<dd><font size="3"><b><a href="03-04.html#Heading9">Reporting Timing Results</a></b></font></dd>
<dd><font size="3"><b><a href="03-05.html#Heading10">Notes on the Zen Timer</a></b></font></dd>
<dd><font size="3"><b><a href="03-05.html#Heading11">A Sample Use of the Zen Timer</a></b></font></dd>
<dd>
<font size="3"><b><a href="03-06.html#Heading12">The Long-Period Zen Timer</a></b></font>
<dl>
<dd><font size="3"><b><a href="03-07.html#Heading13">Stopping the Clock</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="03-08.html#Heading14">Example Use of the Long-Period Zen Timer</a></b></font></dd>
<dd>
<font size="3"><b><a href="03-09.html#Heading15">Using the Zen Timer from C</a></b></font>
<dl>
<dd><font size="3"><b><a href="03-10.html#Heading16">Watch Out for Optimizing Assemblers!</a></b></font></dd>
<dd><font size="3"><b><a href="03-10.html#Heading17">Further Reading</a></b></font></dd>
<dd><font size="3"><b><a href="03-10.html#Heading18">Armed with the Zen Timer, Onward and Upward</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="04-01.html#Heading1"><b>Chapter 4&mdash;In the Lair of the Cycle-Eaters</b></a>
<dl>
<dd><font size="3"><b><a href="04-01.html#Heading2">How the PC Hardware Devours Code Performance</a></b></font></dd>
<dd><font size="3"><b><a href="04-01.html#Heading3">Cycle-Eaters</a></b></font></dd>
<dd>
<font size="3"><b><a href="04-01.html#Heading4">The Nature of Cycle-Eaters</a></b></font>
<dl>
<dd><font size="3"><b><a href="04-01.html#Heading5">The 8088&rsquo;s Ancestral Cycle-Eaters</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="04-01.html#Heading6">The 8-Bit Bus Cycle-Eater</a></b></font>
<dl>
<dd><font size="3"><b><a href="04-02.html#Heading7">The Impact of the 8-Bit Bus Cycle-Eater</a></b></font></dd>
<dd><font size="3"><b><a href="04-02.html#Heading8">What to Do about the 8-Bit Bus Cycle-Eater?</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="04-03.html#Heading9">The Prefetch Queue Cycle-Eater</a></b></font>
<dl>
<dd><font size="3"><b><a href="04-04.html#Heading10">Official Execution Times Are Only Part of the Story</a></b></font></dd>
<dd><font size="3"><b><a href="04-04.html#Heading11">There Is No Such Beast as a True Instruction Execution Time</a></b></font></dd>
<dd><font size="3"><b><a href="04-05.html#Heading12">Approximating Overall Execution Times</a></b></font></dd>
<dd><font size="3"><b><a href="04-05.html#Heading13">What to Do about the Prefetch Queue Cycle-Eater?</a></b></font></dd>
<dd><font size="3"><b><a href="04-06.html#Heading14">Holding Up the 8088</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="04-06.html#Heading15">Dynamic RAM Refresh: The Invisible Hand</a></b></font>
<dl>
<dd><font size="3"><b><a href="04-06.html#Heading16">How DRAM Refresh Works in the PC</a></b></font></dd>
<dd><font size="3"><b><a href="04-07.html#Heading17">The Impact of DRAM Refresh</a></b></font></dd>
<dd><font size="3"><b><a href="04-07.html#Heading18">What to Do About the DRAM Refresh Cycle-Eater?</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="04-07.html#Heading19">Wait States</a></b></font></dd>
<dd>
<font size="3"><b><a href="04-08.html#Heading20">The Display Adapter Cycle-Eater</a></b></font>
<dl>
<dd><font size="3"><b><a href="04-09.html#Heading21">The Impact of the Display Adapter Cycle-Eater</a></b></font></dd>
<dd><font size="3"><b><a href="04-10.html#Heading22">What to Do about the Display Adapter Cycle-Eater?</a></b></font></dd>
<dd><font size="3"><b><a href="04-10.html#Heading23">Cycle-Eaters: A Summary</a></b></font></dd>
<dd><font size="3"><b><a href="04-10.html#Heading24">What Does It All Mean?</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="05-01.html#Heading1"><b>Chapter 5&mdash;Crossing the Border</b></a>
<dl>
<dd>
<font size="3"><b><a href="05-01.html#Heading2">Searching Files with Restartable Blocks</a></b></font>
<dl>
<dd><font size="3"><b><a href="05-01.html#Heading3">Searching for Text</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="05-01.html#Heading4">Avoiding the String Trap</a></b></font></dd>
<dd><font size="3"><b><a href="05-02.html#Heading5">Brute-Force Techniques</a></b></font></dd>
<dd>
<font size="3"><b><a href="05-02.html#Heading6">Using memchr()</a></b></font>
<dl>
<dd><font size="3"><b><a href="05-02.html#Heading7">Making a Search Restartable</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="05-04.html#Heading8">Interpreting Where the Cycles Go</a></b></font>
<dl>
<dd><font size="3"><b><a href="05-04.html#Heading9">Knowing When Assembly Is Pointless</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="05-05.html#Heading10">Always Look Where Execution Is Going</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="06-01.html#Heading1"><b>Chapter 6&mdash;Looking Past Face Value</b></a>
<dl>
<dd>
<font size="3"><b><a href="06-01.html#Heading2">How Machine Instructions May Do More Than You Think</a></b></font>
<dl>
<dd><font size="3"><b><a href="06-01.html#Heading3">Memory Addressing and Arithmetic</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="06-02.html#Heading4">Math via Memory Addressing</a></b></font>
<dl>
<dd><font size="3"><b><a href="06-02.html#Heading5">The Wonders of LEA on the 386</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="06-02.html#Heading6">Multiplication with LEA Using Non-Powers of Two</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="07-01.html#Heading1"><b>Chapter 7&mdash;Local Optimization</b></a>
<dl>
<dd>
<font size="3"><b><a href="07-01.html#Heading2">Optimizing Halfway between Algorithms and Cycle Counting</a></b></font>
<dl>
<dd><font size="3"><b><a href="07-01.html#Heading3">When LOOP Is a Bad Idea</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="07-02.html#Heading4">The Lessons of LOOP and JCXZ</a></b></font>
<dl>
<dd><font size="3"><b><a href="07-02.html#Heading5">Avoiding LOOPS of Any Stripe</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="07-02.html#Heading6">Local Optimization</a></b></font></dd>
<dd>
<font size="3"><b><a href="07-03.html#Heading7">Unrolling Loops</a></b></font>
<dl>
<dd><font size="3"><b><a href="07-05.html#Heading8">Rotating and Shifting with Tables</a></b></font></dd>
<dd><font size="3"><b><a href="07-05.html#Heading9">NOT Flips Bits&mdash;Not Flags</a></b></font></dd>
<dd><font size="3"><b><a href="07-05.html#Heading10">Incrementing with and without Carry</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="08-01.html#Heading1"><b>Chapter 8&mdash;Speeding Up C with Assembly Language</b></a>
<dl>
<dd>
<font size="3"><b><a href="08-01.html#Heading2">Jumping Languages When You Know It&rsquo;ll Help</a></b></font>
<dl>
<dd><font size="3"><b><a href="08-01.html#Heading3">Billy, Don&rsquo;t Be a Compiler</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="08-01.html#Heading4">Don&rsquo;t Call Your Functions on Me, Baby</a></b></font></dd>
<dd><font size="3"><b><a href="08-02.html#Heading5">Stack Frames Slow So Much</a></b></font></dd>
<dd>
<font size="3"><b><a href="08-02.html#Heading6">Torn Between Two Segments</a></b></font>
<dl>
<dd><font size="3"><b><a href="08-02.html#Heading7">Why Speeding Up Is Hard to Do</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="08-02.html#Heading8">Taking It to the Limit</a></b></font>
<dl>
<dd><font size="3"><b><a href="08-02.html#Heading9">A C-to-Assembly Case Study</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="09-01.html#Heading1"><b>Chapter 9&mdash;Hints My Readers Gave Me</b></a>
<dl>
<dd>
<font size="3"><b><a href="09-01.html#Heading2">Optimization Odds and Ends from the Field</a></b></font>
<dl>
<dd><font size="3"><b><a href="09-01.html#Heading3">Another Look at LEA</a></b></font></dd>
<dd><font size="3"><b><a href="09-01.html#Heading4">The Kennedy Portfolio</a></b></font></dd>
<dd><font size="3"><b><a href="09-02.html#Heading5">Speeding Up Multiplication</a></b></font></dd>
<dd><font size="3"><b><a href="09-02.html#Heading6">Optimizing Optimized Searching</a></b></font></dd>
<dd><font size="3"><b><a href="09-05.html#Heading7">Short Sorts</a></b></font></dd>
<dd><font size="3"><b><a href="09-05.html#Heading8">Full 32-Bit Division</a></b></font></dd>
<dd><font size="3"><b><a href="09-06.html#Heading9">Sweet Spot Revisited</a></b></font></dd>
<dd><font size="3"><b><a href="09-07.html#Heading10">Hard-Core Cycle Counting</a></b></font></dd>
<dd><font size="3"><b><a href="09-07.html#Heading11">Hardwired Far Jumps</a></b></font></dd>
<dd><font size="3"><b><a href="09-07.html#Heading12">Setting 32-Bit Registers: Time versus Space</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="10-01.html#Heading1"><b>Chapter 10&mdash;Patient Coding, Faster Code</b></a>
<dl>
<dd>
<font size="3"><b><a href="10-01.html#Heading2">How Working Quickly Can Bring Execution to a Crawl</a></b></font>
<dl>
<dd><font size="3"><b><a href="10-01.html#Heading3">The Case for Delayed Gratification</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="10-01.html#Heading4">The Brute-Force Syndrome</a></b></font>
<dl>
<dd><font size="3"><b><a href="10-02.html#Heading5">Wasted Breakthroughs</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="10-03.html#Heading6">Recursion</a></b></font>
<dl>
<dd><font size="3"><b><a href="10-03.html#Heading7">Patient Optimization</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="11-01.html#Heading1"><b>Chapter 11&mdash;Pushing the 286 and 386</b></a>
<dl>
<dd>
<font size="3"><b><a href="11-01.html#Heading2">New Registers, New Instructions, New Timings, New Complications</a></b></font>
<dl>
<dd><font size="3"><b><a href="11-01.html#Heading3">Family Matters</a></b></font></dd>
<dd><font size="3"><b><a href="11-01.html#Heading4">Crossing the Gulf to the 286 and the 386</a></b></font></dd>
<dd>
<font size="3"><b><a href="11-01.html#Heading5">In the Lair of the Cycle-Eaters, Part II</a></b></font>
<dl>
<dd><font size="3"><b><a href="11-02.html#Heading6">System Wait States</a></b></font></dd>
<dd><font size="3"><b><a href="11-03.html#Heading7">Data Alignment</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="11-03.html#Heading8">Code Alignment</a></b></font>
<dl>
<dd><font size="3"><b><a href="11-04.html#Heading9">Alignment and the 386</a></b></font></dd>
<dd><font size="3"><b><a href="11-04.html#Heading10">Alignment and the Stack</a></b></font></dd>
<dd><font size="3"><b><a href="11-04.html#Heading11">The DRAM Refresh Cycle-Eater: Still an Act of God</a></b></font></dd>
<dd><font size="3"><b><a href="11-04.html#Heading12">The Display Adapter Cycle-Eater</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="11-05.html#Heading13">New Instructions and Features: The 286</a></b></font></dd>
<dd>
<font size="3"><b><a href="11-05.html#Heading14">New Instructions and Features: The 386</a></b></font>
<dl>
<dd><font size="3"><b><a href="11-06.html#Heading15">Optimization Rules: The More Things Change...</a></b></font></dd>
<dd><font size="3"><b><a href="11-06.html#Heading16">Detailed Optimization</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="11-07.html#Heading17">POPF and the 286</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="12-01.html#Heading1"><b>Chapter 12&mdash;Pushing the 486</b></a>
<dl>
<dd>
<font size="3"><b><a href="12-01.html#Heading2">It&rsquo;s Not Just a Bigger 386</a></b></font>
<dl>
<dd><font size="3"><b><a href="12-01.html#Heading3">Enter the 486</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="12-01.html#Heading4">Rules to Optimize By</a></b></font>
<dl>
<dd><font size="3"><b><a href="12-01.html#Heading5">The Hazards of Indexed Addressing</a></b></font></dd>
<dd><font size="3"><b><a href="12-02.html#Heading6">Calculate Memory Pointers Ahead of Time</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="12-02.html#Heading7">Caveat Programmor</a></b></font>
<dl>
<dd><font size="3"><b><a href="12-03.html#Heading8">Stack Addressing and Address Pipelining</a></b></font></dd>
<dd><font size="3"><b><a href="12-03.html#Heading9">Problems with Byte Registers</a></b></font></dd>
<dd><font size="3"><b><a href="12-04.html#Heading10">More Fun with Byte Registers</a></b></font></dd>
<dd><font size="3"><b><a href="12-04.html#Heading11">Timing Your Own 486 Code</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="12-04.html#Heading12">The Story Continues</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="13-01.html#Heading1"><b>Chapter 13&mdash;Aiming the 486</b></a>
<dl>
<dd>
<font size="3"><b><a href="13-01.html#Heading2">Pipelines and Other Hazards of the High End</a></b></font>
<dl>
<dd><font size="3"><b><a href="13-01.html#Heading3">486 Pipeline Optimization</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="13-02.html#Heading4">BSWAP: More Useful Than You Might Think</a></b></font></dd>
<dd><font size="3"><b><a href="13-03.html#Heading5">Pushing and Popping Memory</a></b></font></dd>
<dd><font size="3"><b><a href="13-03.html#Heading6">Optimal 1-Bit Shifts and Rotates</a></b></font></dd>
<dd><font size="3"><b><a href="13-04.html#Heading7">32-Bit Addressing Modes</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="14-01.html#Heading1"><b>Chapter 14&mdash;Boyer-Moore String Searching</b></a>
<dl>
<dd><font size="3"><b><a href="14-01.html#Heading2">Optimizing a Pretty Optimum Search Algorithm</a></b></font></dd>
<dd><font size="3"><b><a href="14-01.html#Heading3">String Searching Refresher</a></b></font></dd>
<dd><font size="3"><b><a href="14-02.html#Heading4">The Boyer-Moore Algorithm</a></b></font></dd>
<dd><font size="3"><b><a href="14-02.html#Heading5">Boyer-Moore: The Good and the Bad</a></b></font></dd>
<dd><font size="3"><b><a href="14-06.html#Heading6">Further Optimization of Boyer-Moore</a></b></font></dd>
<dd><font size="3"><b><a href="14-06.html#Heading7">Know What You Know</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="15-01.html#Heading1"><b>Chapter 15&mdash;Linked Lists and plain Unintended Challenges</b></a>
<dl>
<dd><font size="3"><b><a href="15-01.html#Heading2">Unfamiliar Problems with Familiar Data Structures</a></b></font></dd>
<dd><font size="3"><b><a href="15-01.html#Heading3">Linked Lists</a></b></font></dd>
<dd><font size="3"><b><a href="15-02.html#Heading4">Dummies and Sentinels</a></b></font></dd>
<dd><font size="3"><b><a href="15-03.html#Heading5">Circular Lists</a></b></font></dd>
<dd><font size="3"><b><a href="15-04.html#Heading6">Hi/Lo in 24 Bytes</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="16-01.html#Heading1"><b>Chapter 16&mdash;There Ain&rsquo;t No Such Thing as the Fastest Code</b></a>
<dl>
<dd><font size="3"><b><a href="16-01.html#Heading2">Lessons Learned in the Pursuit of the Ultimate Word Counter</a></b></font></dd>
<dd>
<font size="3"><b><a href="16-01.html#Heading3">Counting Words in a Hurry</a></b></font>
<dl>
<dd><font size="3"><b><a href="16-02.html#Heading4">Which Way to Go from Here?</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="16-03.html#Heading5">Challenges and Hazards</a></b></font>
<dl>
<dd><font size="3"><b><a href="16-04.html#Heading6">Blinding Yourself to a Better Approach</a></b></font></dd>
<dd><font size="3"><b><a href="16-04.html#Heading7">Watch Out for Luggable Assumptions!</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="16-04.html#Heading8">The Astonishment of Right-Brain Optimization</a></b></font></dd>
<dd>
<font size="3"><b><a href="16-06.html#Heading9">Levels of Optimization</a></b></font>
<dl>
<dd><font size="3"><b><a href="16-06.html#Heading10">Optimization Level 1: Good Code</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="16-07.html#Heading11">Level 2: A New Perspective</a></b></font>
<dl>
<dd><font size="3"><b><a href="16-08.html#Heading12">Level 3: Breakthrough</a></b></font></dd>
<dd><font size="3"><b><a href="16-08.html#Heading13">Enough Word Counting Already!</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="17-01.html#Heading1"><b>Chapter 17&mdash;The Game of Life</b></a>
<dl>
<dd><font size="3"><b><a href="17-01.html#Heading2">The Triumph of Algorithmic Optimization in a Cellular Automata Game</a></b></font></dd>
<dd>
<font size="3"><b><a href="17-01.html#Heading3">Conway&rsquo;s Game</a></b></font>
<dl>
<dd><font size="3"><b><a href="17-01.html#Heading4">The Rules of the Game</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="17-03.html#Heading5">Where Does the Time Go?</a></b></font></dd>
<dd><font size="3"><b><a href="17-03.html#Heading6">The Hazards and Advantages of Abstraction</a></b></font></dd>
<dd><font size="3"><b><a href="17-05.html#Heading7">Heavy-Duty C++ Optimization</a></b></font></dd>
<dd>
<font size="3"><b><a href="17-06.html#Heading8">Bringing In the Right Brain</a></b></font>
<dl>
<dd><font size="3"><b><a href="17-06.html#Heading9">Re-Examining the Task</a></b></font></dd>
<dd><font size="3"><b><a href="17-06.html#Heading10">Acting on What We Know</a></b></font></dd>
<dd><font size="3"><b><a href="17-08.html#Heading11">The Challenge That Ate My Life</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="18-01.html#Heading1"><b>Chapter 18&mdash;It&rsquo;s a plain Wonderful Life</b></a>
<dl>
<dd><font size="3"><b><a href="18-01.html#Heading2">Optimization beyond the Pale</a></b></font></dd>
<dd><font size="3"><b><a href="18-01.html#Heading3">Breaking the Rules</a></b></font></dd>
<dd><font size="3"><b><a href="18-02.html#Heading4">Table-Driven Magic</a></b></font></dd>
<dd>
<font size="3"><b><a href="18-04.html#Heading5">Keeping Track of Change with a Change List</a></b></font>
<dl>
<dd><font size="3"><b><a href="18-05.html#Heading6">A Layperson&rsquo;s Overview of QLIFE</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="19-01.html#Heading1"><b>Chapter 19&mdash;Pentium: Not the Same Old Song</b></a>
<dl>
<dd><font size="3"><b><a href="19-01.html#Heading2">Learning a Whole Different Set of Optimization Rules</a></b></font></dd>
<dd><font size="3"><b><a href="19-01.html#Heading3">The Return of Optimization as Art</a></b></font></dd>
<dd>
<font size="3"><b><a href="19-01.html#Heading4">The Pentium: An Overview</a></b></font>
<dl>
<dd><font size="3"><b><a href="19-02.html#Heading5">Crossing Cache Lines</a></b></font></dd>
<dd><font size="3"><b><a href="19-02.html#Heading6">Cache Organization</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="19-03.html#Heading7">Faster Addressing and More</a></b></font></dd>
<dd><font size="3"><b><a href="19-04.html#Heading8">Branch Prediction</a></b></font></dd>
<dd>
<font size="3"><b><a href="19-04.html#Heading9">Miscellaneous Pentium Topics</a></b></font>
<dl>
<dd><font size="3"><b><a href="19-04.html#Heading10">486 versus Pentium Optimization</a></b></font></dd>
<dd><font size="3"><b><a href="19-04.html#Heading11">Going Superscalar</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="20-01.html#Heading1"><b>Chapter 20&mdash;Pentium Rules</b></a>
<dl>
<dd><font size="3"><b><a href="20-01.html#Heading2">How Your Carbon-Based Optimizer Can Put the &ldquo;Super&rdquo; in Superscalar</a></b></font></dd>
<dd><font size="3"><b><a href="20-01.html#Heading3">An Instruction in Every Pipe</a></b></font></dd>
<dd><font size="3"><b><a href="20-02.html#Heading4">V-Pipe-Capable Instructions</a></b></font></dd>
<dd><font size="3"><b><a href="20-03.html#Heading5">Lockstep Execution</a></b></font></dd>
<dd>
<font size="3"><b><a href="20-04.html#Heading6">Superscalar Notes</a></b></font>
<dl>
<dd><font size="3"><b><a href="20-04.html#Heading7">Register Starvation</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="21-01.html#Heading1"><b>Chapter 21&mdash;Unleashing the Pentium&rsquo;s V-Pipe</b></a>
<dl>
<dd><font size="3"><b><a href="21-01.html#Heading2">Focusing on Keeping Both Pentium Pipes Full</a></b></font></dd>
<dd><font size="3"><b><a href="21-01.html#Heading3">Address Generation Interlocks</a></b></font></dd>
<dd>
<font size="3"><b><a href="21-02.html#Heading4">Register Contention</a></b></font>
<dl>
<dd><font size="3"><b><a href="21-02.html#Heading5">Exceptions to Register Contention</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="21-02.html#Heading6">Who&rsquo;s in First?</a></b></font></dd>
<dd>
<font size="3"><b><a href="21-03.html#Heading7">Pentium Optimization in Action</a></b></font>
<dl>
<dd><font size="3"><b><a href="21-05.html#Heading8">A Quick Note on the 386 and 486</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="22-01.html#Heading1"><b>Chapter 22&mdash;Zenning and the Flexible Mind</b></a>
<dl>
<dd><font size="3"><b><a href="22-01.html#Heading2">Taking a Spin through What You&rsquo;ve Learned</a></b></font></dd>
<dd><font size="3"><b><a href="22-01.html#Heading3">Zenning</a></b></font></dd>
</dl>
</dd>
</dl><br />
</dd>
<dd>
<a href="23-01.html"><b>Part II</b></a>
<dl>
<dd>
<a href="23-01.html#Heading1"><b>Chapter 23&mdash;Bones and Sinew</b></a>
<dl>
<dd><font size="3"><b><a href="23-01.html#Heading2">At the Very Heart of Standard PC Graphics</a></b></font></dd>
<dd><font size="3"><b><a href="23-01.html#Heading3">The VGA</a></b></font></dd>
<dd><font size="3"><b><a href="23-01.html#Heading4">An Introduction to VGA Programming</a></b></font></dd>
<dd>
<font size="3"><b><a href="23-02.html#Heading5">At the Core</a></b></font>
<dl>
<dd><font size="3"><b><a href="23-03.html#Heading6">Linear Planes and True VGA Modes</a></b></font></dd>
<dd><font size="3"><b><a href="23-04.html#Heading7">Smooth Panning</a></b></font></dd>
<dd><font size="3"><b><a href="23-05.html#Heading8">Color Plane Manipulation</a></b></font></dd>
<dd><font size="3"><b><a href="23-05.html#Heading9">Page Flipping</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="23-06.html#Heading10">The Hazards of VGA Clones</a></b></font></dd>
<dd><font size="3"><b><a href="23-06.html#Heading11">Just the Beginning</a></b></font></dd>
<dd><font size="3"><b><a href="23-06.html#Heading12">The Macro Assembler</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="24-01.html#Heading1"><b>Chapter 24&mdash;Parallel Processing with the VGA</b></a>
<dl>
<dd><font size="3"><b><a href="24-01.html#Heading2">Taking on Graphics Memory Four Bytes at a Time</a></b></font></dd>
<dd><font size="3"><b><a href="24-01.html#Heading3">VGA Programming: ALUs and Latches</a></b></font></dd>
<dd><font size="3"><b><a href="24-03.html#Heading4">Notes on the ALU/Latch Demo Program</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="25-01.html#Heading1"><b>Chapter 25&mdash;VGA Data Machinery</b></a>
<dl>
<dd><font size="3"><b><a href="25-01.html#Heading2">The Barrel Shifter, Bit Mask, and Set/Reset Mechanisms</a></b></font></dd>
<dd><font size="3"><b><a href="25-01.html#Heading3">VGA Data Rotation</a></b></font></dd>
<dd><font size="3"><b><a href="25-01.html#Heading4">The Bit Mask</a></b></font></dd>
<dd>
<font size="3"><b><a href="25-03.html#Heading5">The VGA&rsquo;s Set/Reset Circuitry</a></b></font>
<dl>
<dd><font size="3"><b><a href="25-04.html#Heading6">Setting All Planes to a Single Color</a></b></font></dd>
<dd><font size="3"><b><a href="25-05.html#Heading7">Manipulating Planes Individually</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="25-06.html#Heading8">Notes on Set/Reset</a></b></font></dd>
<dd><font size="3"><b><a href="25-06.html#Heading9">A Brief Note on Word OUTs</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="26-01.html#Heading1"><b>Chapter 26&mdash;VGA Write Mode 3</b></a>
<dl>
<dd><font size="3"><b><a href="26-01.html#Heading2">The Write Mode That Grows on You</a></b></font></dd>
<dd><font size="3"><b><a href="26-01.html#Heading3">A Mode Born in Strangeness</a></b></font></dd>
<dd><font size="3"><b><a href="26-03.html#Heading4">A Note on Preserving Register Bits</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="27-01.html#Heading1"><b>Chapter 27&mdash;Yet Another VGA Write Mode</b></a>
<dl>
<dd><font size="3"><b><a href="27-01.html#Heading2">Write Mode 2, Chunky Bitmaps,and Text-Graphics Coexistence</a></b></font></dd>
<dd>
<font size="3"><b><a href="27-01.html#Heading3">Write Mode 2 and Set/Reset</a></b></font>
<dl>
<dd><font size="3"><b><a href="27-01.html#Heading4">A Byte&rsquo;s Progress in Write Mode 2</a></b></font></dd>
<dd><font size="3"><b><a href="27-02.html#Heading5">Copying Chunky Bitmaps to VGA Memory Using Write Mode 2</a></b></font></dd>
<dd><font size="3"><b><a href="27-03.html#Heading6">Drawing Color-Patterned Lines Using Write Mode 2</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="27-04.html#Heading7">When to Use Write Mode 2 and When to Use Set/Reset</a></b></font></dd>
<dd><font size="3"><b><a href="27-04.html#Heading8">Mode 13H&mdash;320x200 with 256 Colors</a></b></font></dd>
<dd><font size="3"><b><a href="27-04.html#Heading9">Flipping Pages from Text to Graphics and Back</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="28-01.html#Heading1"><b>Chapter 28&mdash;Reading VGA Memory</b></a>
<dl>
<dd><font size="3"><b><a href="28-01.html#Heading2">Read Modes 0 and 1, and the Color Don&rsquo;t Care Register</a></b></font></dd>
<dd><font size="3"><b><a href="28-01.html#Heading3">Read Mode 0</a></b></font></dd>
<dd><font size="3"><b><a href="28-03.html#Heading4">Read Mode 1</a></b></font></dd>
<dd><font size="3"><b><a href="28-04.html#Heading5">When all Planes &ldquo;Don&rsquo;t Care&rdquo;</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="29-01.html#Heading1"><b>Chapter 29&mdash;Saving Screens and Other VGA Mysteries</b></a>
<dl>
<dd><font size="3"><b><a href="29-01.html#Heading2">Useful Nuggets from the VGA Zen File</a></b></font></dd>
<dd><font size="3"><b><a href="29-01.html#Heading3">Saving and Restoring EGA and VGA Screens</a></b></font></dd>
<dd><font size="3"><b><a href="29-03.html#Heading4">16 Colors out of 64</a></b></font></dd>
<dd><font size="3"><b><a href="29-05.html#Heading5">Overscan</a></b></font></dd>
<dd><font size="3"><b><a href="29-05.html#Heading6">A Bonus Blanker</a></b></font></dd>
<dd><font size="3"><b><a href="29-06.html#Heading7">Modifying VGA Registers</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="30-01.html#Heading1"><b>Chapter 30&mdash;Video Est Omnis Divisa</b></a>
<dl>
<dd><font size="3"><b><a href="30-01.html#Heading2">The Joys and Galling Problems of Using Split Screens on the EGA and VGA</a></b></font></dd>
<dd>
<font size="3"><b><a href="30-01.html#Heading3">How the Split Screen Works</a></b></font>
<dl>
<dd><font size="3"><b><a href="30-01.html#Heading4">The Split Screen in Action</a></b></font></dd>
<dd><font size="3"><b><a href="30-03.html#Heading5">VGA and EGA Split-Screen Operation Don&rsquo;t Mix</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="30-03.html#Heading6">Setting the Split-Screen-Related Registers</a></b></font></dd>
<dd><font size="3"><b><a href="30-03.html#Heading7">The Problem with the EGA Split Screen</a></b></font></dd>
<dd>
<font size="3"><b><a href="30-04.html#Heading8">Split Screen and Panning</a></b></font>
<dl>
<dd><font size="3"><b><a href="30-04.html#Heading9">The Split Screen and Horizontal Panning: An Example</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="30-06.html#Heading10">Notes on Setting and Reading Registers</a></b></font></dd>
<dd><font size="3"><b><a href="30-07.html#Heading11">Split Screens in Other Modes</a></b></font></dd>
<dd><font size="3"><b><a href="30-07.html#Heading12">How Safe?</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="31-01.html#Heading1"><b>Chapter 31&mdash;Higher 256-Color Resolution on the VGA</b></a>
<dl>
<dd><font size="3"><b><a href="31-01.html#Heading2">When Is 320x200 Really 320x400?</a></b></font></dd>
<dd><font size="3"><b><a href="31-01.html#Heading3">Why 320x200? Only IBM Knows for Sure</a></b></font></dd>
<dd>
<font size="3"><b><a href="31-01.html#Heading4">320x400 256-Color Mode</a></b></font>
<dl>
<dd><font size="3"><b><a href="31-01.html#Heading5">Display Memory Organization in 320x400 Mode</a></b></font></dd>
<dd><font size="3"><b><a href="31-02.html#Heading6">Reading and Writing Pixels</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="31-04.html#Heading7">Two 256-Color Pages</a></b></font></dd>
<dd><font size="3"><b><a href="31-05.html#Heading8">Something to Think About</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="32-01.html#Heading1"><b>Chapter 32&mdash;Be It Resolved: 360x480</b></a>
<dl>
<dd><font size="3"><b><a href="32-01.html#Heading2">Taking 256-Color Modes About as Far as the Standard VGA Can Take Them</a></b></font></dd>
<dd><font size="3"><b><a href="32-01.html#Heading3">Extended 256-Color Modes: What&rsquo;s Not to Like?</a></b></font></dd>
<dd><font size="3"><b><a href="32-01.html#Heading4">360x480 256-Color Mode</a></b></font></dd>
<dd>
<font size="3"><b><a href="32-04.html#Heading5">How 360x480 256-Color Mode Works</a></b></font>
<dl>
<dd><font size="3"><b><a href="32-04.html#Heading6">480 Scan Lines per Screen: A Little Slower, But No Big Deal</a></b></font></dd>
<dd><font size="3"><b><a href="32-04.html#Heading7">360 Pixels per Scan Line: No Mean Feat</a></b></font></dd>
<dd><font size="3"><b><a href="32-05.html#Heading8">Accessing Display Memory in 360x480 256-Color Mode</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="33-01.html#Heading1"><b>Chapter 33&mdash;Yogi Bear and Eurythmics Confront VGA Colors</b></a>
<dl>
<dd><font size="3"><b><a href="33-01.html#Heading2">The Basics of VGA Color Generation</a></b></font></dd>
<dd>
<font size="3"><b><a href="33-01.html#Heading3">VGA Color Basics</a></b></font>
<dl>
<dd><font size="3"><b><a href="33-01.html#Heading4">The Palette RAM</a></b></font></dd>
<dd><font size="3"><b><a href="33-01.html#Heading5">The DAC</a></b></font></dd>
<dd><font size="3"><b><a href="33-02.html#Heading6">Color Paging with the Color Select Register</a></b></font></dd>
<dd><font size="3"><b><a href="33-02.html#Heading7">256-Color Mode</a></b></font></dd>
<dd><font size="3"><b><a href="33-02.html#Heading8">Setting the Palette RAM</a></b></font></dd>
<dd><font size="3"><b><a href="33-03.html#Heading9">Setting the DAC</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="33-03.html#Heading10">If You Can&rsquo;t Call the BIOS, Who Ya Gonna Call?</a></b></font></dd>
<dd><font size="3"><b><a href="33-03.html#Heading11">An Example of Setting the DAC</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="34-01.html#Heading1"><b>Chapter 34&mdash;Changing Colors without Writing Pixels</b></a>
<dl>
<dd><font size="3"><b><a href="34-01.html#Heading2">Special Effects through Realtime Manipulation of DAC Colors</a></b></font></dd>
<dd><font size="3"><b><a href="34-01.html#Heading3">Color Cycling</a></b></font></dd>
<dd>
<font size="3"><b><a href="34-01.html#Heading4">The Heart of the Problem</a></b></font>
<dl>
<dd><font size="3"><b><a href="34-02.html#Heading5">Loading the DAC via the BIOS</a></b></font></dd>
<dd><font size="3"><b><a href="34-02.html#Heading6">Loading the DAC Directly</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="34-03.html#Heading7">A Test Program for Color Cycling</a></b></font></dd>
<dd><font size="3"><b><a href="34-04.html#Heading8">Color Cycling Approaches that Work</a></b></font></dd>
<dd>
<font size="3"><b><a href="34-05.html#Heading9">Odds and Ends</a></b></font>
<dl>
<dd><font size="3"><b><a href="34-05.html#Heading10">The DAC Mask</a></b></font></dd>
<dd><font size="3"><b><a href="34-05.html#Heading11">Reading the DAC</a></b></font></dd>
<dd><font size="3"><b><a href="34-05.html#Heading12">Cycling Down</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="35-01.html#Heading1"><b>Chapter 35&mdash;Bresenham Is Fast, and Fast Is Good</b></a>
<dl>
<dd><font size="3"><b><a href="35-01.html#Heading2">Implementing and Optimizing Bresenham&rsquo;s Line-Drawing Algorithm</a></b></font></dd>
<dd><font size="3"><b><a href="35-01.html#Heading3">The Task at Hand</a></b></font></dd>
<dd>
<font size="3"><b><a href="35-01.html#Heading4">Bresenham&rsquo;s Line-Drawing Algorithm</a></b></font>
<dl>
<dd><font size="3"><b><a href="35-02.html#Heading5">Strengths and Weaknesses</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="35-03.html#Heading6">An Implementation in C</a></b></font>
<dl>
<dd><font size="3"><b><a href="35-04.html#Heading7">Looking at EVGALine</a></b></font></dd>
<dd><font size="3"><b><a href="35-05.html#Heading8">Drawing Each Line</a></b></font></dd>
<dd><font size="3"><b><a href="35-05.html#Heading9">Drawing Each Pixel</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="35-06.html#Heading10">Comments on the C Implementation</a></b></font></dd>
<dd><font size="3"><b><a href="35-06.html#Heading11">Bresenham&rsquo;s Algorithm in Assembly</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="36-01.html#Heading1"><b>Chapter 36&mdash;The Good, the Bad, and the Run-Sliced</b></a>
<dl>
<dd><font size="3"><b><a href="36-01.html#Heading2">Faster Bresenham Lines with Run-Length Slice Line Drawing</a></b></font></dd>
<dd><font size="3"><b><a href="36-01.html#Heading3">Run-Length Slice Fundamentals</a></b></font></dd>
<dd><font size="3"><b><a href="36-02.html#Heading4">Run-Length Slice Implementation</a></b></font></dd>
<dd><font size="3"><b><a href="36-03.html#Heading5">Run-Length Slice Details</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="37-01.html#Heading1"><b>Chapter 37&mdash;Dead Cats and Lightning Lines</b></a>
<dl>
<dd><font size="3"><b><a href="37-01.html#Heading2">Optimizing Run-Length Slice Line Drawing in a Major Way</a></b></font></dd>
<dd>
<font size="3"><b><a href="37-01.html#Heading3">Fast Run-Length Slice Line Drawing</a></b></font>
<dl>
<dd><font size="3"><b><a href="37-02.html#Heading4">How Fast Is Fast?</a></b></font></dd>
<dd><font size="3"><b><a href="37-02.html#Heading5">Further Optimizations</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="38-01.html#Heading1"><b>Chapter 38&mdash;The Polygon Primeval</b></a>
<dl>
<dd><font size="3"><b><a href="38-01.html#Heading2">Drawing Polygons Efficiently and Quickly</a></b></font></dd>
<dd>
<font size="3"><b><a href="38-01.html#Heading3">Filled Polygons</a></b></font>
<dl>
<dd><font size="3"><b><a href="38-01.html#Heading4">Which Side Is Inside?</a></b></font></dd>
<dd><font size="3"><b><a href="38-02.html#Heading5">How Do You Fit Polygons Together?</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="38-02.html#Heading6">Filling Non-Overlapping Convex Polygons</a></b></font></dd>
<dd><font size="3"><b><a href="38-04.html#Heading7">Oddball Cases</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="39-01.html#Heading1"><b>Chapter 39&mdash;Fast Convex Polygons</b></a>
<dl>
<dd><font size="3"><b><a href="39-01.html#Heading2">Filling Polygons in a Hurry</a></b></font></dd>
<dd>
<font size="3"><b><a href="39-01.html#Heading3">Fast Convex Polygon Filling</a></b></font>
<dl>
<dd><font size="3"><b><a href="39-01.html#Heading4">Fast Drawing</a></b></font></dd>
<dd><font size="3"><b><a href="39-02.html#Heading5">Fast Edge Tracing</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="39-03.html#Heading6">The Finishing Touch: Assembly Language</a></b></font>
<dl>
<dd><font size="3"><b><a href="39-04.html#Heading7">Maximizing REP STOS</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="39-04.html#Heading8">Faster Edge Tracing</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="40-01.html#Heading1"><b>Chapter 40&mdash;Of Songs, Taxes, and the Simplicity of Complex Polygons</b></a>
<dl>
<dd><font size="3"><b><a href="40-01.html#Heading2">Dealing with Irregular Polygonal Areas</a></b></font></dd>
<dd>
<font size="3"><b><a href="40-01.html#Heading3">Filling Arbitrary Polygons</a></b></font>
<dl>
<dd><font size="3"><b><a href="40-01.html#Heading4">Active Edges</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="40-03.html#Heading5">Complex Polygon Filling: An Implementation</a></b></font>
<dl>
<dd><font size="3"><b><a href="40-04.html#Heading6">More on Active Edges</a></b></font></dd>
<dd><font size="3"><b><a href="40-04.html#Heading7">Performance Considerations</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="40-05.html#Heading8">Nonconvex Polygons</a></b></font>
<dl>
<dd><font size="3"><b><a href="40-05.html#Heading9">Details, Details</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="41-01.html#Heading1"><b>Chapter 41&mdash;Those Way-Down Polygon Nomenclature Blues</b></a>
<dl>
<dd><font size="3"><b><a href="41-01.html#Heading2">Names Do Matter when You Conceptualize a Data Structure</a></b></font></dd>
<dd><font size="3"><b><a href="41-01.html#Heading3">Nomenclature in Action</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="42-01.html#Heading1"><b>Chapter 42&mdash;Wu&rsquo;ed in Haste; Fried, Stewed at Leisure</b></a>
<dl>
<dd><font size="3"><b><a href="42-01.html#Heading2">Fast Antialiased Lines Using Wu&rsquo;s Algorithm</a></b></font></dd>
<dd><font size="3"><b><a href="42-01.html#Heading3">Wu Antialiasing</a></b></font></dd>
<dd><font size="3"><b><a href="42-02.html#Heading4">Tracing and Intensity in One</a></b></font></dd>
<dd>
<font size="3"><b><a href="42-03.html#Heading5">Sample Wu Antialiasing</a></b></font>
<dl>
<dd><font size="3"><b><a href="42-05.html#Heading6">Notes on Wu Antialiasing</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="43-01.html#Heading1"><b>Chapter 43&mdash;Bit-Plane Animation</b></a>
<dl>
<dd><font size="3"><b><a href="43-01.html#Heading2">A Simple and Extremely Fast Animation Method for Limited Color</a></b></font></dd>
<dd>
<font size="3"><b><a href="43-01.html#Heading3">Bit-Planes: The Basics</a></b></font>
<dl>
<dd><font size="3"><b><a href="43-02.html#Heading4">Stacking the Palette Registers</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="43-02.html#Heading5">Bit-Plane Animation in Action</a></b></font></dd>
<dd><font size="3"><b><a href="43-04.html#Heading6">Limitations of Bit-Plane Animation</a></b></font></dd>
<dd><font size="3"><b><a href="43-05.html#Heading7">Shearing and Page Flipping</a></b></font></dd>
<dd><font size="3"><b><a href="43-06.html#Heading8">Beating the Odds in the Jaw-Dropping Contest</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="44-01.html#Heading1"><b>Chapter 44&mdash;Split Screens Save the Page Flipped Day</b></a>
<dl>
<dd>
<font size="3"><b><a href="44-01.html#Heading2">640x480 Page Flipped Animation in 64K...Almost</a></b></font>
<dl>
<dd><font size="3"><b><a href="44-01.html#Heading3">A Plethora of Challenges</a></b></font></dd>
<dd>
<font size="3"><b><a href="44-01.html#Heading4">A Page Flipping Animation Demonstration</a></b></font>
<dl>
<dd><font size="3"><b><a href="44-04.html#Heading5">Write Mode 3</a></b></font></dd>
<dd><font size="3"><b><a href="44-04.html#Heading6">Drawing Text</a></b></font></dd>
<dd><font size="3"><b><a href="44-05.html#Heading7">Page Flipping</a></b></font></dd>
<dd><font size="3"><b><a href="44-06.html#Heading8">Knowing When to Flip</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="44-06.html#Heading9">Enter the Split Screen</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="45-01.html#Heading1"><b>Chapter 45&mdash;Dog Hair and Dirty Rectangles</b></a>
<dl>
<dd><font size="3"><b><a href="45-01.html#Heading2">Different Angles on Animation</a></b></font></dd>
<dd><font size="3"><b><a href="45-01.html#Heading3">Plus &ccedil;a Change</a></b></font></dd>
<dd><font size="3"><b><a href="45-01.html#Heading4">VGA Access Times</a></b></font></dd>
<dd>
<font size="3"><b><a href="45-02.html#Heading5">Dirty-Rectangle Animation</a></b></font>
<dl>
<dd><font size="3"><b><a href="45-02.html#Heading6">So Why Not Use Page Flipping?</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="45-03.html#Heading7">Dirty Rectangles in Action</a></b></font></dd>
<dd><font size="3"><b><a href="45-04.html#Heading8">Hi-Res VGA Page Flipping</a></b></font></dd>
<dd><font size="3"><b><a href="45-06.html#Heading9">Another Interesting Twist on Page Flipping</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="46-01.html#Heading1"><b>Chapter 46&mdash;Who Was that Masked Image?</b></a>
<dl>
<dd>
<font size="3"><b><a href="46-01.html#Heading2">Optimizing Dirty-Rectangle Animation</a></b></font>
<dl>
<dd><font size="3"><b><a href="46-01.html#Heading3">Dirty-Rectangle Animation, Continued</a></b></font></dd>
<dd><font size="3"><b><a href="46-03.html#Heading4">Masked Images</a></b></font></dd>
<dd>
<font size="3"><b><a href="46-03.html#Heading5">Internal Animation</a></b></font>
<dl>
<dd><font size="3"><b><a href="46-03.html#Heading6">Dirty-Rectangle Management</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="46-03.html#Heading7">Drawing Order and Visual Quality</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="47-01.html#Heading1"><b>Chapter 47&mdash;Mode X: 256-Color VGA Magic</b></a>
<dl>
<dd><font size="3"><b><a href="47-01.html#Heading2">Introducing the VGA&rsquo;s Undocumented &ldquo;Animation-Optimal&rdquo; Mode</a></b></font></dd>
<dd><font size="3"><b><a href="47-01.html#Heading3">What Makes Mode X Special?</a></b></font></dd>
<dd><font size="3"><b><a href="47-02.html#Heading4">Selecting 320x240 256-Color Mode</a></b></font></dd>
<dd><font size="3"><b><a href="47-04.html#Heading5">Designing from a Mode X Perspective</a></b></font></dd>
<dd><font size="3"><b><a href="47-06.html#Heading6">Hardware Assist from an Unexpected Quarter</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="48-01.html#Heading1"><b>Chapter 48&mdash;Mode X Marks the Latch</b></a>
<dl>
<dd><font size="3"><b><a href="48-01.html#Heading2">The Internals of Animation&rsquo;s Best Video Display Mode</a></b></font></dd>
<dd><font size="3"><b><a href="48-03.html#Heading3">Allocating Memory in Mode X</a></b></font></dd>
<dd>
<font size="3"><b><a href="48-03.html#Heading4">Copying Pixel Blocks within Display Memory</a></b></font>
<dl>
<dd><font size="3"><b><a href="48-05.html#Heading5">Copying to Display Memory</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="48-05.html#Heading6">Who Was that Masked Image Copier?</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="49-01.html#Heading1"><b>Chapter 49&mdash;Mode X 256-Color Animation</b></a>
<dl>
<dd><font size="3"><b><a href="49-01.html#Heading2">How to Make the VGA Really Get up and Dance</a></b></font></dd>
<dd>
<font size="3"><b><a href="49-01.html#Heading3">Masked Copying</a></b></font>
<dl>
<dd><font size="3"><b><a href="49-02.html#Heading4">Faster Masked Copying</a></b></font></dd>
<dd><font size="3"><b><a href="49-03.html#Heading5">Notes on Masked Copying</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="49-04.html#Heading6">Animation</a></b></font></dd>
<dd><font size="3"><b><a href="49-04.html#Heading7">Mode X Animation in Action</a></b></font></dd>
<dd><font size="3"><b><a href="49-05.html#Heading8">Works Fast, Looks Great</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="50-01.html#Heading1"><b>Chapter 50&mdash;Adding a Dimension</b></a>
<dl>
<dd><font size="3"><b><a href="50-01.html#Heading2">3-D Animation Using Mode X</a></b></font></dd>
<dd><font size="3"><b><a href="50-01.html#Heading3">References on 3-D Drawing</a></b></font></dd>
<dd>
<font size="3"><b><a href="50-01.html#Heading4">The 3-D Drawing Pipeline</a></b></font>
<dl>
<dd><font size="3"><b><a href="50-02.html#Heading5">Projection</a></b></font></dd>
<dd><font size="3"><b><a href="50-02.html#Heading6">Translation</a></b></font></dd>
<dd><font size="3"><b><a href="50-02.html#Heading7">Rotation</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="50-02.html#Heading8">A Simple 3-D Example</a></b></font>
<dl>
<dd><font size="3"><b><a href="50-07.html#Heading9">Notes on the 3-D Animation Example</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="50-07.html#Heading10">An Ongoing Journey</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="51-01.html#Heading1"><b>Chapter 51&mdash;Sneakers in Space</b></a>
<dl>
<dd><font size="3"><b><a href="51-01.html#Heading2">Using Backface Removal to Eliminate Hidden Surfaces</a></b></font></dd>
<dd>
<font size="3"><b><a href="51-01.html#Heading3">One-sided Polygons: Backface Removal</a></b></font>
<dl>
<dd><font size="3"><b><a href="51-02.html#Heading4">Backface Removal in Action</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="51-05.html#Heading5">Incremental Transformation</a></b></font></dd>
<dd><font size="3"><b><a href="51-06.html#Heading6">A Note on Rounding Negative Numbers</a></b></font></dd>
<dd><font size="3"><b><a href="51-06.html#Heading7">Object Representation</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="52-01.html#Heading1"><b>Chapter 52&mdash;Fast 3-D Animation: Meet X-Sharp</b></a>
<dl>
<dd><font size="3"><b><a href="52-01.html#Heading2">The First Iteration of a Generalized 3-D Animation Package</a></b></font></dd>
<dd><font size="3"><b><a href="52-01.html#Heading3">This Chapter&rsquo;s Demo Program</a></b></font></dd>
<dd><font size="3"><b><a href="52-07.html#Heading4">A New Animation Framework: X-Sharp</a></b></font></dd>
<dd>
<font size="3"><b><a href="52-07.html#Heading5">Three Keys to Realtime Animation Performance</a></b></font>
<dl>
<dd><font size="3"><b><a href="52-08.html#Heading6">Drawbacks</a></b></font></dd>
<dd><font size="3"><b><a href="52-08.html#Heading7">Where the Time Goes</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="53-01.html#Heading1"><b>Chapter 53&mdash;Raw Speed and More</b></a>
<dl>
<dd><font size="3"><b><a href="53-01.html#Heading2">The Naked Truth About Speed in 3-D Animation</a></b></font></dd>
<dd><font size="3"><b><a href="53-01.html#Heading3">Raw Speed, Part 1: Assembly Language</a></b></font></dd>
<dd>
<font size="3"><b><a href="53-03.html#Heading4">Raw Speed, Part II: Look it Up</a></b></font>
<dl>
<dd><font size="3"><b><a href="53-03.html#Heading5">Hidden Surfaces</a></b></font></dd>
<dd><font size="3"><b><a href="53-04.html#Heading6">Rounding</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="54-01.html#Heading1"><b>Chapter 54&mdash;3-D Shading</b></a>
<dl>
<dd><font size="3"><b><a href="54-01.html#Heading2">Putting Realistic Surfaces on Animated 3-D Objects</a></b></font></dd>
<dd>
<font size="3"><b><a href="54-01.html#Heading3">Support for Older Processors</a></b></font>
<dl>
<dd>
<font size="3"><b><a href="54-03.html#Heading4">Shading</a></b></font>
<dl>
<dd><font size="3"><b><a href="54-03.html#Heading5">Ambient Shading</a></b></font></dd>
<dd><font size="3"><b><a href="54-03.html#Heading6">Diffuse Shading</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="54-05.html#Heading7">Shading: Implementation Details</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="55-01.html#Heading1"><b>Chapter 55&mdash;Color Modeling in 256-Color Mode</b></a>
<dl>
<dd>
<font size="3"><b><a href="55-01.html#Heading2">Pondering X-Sharp&rsquo;s Color Model in an RGB State of Mind</a></b></font>
<dl>
<dd><font size="3"><b><a href="55-01.html#Heading3">A Color Model</a></b></font></dd>
<dd><font size="3"><b><a href="55-03.html#Heading4">A Bonus from the BitMan</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="56-01.html#Heading1"><b>Chapter 56&mdash;Pooh and the Space Station</b></a>
<dl>
<dd><font size="3"><b><a href="56-01.html#Heading2">Using Fast Texture Mapping to Place Pooh on a Polygon</a></b></font></dd>
<dd>
<font size="3"><b><a href="56-01.html#Heading3">Principles of Quick-and-Dirty Texture Mapping</a></b></font>
<dl>
<dd><font size="3"><b><a href="56-01.html#Heading4">Mapping Textures Made Easy</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="56-03.html#Heading5">Fast Texture Mapping: An Implementation</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="57-01.html#Heading1"><b>Chapter 57&mdash;10,000 Freshly Sheared Sheep on the Screen</b></a>
<dl>
<dd>
<font size="3"><b><a href="57-01.html#Heading2">The Critical Role of Experience in Implementing Fast, Smooth Texture Mapping</a></b></font>
<dl>
<dd><font size="3"><b><a href="57-01.html#Heading3">Visual Quality: A Black Hole ... Er, Art</a></b></font></dd>
<dd><font size="3"><b><a href="57-01.html#Heading4">Fixed-Point Arithmetic, Redux</a></b></font></dd>
<dd><font size="3"><b><a href="57-02.html#Heading5">Texture Mapping: Orientation Independence</a></b></font></dd>
<dd>
<font size="3"><b><a href="57-02.html#Heading6">Mapping Textures across Multiple Polygons</a></b></font>
<dl>
<dd><font size="3"><b><a href="57-02.html#Heading7">Fast Texture Mapping</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="58-01.html#Heading1"><b>Chapter 58&mdash;Heinlein&rsquo;s Crystal Ball, Spock&rsquo;s Brain, and the 9-Cycle Dare</b></a>
<dl>
<dd><font size="3"><b><a href="58-01.html#Heading2">Using the Whole-Brain Approach to Accelerate Texture Mapping</a></b></font></dd>
<dd>
<font size="3"><b><a href="58-01.html#Heading3">Texture Mapping Redux</a></b></font>
<dl>
<dd><font size="3"><b><a href="58-01.html#Heading4">Left-Brain Optimization</a></b></font></dd>
<dd><font size="3"><b><a href="58-02.html#Heading5">A 90-Degree Shift in Perspective</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="58-03.html#Heading6">That&rsquo;s Nice&mdash;But it Sure as Heck Ain&rsquo;t 9 Cycles</a></b></font>
<dl>
<dd><font size="3"><b><a href="58-04.html#Heading7">Don&rsquo;t Stop Thinking about Those Cycles</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="58-05.html#Heading8">Texture Mapping Notes</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="59-01.html#Heading1"><b>Chapter 59&mdash;The Idea of BSP Trees</b></a>
<dl>
<dd><font size="3"><b><a href="59-01.html#Heading2">What BSP Trees Are and How to Walk Them</a></b></font></dd>
<dd>
<font size="3"><b><a href="59-01.html#Heading3">BSP Trees</a></b></font>
<dl>
<dd><font size="3"><b><a href="59-01.html#Heading4">Visibility Determination</a></b></font></dd>
<dd><font size="3"><b><a href="59-02.html#Heading5">Limitations of BSP Trees</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="59-02.html#Heading6">Building a BSP Tree</a></b></font>
<dl>
<dd><font size="3"><b><a href="59-03.html#Heading7">Visibility Ordering</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="59-04.html#Heading8">Inorder Walks of BSP Trees</a></b></font>
<dl>
<dd><font size="3"><b><a href="59-04.html#Heading9">Know It <i>Cold</i></a></b></font></dd>
<dd><font size="3"><b><a href="59-05.html#Heading10">Measure and Learn</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="59-06.html#Heading11">Surfing Amidst the Trees</a></b></font>
<dl>
<dd><font size="3"><b><a href="59-06.html#Heading12">Related Reading</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="60-01.html#Heading1"><b>Chapter 60&mdash;Compiling BSP Trees</b></a>
<dl>
<dd><font size="3"><b><a href="60-01.html#Heading2">Taking BSP Trees from Concept to Reality</a></b></font></dd>
<dd>
<font size="3"><b><a href="60-01.html#Heading3">Compiling BSP Trees</a></b></font>
<dl>
<dd><font size="3"><b><a href="60-02.html#Heading4">Parametric Lines</a></b></font></dd>
<dd><font size="3"><b><a href="60-02.html#Heading5">Parametric Line Clipping</a></b></font></dd>
<dd><font size="3"><b><a href="60-02.html#Heading6">The BSP Compiler</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="60-04.html#Heading7">Optimizing the BSP Tree</a></b></font></dd>
<dd><font size="3"><b><a href="60-04.html#Heading8">BSP Optimization: an Undiscovered Country</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="61-01.html#Heading1"><b>Chapter 61&mdash;Frames of Reference</b></a>
<dl>
<dd>
<font size="3"><b><a href="61-01.html#Heading2">The Fundamentals of the Math behind 3-D Graphics</a></b></font>
<dl>
<dd><font size="3"><b><a href="61-01.html#Heading3">3-D Math</a></b></font></dd>
<dd><font size="3"><b><a href="61-01.html#Heading4">Foundation Definitions</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="61-02.html#Heading5">The Dot Product</a></b></font>
<dl>
<dd><font size="3"><b><a href="61-02.html#Heading6">Dot Products of Unit Vectors</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="61-02.html#Heading7">Cross Products and the Generation of Polygon Normals</a></b></font></dd>
<dd><font size="3"><b><a href="61-03.html#Heading8">Using the Sign of the Dot Product</a></b></font></dd>
<dd><font size="3"><b><a href="61-04.html#Heading9">Using the Dot Product for Projection</a></b></font></dd>
<dd><font size="3"><b><a href="61-04.html#Heading10">Rotation by Projection</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="62-01.html#Heading1"><b>Chapter 62&mdash;One Story, Two Rules, and a BSP Renderer</b></a>
<dl>
<dd>
<font size="3"><b><a href="62-01.html#Heading2">Taking a Compiled BSP Tree from Logical to Visual Reality</a></b></font>
<dl>
<dd><font size="3"><b><a href="62-01.html#Heading3">BSP-based Rendering</a></b></font></dd>
<dd><font size="3"><b><a href="62-03.html#Heading4">The Rendering Pipeline</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="62-03.html#Heading5">Moving the Viewer</a></b></font></dd>
<dd><font size="3"><b><a href="62-03.html#Heading6">Transformation into Viewspace</a></b></font></dd>
<dd><font size="3"><b><a href="62-03.html#Heading7">Clipping</a></b></font></dd>
<dd><font size="3"><b><a href="62-03.html#Heading8">Projection to Screenspace</a></b></font></dd>
<dd>
<font size="3"><b><a href="62-04.html#Heading9">Walking the Tree, Backface Culling and Drawing</a></b></font>
<dl>
<dd><font size="3"><b><a href="62-04.html#Heading10">Notes on the BSP Renderer</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="63-01.html#Heading1"><b>Chapter 63&mdash;Floating-Point for Real-Time 3-D</b></a>
<dl>
<dd><font size="3"><b><a href="63-01.html#Heading2">Knowing When to Hurl Conventional Math Wisdom Out the Window</a></b></font></dd>
<dd><font size="3"><b><a href="63-01.html#Heading3">Not Your Father&rsquo;s Floating-Point</a></b></font></dd>
<dd>
<font size="3"><b><a href="63-01.html#Heading4">Pentium Floating-Point Optimization</a></b></font>
<dl>
<dd><font size="3"><b><a href="63-02.html#Heading5">Pipelining, Latency, and Throughput</a></b></font></dd>
<dd><font size="3"><b><a href="63-02.html#Heading6">FXCH</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="63-02.html#Heading7">The Dot Product</a></b></font></dd>
<dd><font size="3"><b><a href="63-03.html#Heading8">The Cross Product</a></b></font></dd>
<dd><font size="3"><b><a href="63-03.html#Heading9">Transformation</a></b></font></dd>
<dd><font size="3"><b><a href="63-04.html#Heading10">Projection</a></b></font></dd>
<dd><font size="3"><b><a href="63-04.html#Heading11">Rounding Control</a></b></font></dd>
<dd><font size="3"><b><a href="63-04.html#Heading12">A Farewell to 3-D Fixed-Point</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="64-01.html#Heading1"><b>Chapter 64&mdash;Quake&rsquo;s Visible-Surface Determination</b></a>
<dl>
<dd><font size="3"><b><a href="64-01.html#Heading2">The Challenge of Separating All Things Seen from All Things Unseen</a></b></font></dd>
<dd><font size="3"><b><a href="64-01.html#Heading3">VSD: The Toughest 3-D Challenge of All</a></b></font></dd>
<dd><font size="3"><b><a href="64-02.html#Heading4">The Structure of Quake Levels</a></b></font></dd>
<dd>
<font size="3"><b><a href="64-02.html#Heading5">Culling and Visible Surface Determination</a></b></font>
<dl>
<dd><font size="3"><b><a href="64-02.html#Heading6">Nodes Inside and Outside the View Frustum</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="64-02.html#Heading7">Overdraw</a></b></font></dd>
<dd><font size="3"><b><a href="64-03.html#Heading8">The Beam Tree</a></b></font></dd>
<dd>
<font size="3"><b><a href="64-03.html#Heading9">3-D Engine du Jour</a></b></font>
<dl>
<dd><font size="3"><b><a href="64-03.html#Heading10">Subdividing Raycast</a></b></font></dd>
<dd><font size="3"><b><a href="64-03.html#Heading11">Vertex-Free Surfaces</a></b></font></dd>
<dd><font size="3"><b><a href="64-03.html#Heading12">The Draw-Buffer</a></b></font></dd>
<dd><font size="3"><b><a href="64-03.html#Heading13">Span-Based Drawing</a></b></font></dd>
<dd><font size="3"><b><a href="64-03.html#Heading14">Portals</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="64-03.html#Heading15">Breakthrough!</a></b></font></dd>
<dd><font size="3"><b><a href="64-04.html#Heading16">Simplify, and Keep on Trying New Things</a></b></font></dd>
<dd><font size="3"><b><a href="64-04.html#Heading17">Learn Now, Pay Forward</a></b></font></dd>
<dd><font size="3"><b><a href="64-04.html#Heading18">References</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="65-01.html#Heading1"><b>Chapter 65&mdash;3-D Clipping and Other Thoughts</b></a>
<dl>
<dd><font size="3"><b><a href="65-01.html#Heading2">Determining What&rsquo;s Inside Your Field of View</a></b></font></dd>
<dd>
<font size="3"><b><a href="65-01.html#Heading3">3-D Clipping Basics</a></b></font>
<dl>
<dd><font size="3"><b><a href="65-02.html#Heading4">Intersecting a Line Segment with a Plane</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="65-02.html#Heading5">Polygon Clipping</a></b></font>
<dl>
<dd><font size="3"><b><a href="65-03.html#Heading6">Clipping to the Frustum</a></b></font></dd>
<dd><font size="3"><b><a href="65-04.html#Heading7">The Lessons of Listing 65.3</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="65-04.html#Heading8">Advantages of Viewspace Clipping</a></b></font></dd>
<dd><font size="3"><b><a href="65-04.html#Heading9">Further Reading</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="66-01.html#Heading1"><b>Chapter 66&mdash;Quake&rsquo;s Hidden-Surface Removal</b></a>
<dl>
<dd><font size="3"><b><a href="66-01.html#Heading2">Struggling with Z-Order Solutions to the Hidden Surface Problem</a></b></font></dd>
<dd>
<font size="3"><b><a href="66-01.html#Heading3">Creative Flux and Hidden Surfaces</a></b></font>
<dl>
<dd><font size="3"><b><a href="66-01.html#Heading4">Drawing Moving Objects</a></b></font></dd>
<dd><font size="3"><b><a href="66-01.html#Heading5">Performance Impact</a></b></font></dd>
<dd><font size="3"><b><a href="66-01.html#Heading6">Leveling and Improving Performance</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="66-02.html#Heading7">Sorted Spans</a></b></font></dd>
<dd><font size="3"><b><a href="66-02.html#Heading8">Edges versus Spans</a></b></font></dd>
<dd>
<font size="3"><b><a href="66-03.html#Heading9">Edge-Sorting Keys</a></b></font>
<dl>
<dd><font size="3"><b><a href="66-04.html#Heading10">Where That 1/Z Equation Comes From</a></b></font></dd>
<dd><font size="3"><b><a href="66-04.html#Heading11">Quake and Z-Sorting</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="66-04.html#Heading12">Decisions Deferred</a></b></font></dd>
</dl>
</dd>
<dd>
<a href="67-01.html#Heading1"><b>Chapter 67&mdash;Sorted Spans in Action</b></a>
<dl>
<dd><font size="3"><b><a href="67-01.html#Heading2">Implementing Independent Span Sorting for Rendering without Overdraw</a></b></font></dd>
<dd><font size="3"><b><a href="67-01.html#Heading3">Quake and Sorted Spans</a></b></font></dd>
<dd>
<font size="3"><b><a href="67-02.html#Heading4">Types of 1/z Span Sorting</a></b></font>
<dl>
<dd><font size="3"><b><a href="67-02.html#Heading5">Intersecting Span Sorting</a></b></font></dd>
<dd><font size="3"><b><a href="67-02.html#Heading6">Abutting Span Sorting</a></b></font></dd>
<dd><font size="3"><b><a href="67-03.html#Heading7">Independent Span Sorting</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="67-03.html#Heading8">1/z Span Sorting in Action</a></b></font>
<dl>
<dd><font size="3"><b><a href="67-05.html#Heading9">Implementation Notes</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="68-01.html#Heading1"><b>Chapter 68&mdash;Quake&rsquo;s Lighting Model</b></a>
<dl>
<dd><font size="3"><b><a href="68-01.html#Heading2">A Radically Different Approach to Lighting Polygons</a></b></font></dd>
<dd><font size="3"><b><a href="68-01.html#Heading3">The Lighting Conundrum</a></b></font></dd>
<dd>
<font size="3"><b><a href="68-01.html#Heading4">Gouraud Shading</a></b></font>
<dl>
<dd><font size="3"><b><a href="68-01.html#Heading5">Problems with Gouraud Shading</a></b></font></dd>
<dd><font size="3"><b><a href="68-02.html#Heading6">Perspective Correctness</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="68-02.html#Heading7">The Quest for Alternative Lighting</a></b></font>
<dl>
<dd><font size="3"><b><a href="68-02.html#Heading8">Decoupling Lighting from Rasterization</a></b></font></dd>
<dd><font size="3"><b><a href="68-03.html#Heading9">Size and Speed</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="68-03.html#Heading10">Surface Caching</a></b></font>
<dl>
<dd><font size="3"><b><a href="68-04.html#Heading11">Mipmapping To The Rescue</a></b></font></dd>
<dd><font size="3"><b><a href="68-04.html#Heading12">Two Final Notes on Surface Caching</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="69-01.html#Heading1"><b>Chapter 69&mdash;Surface Caching and Quake&rsquo;s Triangle Models</b></a>
<dl>
<dd><font size="3"><b><a href="69-01.html#Heading2">Probing Hardware-Assisted Surfaces and Fast Model Animation Without Sprites</a></b></font></dd>
<dd>
<font size="3"><b><a href="69-01.html#Heading3">Surface Caching with Hardware Assistance</a></b></font>
<dl>
<dd><font size="3"><b><a href="69-02.html#Heading4">Letting the Graphics Card Build the Textures</a></b></font></dd>
<dd><font size="3"><b><a href="69-02.html#Heading5">The Light Map as Alpha Texture</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="69-02.html#Heading6">Drawing Triangle Models</a></b></font>
<dl>
<dd><font size="3"><b><a href="69-02.html#Heading7">Drawing Triangle Models Fast</a></b></font></dd>
<dd><font size="3"><b><a href="69-03.html#Heading8">Trading Subpixel Precision for Speed</a></b></font></dd>
<dd><font size="3"><b><a href="69-03.html#Heading9">An Idea that Didn&rsquo;t Work</a></b></font></dd>
<dd><font size="3"><b><a href="69-03.html#Heading10">An Idea that Did Work</a></b></font></dd>
<dd><font size="3"><b><a href="69-04.html#Heading11">More Ideas that Might Work</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
<dd>
<a href="70-01.html#Heading1"><b>Chapter 70&mdash;Quake: A Post-Mortem and a Glimpse into the Future</b></a>
<dl>
<dd><font size="3"><b><a href="70-01.html#Heading2">Preprocessing the World</a></b></font></dd>
<dd><font size="3"><b><a href="70-02.html#Heading3">The Potentially Visible Set (PVS)</a></b></font></dd>
<dd><font size="3"><b><a href="70-03.html#Heading4">Passages: The Last-Minute Change that Didn&rsquo;t Happen</a></b></font></dd>
<dd><font size="3"><b><a href="70-03.html#Heading5">Drawing the World</a></b></font></dd>
<dd>
<font size="3"><b><a href="70-04.html#Heading6">Rasterization</a></b></font>
<dl>
<dd><font size="3"><b><a href="70-04.html#Heading7">Lighting</a></b></font></dd>
<dd><font size="3"><b><a href="70-04.html#Heading8">Dynamic Lighting</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="70-05.html#Heading9">Entities</a></b></font>
<dl>
<dd><font size="3"><b><a href="70-05.html#Heading10">BSP Models</a></b></font></dd>
<dd><font size="3"><b><a href="70-05.html#Heading11">Polygon Models and Z-Buffering</a></b></font></dd>
<dd><font size="3"><b><a href="70-06.html#Heading12">The Subdivision Rasterizer</a></b></font></dd>
<dd><font size="3"><b><a href="70-06.html#Heading13">Sprites</a></b></font></dd>
<dd><font size="3"><b><a href="70-06.html#Heading14">Particles</a></b></font></dd>
</dl>
</dd>
<dd>
<font size="3"><b><a href="70-06.html#Heading15">How We Spent Our Summer Vacation: After Shipping Quake</a></b></font>
<dl>
<dd><font size="3"><b><a href="70-06.html#Heading16">Verite Quake</a></b></font></dd>
<dd><font size="3"><b><a href="70-07.html#Heading17">GLQuake</a></b></font></dd>
<dd><font size="3"><b><a href="70-07.html#Heading18">WinQuake</a></b></font></dd>
<dd><font size="3"><b><a href="70-07.html#Heading19">QuakeWorld</a></b></font></dd>
<dd><font size="3"><b><a href="70-08.html#Heading20">Quake 2</a></b></font></dd>
</dl>
</dd>
<dd><font size="3"><b><a href="70-09.html#Heading21">Looking Forward</a></b></font></dd>
</dl>
</dd>
</dl>
</dd>
</dl>
<dl>
<dd><b><a href="appendix-a.html"><font size="4">Appendix A</font></a></b></dd>
<dd><b><a href="book-index.html"><font size="4">Index</font></a></b></dd>
</dl>
<hr width="90%" size="1" noshade="noshade" />
<div align="center">
Graphics Programming Black Book &copy; 2001 Michael Abrash
</div><!-- all of the reference materials (books) have the footer and subfoot reveresed -->
<!-- reference_subfoot = footer -->
<!-- reference_footer = subfoot -->
<!-- BEGIN SUB FOOTER -->
<!-- END FOOTER -->
</body>
</html>