<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5648435707382491427</id><updated>2012-02-16T00:48:27.027-08:00</updated><title type='text'>Game Engine Architecture</title><subtitle type='html'>Selected email conversations, errata and announcements regarding "Game Engine Architecture" by Jason Gregory</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-1279540895084671696</id><published>2012-02-12T22:24:00.000-08:00</published><updated>2012-02-12T22:24:43.036-08:00</updated><title type='text'></title><content type='html'>&lt;span class="text"&gt;Hi Jason!&lt;br /&gt;&lt;br /&gt;I am Jose Antonio, I wrote you a couple of years ago to ask you some advice about how I could be a better professional. Your advice were really useful for me in the past and now I am having a lead programmer position in AiGameDev.com.&lt;br /&gt;&lt;br /&gt;I would like improve my skills as lead programmer, which I think that takes more that the simple technical skills. I would really appreciate if you give me any advice to improve my role as lead programmer by telling me what you consider a lead programmer should do.&lt;br /&gt;&lt;br /&gt;I really would be also interested in listen something about how I can communicate better with my team. I would like to know also if you have any recommended reading for this purpose or any book you think it can help me.&lt;br /&gt;&lt;br /&gt;My thanks in advance and my best wishes for your next awesome project ;)&lt;br /&gt;&lt;br /&gt;Cheers!&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="text"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="text"&gt;-----------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="text"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="text"&gt;Hi Jose,&lt;br /&gt;&lt;br /&gt;Sorry I didn't get back to you sooner.  I understand the difficulties in making the transition from the role of engineer to that of technical leader.  Here's a great article which sums up most of what I've learned about being a good tech. lead.  And I'm still learning!  :)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;          &lt;a href="http://www.linkedin.com/redirect?url=http%3A%2F%2Fwww%2Emroodles%2Ecom%2Fwordpress%2Fhacking%2Fgreat-mistakes-in-technical-leadership-reprint%2F&amp;amp;urlhash=byxo&amp;amp;_t=mbox_mebc"&gt;http://www.mroodles.com/wordpress/hacking/great-mistakes-in-technical-leadership-reprint/&lt;/a&gt;          &lt;span class="text"&gt;&lt;br /&gt;&lt;br /&gt;At Naughty Dog, our approach is to keep the interpersonal relationships open, honest, respectful, and always focused on solving the problems that we need to solve in order to ship a great game (rather than getting side-tracked by irrelevant issues).  That means trying our best to check our egos at the door.  We always aim to criticize IDEAS, never people.  To make sure everyone on the team feels like they have a voice, and to communicate clearly that great ideas can come from anywhere within the team (not just "the top"). We encourage everyone on the team to take a leadership role -- to "own" the tasks for which they are responsible, and to act like "producers," making sure that their tasks are completed to a high level of quality every time.&lt;br /&gt;&lt;br /&gt;I look at my role as a technical leader in much the same way that a lead alto sax player fits into a jazz band... he or she is playing in the band along with everyone else, but he or she also serves as a sort of guidepost, to help keep the entire band playing in time and on cue.  That's really it -- set a good example, help to make sure everyone is communicating, remove any road blocks, and then get out of the way and trust your team to get the job done.&lt;br /&gt;&lt;br /&gt;I hope this helps. At the end of the day, the only way to learn this stuff is to try (and fail many times!)&lt;br /&gt;&lt;br /&gt;All the best!&lt;br /&gt;J&lt;/span&gt;&lt;span class="text"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-1279540895084671696?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/1279540895084671696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/02/hi-jason-i-am-jose-antonio-i-wrote-you.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/1279540895084671696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/1279540895084671696'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/02/hi-jason-i-am-jose-antonio-i-wrote-you.html' title=''/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-1104817474412629978</id><published>2012-01-05T00:34:00.000-08:00</published><updated>2012-01-05T00:34:43.033-08:00</updated><title type='text'>Advice for a game engine newcomer</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;From: Mike Breske&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;Hi Jason,&lt;/span&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I am currently working as a consultant, doing a lot of work with&amp;nbsp;&lt;a href="http://ASP.NET/" style="color: #1155cc;" target="_blank"&gt;ASP.NET&lt;/a&gt;&amp;nbsp;web applications and business applications built with .NET C#. &amp;nbsp;I'm a relatively new college graduate (applied mathematics degree), and I'm quickly learning that my passions lie outside the world business related applications. &amp;nbsp;I love developing solutions using computer science and mathematics, but the domain isn't right for me.&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;A friend of mine shares similar sentiments, and we're both looking to work our way into the gaming industry (how many times have you heard that line?). &amp;nbsp;It's my understanding that is not an easy task, as experience is the key. &amp;nbsp;Our plan is to do what we can outside of work and start building games, as bad as they may turn out at first. &amp;nbsp;We want as much experience as possible with the various aspects of the game development process. &amp;nbsp;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;To that end, we want to build our own engine. &amp;nbsp;I plan on purchasing your&amp;nbsp;&lt;i&gt;Game Engine&amp;nbsp;&lt;span class="il" style="background-attachment: initial; background-clip: initial; background-color: #ffffcc; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #222222;"&gt;Architecture&lt;/span&gt;&amp;nbsp;&lt;/i&gt;textbook as a core resource. &amp;nbsp;Do you think building a very basic engine from the ground up, then a game using that engine, is a reasonable task for a team of two guys to handle? &amp;nbsp;Do you recommend a different approach or have any other advice? &amp;nbsp;I obviously don't expect you to take a keen interest in my career or anything, but it's nice to be able to solicit guidance from someone who's in a place you want to be.&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I saw that you worked on the Uncharted series and I had to see if I could get in contact with you, even for some small tidbits of knowledge. &amp;nbsp;&lt;i&gt;Uncharted 2&lt;/i&gt;&amp;nbsp;changed how I view what's possible in a game, the production value was incredible. &amp;nbsp;I have some serious respect for the team that put that game together.&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Thank you for your time!&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Mike Breske&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;________________________&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hi Mike,&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;An insightful analysis! You are quite right that breaking into the game industry requires some significant effort. And the best way to prepare for entry into the industry is to develop some game software on your own.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That said, embarking on building a game engine from the ground up is a monumental task, and may not serve your immediate purposes. &amp;nbsp;I would recommend instead that you get a hold of a pre-existing engine (e.g. Unreal, Half Life Source, Cryengine, Microsoft XNA, etc.) and "mod" it to make a game. That will give you exposure to a full-fledged engine, and allow you to build something that you can show off, in much less time than it would take to build an engine and&amp;nbsp;&lt;i&gt;then&lt;/i&gt;&amp;nbsp;build a game. (Companies with 50 engineers have tried this and failed, so 2 engineers will probably find it a little tricky to pull off!) And building an engine without having seen one is a bit like trying to invent a new automobile without first learning how to change the oil on your existing car.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That said, I do suggest you read my book, as another way to get the "big picture" of how a game engine typically works. That combined with some experience with an existing engine should give you a solid foundation and put you ahead of your peers. &amp;nbsp;Then if you have a demo or two, you should be golden.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You needn't make a full game, by the way. Try to figure out your passion, and make a demo to explore that. You might want to demonstrate your abilities at level design -- in which case you could make a couple of way-cool multiplayer arenas. Or you might want to explore 3D graphics -- in which case you might try using Ogre3D, or raw OpenGL or DirectX, to create a rendering demo with shadows, spherical harmonics, subsurface scattering -- or whatever technology seems interesting. &amp;nbsp;The list goes on. &amp;nbsp;Your demo doesn't have to be huge, either. It can be small and focused, as long as it demonstrates the ability to take on a non-trivial task, solve some difficult problems, and see it through to completion. That's what most employers are looking for -- someone who can not only start the job, but finish it and do it well.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also, I can't stress enough the importance of practicing your 3D vector math. Knowing how to think in two and three dimensions, working equations in terms of vector notation (rather than always breaking things into x,y,z components), intuitively understanding that a dot product represents a projection, being comfortable with matrices as transformations of either points and vectors or (the inverse) coordinate axes -- these are also things game employers look for. Naughty Dog tests 3D math first, and if you fail that they don't even ask you about your software engineering skills.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Best of luck! &amp;nbsp;Please keep me posted on how things go.&lt;/div&gt;&lt;div&gt;J&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-1104817474412629978?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/1104817474412629978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/advice-for-game-engine-newcomer.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/1104817474412629978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/1104817474412629978'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/advice-for-game-engine-newcomer.html' title='Advice for a game engine newcomer'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-6054440295976061235</id><published>2012-01-05T00:19:00.001-08:00</published><updated>2012-01-05T00:21:27.547-08:00</updated><title type='text'>Errata/Suggestions from Chinese translator</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;From:&lt;/b&gt; Milo Yip&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hi Jason,&lt;br /&gt;&lt;br /&gt;I am glad to tell you that, since last year, I have been translating&lt;br /&gt;your book into Chinese for publishing in China. Actually this is my&lt;br /&gt;first time to work on translation work.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I will send you some issues I found in these few days. And I hope I&lt;br /&gt;can ask you questions when I encounter difficulties in your book.&lt;br /&gt;Thanks.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: arial, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;____________&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: arial, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hi Jason,&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I have only translated till chapter 5 at the mean time. So most&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;suggestions in the following are in the first few chapters. Feel free&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;to further discuss.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Chapter 1&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.18 "... called a Brawler. This kind of fighting game can have&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;technical requirements more akin to those of a first-person shooter or&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;..."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I think "third-person games" is even more similar.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.19 "Cruisin' USA"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;It should be "Cruis'n USA"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.23 AOL's "Neverwinter Nights" is MMORPG but Bioware's "Neverwinter&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Nights" is not. It may be confusing.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.24 "Populus"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;It should be "Populous"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.28 "OGRE 3D is a ..."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;The official name is OGRE, no 3D. There are many occurance of "OGRE&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;3D" in the book.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.28 "Torque" is not one of open-source engines. It should be&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;categorized as other commercial engine.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.29 I think "3rd party SDKs" may be difficult to fit in the diagram,&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;since they can be anywhere in the&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;span class="il" style="background-attachment: initial; background-clip: initial; background-color: #ffffcc; background-image: initial; background-origin: initial; color: #222222;"&gt;architecture&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;. For example, Physics&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;engiine were shown in the 3rd party SDKs &amp;nbsp;but they are also in&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;collision &amp;amp; Physics box.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.32 "... hardware transform and lighting (hardware T &amp;amp; L) which began&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;with DirectX 8.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;It should be "DirectX 7".&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.39 "high dynamic range (HDR) lighting and bloom"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;More precisely, only HDR tone mapping is a post-process effect. HDR&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;lighting occurs in the lighting process.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.43 "WiiMote"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Nintendo's official term is "Wii Remote"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Chapter 2&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.71 "_GNUC_"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;It should be "__GNUC__". It may also mention about "__GNUC_MINOR__".&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P. 74 "Of these, the three we will use most are"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;the four&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P. 74 "General Tab"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Officially should be "General Property Page". Also the same in other&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;sections as well.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.74 "Configuration Propertoes/C++"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;It should be "C/C++"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P. 74 "Output directory ... that the compiler/linker ultimately outputs"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Strictly speaking should be linker only.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P. 76 "$VCInstallDir). The directory in which Visual Studio's standard&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;C library is currently installed.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I think it should be pointed to the Visual C++ installation directory.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;And there are tools, headers and binaries for VC under that directory.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.76 "General Tab/Include Directories"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;"Additional Include Directories"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.76 "General Tab/Debug Information"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;"Debug Information Format"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.79 "However, you cannot debug more than one program at a time."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;This is not true.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/a404w14b(v=VS.90).aspx" style="color: #1155cc;" target="_blank"&gt;http://msdn.microsoft.com/en-&lt;wbr&gt;&lt;/wbr&gt;us/library/a404w14b(v=VS.90).&lt;wbr&gt;&lt;/wbr&gt;aspx&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.79 "Hitting F5 ... will run the .exe built by the start-up project"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;This may not be precise. As VC runs the "Command" property in the&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Debugging Property Page of the start-up project, and the default value&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;is $(RemotePath). But this can be any executable or dump file.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.79 "Break point"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I think the term should be a single word "breakpoint".&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Breakpoint" style="color: #1155cc;" target="_blank"&gt;http://en.wikipedia.org/wiki/&lt;wbr&gt;&lt;/wbr&gt;Breakpoint&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.81 "You can cast variables from one type to another... For example,&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;... as a floating-point value."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I think this example is not good because without the explicit cast&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;(float), C/C++ will implicitly cast myIntegerVariable to float for the&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;multiplication with another float. My suggestion is "(float)a/b" to&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;show the floating point ratio between two integer variables.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.81 "...inspect the rotation angle of any quaternion from within the debugger."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Is "from" an extra word?&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.99 "To represent a signed integer in 32 bits ... "&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;This paragraph may mention the term "sign-and-magnitude method".&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Chapter 3&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.106 "This is because games are usually developed on a PC or Linux."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Should be better "Windows on Linux" or just "PC".&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.119 "...and later returned to the pool for use by other programs by&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;calling free()."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;"Other programs" seems inaccurate for most OS today. malloc() and&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;free() are concerning the heap of a process. They should not affect&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;"other programs".&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.119 "In C++, the global new and delete ... to and from the heap."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;More precisely, C++ terminology use free store instead of heap.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://www.gotw.ca/gotw/009.htm" style="color: #1155cc;" target="_blank"&gt;http://www.gotw.ca/gotw/009.&lt;wbr&gt;&lt;/wbr&gt;htm&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.132 "Structured exception handling (SEH) is a very powerful feature of C++".&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;SEH is a feature of Win32. C++ standard uses the term "exception handling".&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Chapter 4&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P. 162 the final position of the jet's left wingtip in model space is ..."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;It should be "world" space.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Chapter 5&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.210 "On the PS3, should be 128-bit aligned for maximum DMA&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;throughput, meaning they can only end in the bytes 0x00 or 0x80."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;If the address can only end in the bytes 0x00 or 0x80, then it should&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;be 128-"byte" aligned.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.213 "...support single- and double-buffered allocators."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;The title and the other text use "single-frame allocator". I suggest&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;to use the consistent term "single-frame allocator".&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.223 "That is, the linker never splits up a compiled translation unit&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;(.obj file) ..."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;In VC2008, it supports function level linking, which can splits up a&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;compiled translation unit.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.223 So, following ... to avoid D-cache misses"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;It should be "I-cache".&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.224 "Priority queue. ... A priority queue is typically implemented&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;as a binary search tree (e.g. std::priority_queue).&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Priority queue is more often implemented as heap data structure.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Priority_queue#Usual_implementation" style="color: #1155cc;" target="_blank"&gt;http://en.wikipedia.org/wiki/&lt;wbr&gt;&lt;/wbr&gt;Priority_queue#Usual_&lt;wbr&gt;&lt;/wbr&gt;implementation&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;It should not be "thought of a list that stays sorted at all times",&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;because it only permits dequeue for the maximum/minimum element, but&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;not traversing the content.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.227 "If a divided-and-conquer approach is used, as in a binary&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;search, ..., only log_2 n elements will actually be visited by the&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;algorithm on average..."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;It should be "on the worst case" instead of "on average".&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.248 "The UTF-16 standard ... Each character takes up exactly 16 bits."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;"UTF-16 ... produces a variable-length result of either one or two&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;16-bit code units per code point."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://en.wikipedia.org/wiki/UTF-16" style="color: #1155cc;" target="_blank"&gt;http://en.wikipedia.org/wiki/&lt;wbr&gt;&lt;/wbr&gt;UTF-16&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.249 "Under Microsoft Windows, the data type wchar_t is used to&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;represent a single "wide" UTF-16 character (WCS)"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;There are several issues in this sentence. First wchar_t is a standard&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;C++ type, it is unrelated to Windows (OS). Second, the character set&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;used in wchar_t is undefined in C++.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Wide_character" style="color: #1155cc;" target="_blank"&gt;http://en.wikipedia.org/wiki/&lt;wbr&gt;&lt;/wbr&gt;Wide_character&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Chapter 10&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P. 421 "... DXT ... the basic idea is to break the texture into 2x2&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;blocks of pixels"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;It should be 4x4&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.427 "The ambient term ... is a gross approximation of the amount of&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;indirect bounced light present in the scene"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Ambient light may not be only indirect lights but the light arrive at&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;the surface at almost all directions. It is common to use ambient term&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;to approximate skylight.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P. 428&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;k_A, k_D, k_S &amp;nbsp;normally should be a vector (RGB color), and use bold&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;face as C_i.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.442 "The basic idea is to break a triangle ... MSAA does not require&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;a doububle-width frame buffer."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;The section is not very precise. It only need to run fragment shader&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;on multiple subsample fragments at the edge of polygons. Pixels that&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;are completely inside a polygon only run &amp;nbsp;fragment shader once per&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;pixel.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Also, it does not mention that MSAA require 4x (or more according to&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;the level of MSAA) memory for depth and stencil buffer.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.443 "The depth buffer ... typically contains 16- or 24-bit floating&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;point depth information..."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Typically depth buffer is in integer format. Direct3D 9 has only&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;32-bit floating point depth buffer, others are integer formats.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.443 "When a fragment's color is written into the frame buffer, it depth..."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;"its depth"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.447 "Both FxComposer and Unreal Engine 3 provide powerful graphical&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;shading languages."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;FxComposer doesn't. It only provides traditional text-based shading language.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P. 461 "For each frustum plane, we move the plane inward a distance&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;equal to the radius, ... inside the frustum"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;It should move the plane "outward" by the distance equal to the&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;radius. If all inward tests are true, then the sphere "may be" inside&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;the frustum.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;For details, see "Real-time Rendering 3rd Edition". Actually only need&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;to evaluate the plane equation of the center of sphere and then&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;compare to r for culling purpose.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.480 "In traditional triangle-rasterization-based rendering, all&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;lighting and shading calculations are performed on the triangle&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;fragments in view space."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;More precisely, lighting is often performed in world, view or tangent space.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P. 481 "A typical G-buffer might contain ... depth, surface normal in&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;clip space"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I think more often they are stored in view or world space. Normal in&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;clip space are difficult to do lighting computation.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P. 482 "... including vignette (slight blur around the edge of screen)..."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Vignette often means reduction of brightness and saturation at the&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;edge of screen.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.484 sky rendering&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I think, if the sky is rendered before other objects, then z-test and&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;z-write should be turned off to reduce bandwidth.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;But for current gen hardware, I think sky should be better rendered&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;last with z-test on and z-write off, so it reduce the pixel shading&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;overhead at the occluded sky area.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Chapter 11&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P. 523 the 2nd equation&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;w_ij should be w_i, and K_i should be K_j_i.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Chapter 12&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P630. "... known as mechanics. This is the study of how forces affect&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;the behavior of objects. In a game engine, we are particularly&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;concerned with dynamics of objects -- how they move over time"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;There are several issues. Mechanics is a big branch in physics, its&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;subfields include kinematics, dynamics, quantum mechanics, etc.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Second, kinematics is study of motion of objects (without concerning&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;about force), while dynamics is concerning about how force affect the&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;motion of objects. Some simple games only need kinematics (e.g. Pong)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P.631 "Hence the physics system attems to provide realistic collision&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;responses ... interpenetrating."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;With continuous collision detection (CCD), it is possible to provide&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;collision responses without penetration.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;P. 692 "For example, the vertices of a static triangle mesh ... during&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;rendering"&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I think this example may not be appropriate. It does not save&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;per-vertex matrix multiplication as normally a vertex position need to&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;transform with view-projection matrix anyway.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-6054440295976061235?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/6054440295976061235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/erratasuggestions-from-japanese.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/6054440295976061235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/6054440295976061235'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/erratasuggestions-from-japanese.html' title='Errata/Suggestions from Chinese translator'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-4075534922937635558</id><published>2012-01-05T00:15:00.000-08:00</published><updated>2012-01-05T00:15:54.617-08:00</updated><title type='text'>Errata</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hello,&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I recently purchased a copy of your book. &amp;nbsp;After having read through&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;about half of the book so far I wanted to send you some comments. &amp;nbsp;I&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;thought about posting this in a review on Amazon, but rather than&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;diminsh your otherwise excellent book I thought it better to simply&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;write you instead and perhaps this information can be included in a&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;future printing, or published on your website as errata. &amp;nbsp;Because to&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;be honest the book is really good otherwise and I think that despite&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;the following issues it deserves an excellent review.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Anyway My comments are related to the information you provide on&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;exception handling in chapter 3. &amp;nbsp;For starters, you should be careful&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;about using the term "SEH" because technically SEH is very specific to&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;the Windows platform and is a native OS-level system service. &amp;nbsp;C++&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;exception handling, on the other hand, is a *completely* different&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;implementation of an exception handling mechanism, which may or may&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;not be implemented using SEH by the compiler. &amp;nbsp;Obviously if your code&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;is being compiled for any platform other than Windows, then the&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;compiler is obviously not using SEH. &amp;nbsp;In the book I believe you are&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;actually referring to C++ exception handling.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Secondly, you mention on page 132 that "SEH (sic) adds a lot of&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;overhead to the program. &amp;nbsp;Every stack frame must be augmented to&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;contain additional information required by the stack unwinding&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;process. &amp;nbsp;Also, the stack unwind is usually very slow -- on the order&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;of two to three times more expensive than simply returning from the&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;function. &amp;nbsp;Also, if even one function in your program (or a library&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;that your program links with) uses SEH, your entire program must use&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;SEH. &amp;nbsp;The compiler can't know which functions might be above you on&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;the call stack when you throw an exception."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;This is entire paragraph is almost completely wrong. &amp;nbsp;The only stack&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;frames that are augmented at all are ones that contain a catch block.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;To demonstrate proof of this, consider the following small program.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;#include &amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;#include &amp;lt;exception&amp;gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;void test1();&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;void test2();&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;void test3();&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;void __declspec(noinline) test1()&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;{&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test2();&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;}&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;void __declspec(noinline) test2()&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;{&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try { test3(); }&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;catch(const std::exception&amp;amp; e)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;std::cout &amp;lt;&amp;lt; "Got an exception in test2" &amp;lt;&amp;lt; std::endl;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;}&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;void __declspec(noinline) test3()&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;{&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw std::runtime_error("Error");&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;}&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;int _tmain(int argc, _TCHAR* argv[])&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;{&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test1();&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;}&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Now let's take a look at the assembly language generated by the&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;compiler. &amp;nbsp;The following is simply the above code repeated but with&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;assembly inlined at each sequence point. &amp;nbsp;It's not necessary to give&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;the assembly anything more than a cursory glance just to see how much&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;code the compiler is generating in each function.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;void __declspec(noinline) test1()&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;{&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test2();&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004010C0 &amp;nbsp;jmp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; test2 (4010D0h)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;}&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;void __declspec(noinline) test2()&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;{&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004010D0 &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ebp&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004010D1 &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ebp,esp&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004010D3 &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0FFFFFFFFh&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004010D5 &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;offset __ehhandler$?test2@@YAXXZ (401E90h)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004010DA &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; eax,dword ptr fs:[00000000h]&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004010E0 &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;eax&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004010E1 &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dword ptr fs:[0],esp&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004010E8 &amp;nbsp;sub &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; esp,8&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004010EB &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ebx&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004010EC &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;esi&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004010ED &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;edi&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004010EE &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dword ptr [ebp-10h],esp&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try { test3(); }&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004010F1 &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dword ptr [ebp-4],0&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004010F8 &amp;nbsp;call &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test3 (401140h)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;catch(const std::exception&amp;amp; e)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;std::cout &amp;lt;&amp;lt; "Got an exception in test2" &amp;lt;&amp;lt; std::endl;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004010FD &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; eax,dword ptr [__imp_std::endl (402038h)]&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401102 &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ecx,dword ptr [__imp_std::cout (402054h)]&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401108 &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;eax&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401109 &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;offset string "Got an exception in test2" (40215Ch)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;0040110E &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ecx&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;0040110F &amp;nbsp;call &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;std::operator&amp;lt;&amp;lt;&amp;lt;std::char_&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;traits&amp;lt;char&amp;gt; &amp;gt; (401330h)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401114 &amp;nbsp;add &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; esp,8&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401117 &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ecx,eax&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401119 &amp;nbsp;call &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dword ptr&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;[__imp_std::basic_ostream&amp;lt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;char,std::char_traits&amp;lt;char&amp;gt; &amp;gt;::operator&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;(40204Ch)]&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;0040111F &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; eax,offset $LN7 (401125h)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401124 &amp;nbsp;ret&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;}&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401125 &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ecx,dword ptr [ebp-0Ch]&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401128 &amp;nbsp;pop &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edi&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401129 &amp;nbsp;pop &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; esi&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;0040112A &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dword ptr fs:[0],ecx&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401131 &amp;nbsp;pop &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ebx&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401132 &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; esp,ebp&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401134 &amp;nbsp;pop &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ebp&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401135 &amp;nbsp;ret&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;void __declspec(noinline) test3()&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;{&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401140 &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ebp&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401141 &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ebp,esp&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401143 &amp;nbsp;and &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; esp,0FFFFFFF8h&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401146 &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0FFFFFFFFh&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401148 &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;offset __ehhandler$?test3@@YAXXZ (401E82h)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;0040114D &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; eax,dword ptr fs:[00000000h]&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401153 &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;eax&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401154 &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dword ptr fs:[0],esp&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;0040115B &amp;nbsp;sub &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; esp,4Ch&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw std::runtime_error("Error");&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;0040115E &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;offset string "Error" (402178h)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401163 &amp;nbsp;lea &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ecx,[esp+8]&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401167 &amp;nbsp;call &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dword ptr&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;[__imp_std::basic_string&amp;lt;char,&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;std::char_traits&amp;lt;char&amp;gt;,std::&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;allocator&amp;lt;char&amp;gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;gt;::basic_string&amp;lt;char,std::&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;char_traits&amp;lt;char&amp;gt;,std::&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;allocator&amp;lt;char&amp;gt; &amp;gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;(40203Ch)]&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;0040116D &amp;nbsp;lea &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ecx,[esp+20h]&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401171 &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dword ptr [esp+54h],0&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401179 &amp;nbsp;call &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dword ptr [__imp_std::exception::&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;exception&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;(4020E4h)]&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;0040117F &amp;nbsp;lea &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; eax,[esp+4]&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401183 &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; byte ptr [esp+54h],1&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401188 &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;eax&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401189 &amp;nbsp;lea &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ecx,[esp+30h]&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;0040118D &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dword ptr [esp+24h],offset&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;std::runtime_error::`vftable' (4021A0h)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;00401195 &amp;nbsp;call &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dword ptr&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;[__imp_std::basic_string&amp;lt;char,&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;std::char_traits&amp;lt;char&amp;gt;,std::&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;allocator&amp;lt;char&amp;gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;gt;::basic_string&amp;lt;char,std::&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;char_traits&amp;lt;char&amp;gt;,std::&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;allocator&amp;lt;char&amp;gt; &amp;gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;(402040h)]&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;0040119B &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;offset __TI2?AVruntime_error@std@@ (402410h)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004011A0 &amp;nbsp;lea &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ecx,[esp+24h]&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004011A4 &amp;nbsp;push &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ecx&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004011A5 &amp;nbsp;mov &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; byte ptr [esp+5Ch],0&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004011AA &amp;nbsp;call &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_CxxThrowException (401E00h)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;$LN10:&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004011AF &amp;nbsp;int &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;}&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;int _tmain(int argc, _TCHAR* argv[])&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;{&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test1();&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004011B0 &amp;nbsp;call &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test1 (4010C0h)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;004011B5 &amp;nbsp;xor &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; eax,eax&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;}&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Note that in neither main nor in test1() is there any code having to&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;do with exception handling. The reason this works is that it's true&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;that the compiler does not know what functions will be on the&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;callstack at the time the exception is thrown, but it *does* know what&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;functions *might* try to handle exceptions. &amp;nbsp;So in each of these&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;functions, it generates code to modify the exception handling chain.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;What really happens when the stack unwinds is that it starts walking&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;through the stack frames and the exception handling chain in parallel.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&amp;nbsp;If a stack frame is found has no entry at all in the chain, or it has&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;one or more entries that don't match the current exception, it simply&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;calls all destructors for constructed objects and then moves up the&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;stack until it finds one or the program terminates. &amp;nbsp;But there is no&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;extra code generated in any of these functions. &amp;nbsp;These destructors&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;would have had to have been called anyway even if the function&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;terminated normally.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;That's my biggest comment. &amp;nbsp;My final comment is in the early chapters&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;when you're discussing visual studio and different types of builds:&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;debug, release, production, and hybrid. &amp;nbsp;At one point you mention that&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;systems like gnu make make it easy to define certain options on a&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;per-translation unit basis, but that this is very difficult in Visual&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Studio. &amp;nbsp;In fact it's very easy! &amp;nbsp;Right click a cpp file in the&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;solution explorer, click properties, and bam. &amp;nbsp;Any settings you make&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;in that window are applied only to that translation unit. &amp;nbsp;You can&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;change any setting that you could normally change on a per-project&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;basis, as long as it is not a linker setting. &amp;nbsp;Preprocessor,&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;optimization, etc are all changable on a per-translation unit basis&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;though.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Aside from these comments, however, the book is definitely a&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;refreshing addition to the sometimes dilluted market for game engine&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;books. &amp;nbsp;Too many books try to cash in on the game craze and while it's&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;clear the authors have experience, the books are not rigorous enough&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;to leave one satisfied. &amp;nbsp;I like the encyclopedic approach taken in&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;this book, and I'd definitely be interested in seeing an additional&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;volume at some point in the future.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Regards,&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Zachary Turner&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-4075534922937635558?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/4075534922937635558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/errata.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/4075534922937635558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/4075534922937635558'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/errata.html' title='Errata'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-2625267230888775714</id><published>2012-01-05T00:10:00.001-08:00</published><updated>2012-01-05T00:12:51.044-08:00</updated><title type='text'>Dual Quaternions</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hello,&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I've been reading through Game Engine&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;span class="il" style="background-attachment: initial; background-clip: initial; background-color: #ffffcc; background-image: initial; background-origin: initial; color: #222222;"&gt;Architecture&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;, and must commend you&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;on an excellent book. I'm a lead-programmer with just over 10 years&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;experience making games, so I'm not directly in the target audience, but&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I've still found it a very interesting read. I just wish it had existed a&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;few years earlier!&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Anyway, the section on Dual Quaternions was something that interested me -&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I hadn't heard of them before, and the possibility of representing&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;rotation, translation and scale in 8 floating point numbers sounded useful&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;- to good to be true really! However, having skimmed through the cited .pdf&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;file, I can find no mention of them representing scale, and this resource&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://isg.cs.tcd.ie/kavanl/papers/sdq-tog08.pdf" style="color: #1155cc;" target="_blank"&gt;http://isg.cs.tcd.ie/kavanl/&lt;wbr&gt;&lt;/wbr&gt;papers/sdq-tog08.pdf&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;suggests also that they&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;cannot represent scale. Quote:&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;"Dual quaternions cannot represent non-rigid transformations, such&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;as scale and shear. This means that dual quaternion skinning, unlike&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;linear blend skinning, is restricted only to rotating and/or translating&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;joints."&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Anyway, thought I'd mention it. If I've misunderstood them and scale is&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;possible, then apologies. If not, then perhaps a section for corrections on&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;the website would be useful.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Kind Regards,&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Andy Weinkove.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;____________&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hi Andy,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;You are quite right, that is an error. &amp;nbsp;Dual quats represent a combined rotation and translation... basically a "screw motion" and are incapable of describing any kind of scaling transform.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Cheers,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;J&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-2625267230888775714?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/2625267230888775714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/dual-quaternions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/2625267230888775714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/2625267230888775714'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/dual-quaternions.html' title='Dual Quaternions'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-4742481357128268547</id><published>2012-01-05T00:09:00.000-08:00</published><updated>2012-01-05T00:09:21.159-08:00</updated><title type='text'>Advice on Learning Assembler</title><content type='html'>&lt;br /&gt;&lt;div class="MsoNormal" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;From:&lt;/b&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;span class="gmail_sendername"&gt;Thomas Amundsen&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Hi Jason,&lt;/div&gt;&lt;div class="MsoNormal" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;I was introduced to your book “Game Engine&amp;nbsp;&lt;span class="il" style="background-attachment: initial; background-clip: initial; background-color: #ffffcc; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #222222;"&gt;Architecture&lt;/span&gt;” through CSCI 522: Game Engine Development at USC. First, I’d like to say that it is a GREAT book, and can’t thank you enough for writing it!&lt;/div&gt;&lt;div class="MsoNormal" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;The biggest question I had after working through the some of the chapters and then reading your blog is, how do you go about learning assembler? I majored in computer science during my undergrad, so I spent about half of a semester learning assembler for some fake&amp;nbsp;&lt;span class="il" style="background-attachment: initial; background-clip: initial; background-color: #ffffcc; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #222222;"&gt;architecture&lt;/span&gt;. But that didn’t transfer over to the real world, and whenever I see the disassembly in Visual Studio, I have no idea what’s going on. So, I think it would help me a lot to learn this stuff. Do you have any book recommendations, or other general recommendations?&lt;/div&gt;&lt;div class="MsoNormal" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Thanks so much!&lt;/div&gt;&lt;div class="MsoNormal" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;- Tom&lt;/div&gt;&lt;div class="MsoNormal" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;____________________&lt;/div&gt;&lt;div class="MsoNormal" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Hi Tom,&lt;br /&gt;&lt;br /&gt;The best way to learn assembler is to pick a CPU that you have access to (the Intel Pentium or P6 family are probably the most accessible, since they live in most PCs and the latest Macs as well). Then pick up a book on the&amp;nbsp;&lt;b&gt;Intel P6 ISA&amp;nbsp;&lt;/b&gt;(instruction set&lt;span class="il" style="background-attachment: initial; background-clip: initial; background-color: #ffffcc; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #222222;"&gt;architecture&lt;/span&gt;), and try coding something!&lt;br /&gt;&lt;br /&gt;One way (a not very friendly way, mind you) is to grab the actual Intel docs and pour through them.&amp;nbsp; You could start here:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href="http://download.intel.com/design/PentiumII/manuals/24400101.pdf" style="color: #1155cc;" target="_blank"&gt;http://download.intel.com/&lt;wbr&gt;&lt;/wbr&gt;design/PentiumII/manuals/&lt;wbr&gt;&lt;/wbr&gt;24400101.pdf&lt;/a&gt;&lt;br /&gt;and then move on to the manuals that describe the actual instructions etc.&lt;br /&gt;&lt;br /&gt;But really that gives you too much detail.&amp;nbsp; What you want is to learn the basic concepts of registers, aritmetic/logic units (ALU), and assembly instructions... then start learning the basic instructions and what they do.&amp;nbsp; I don't know of a book offhand that teaches this, but here are a few ideas I found on Amazon:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Introduction-Assembly-Language-Programming-Processors/dp/0387206361/ref=sr_1_1?ie=UTF8&amp;amp;qid=1296888434&amp;amp;sr=8-1" style="color: #1155cc;" target="_blank"&gt;http://www.amazon.com/&lt;wbr&gt;&lt;/wbr&gt;Introduction-Assembly-&lt;wbr&gt;&lt;/wbr&gt;Language-Programming-&lt;wbr&gt;&lt;/wbr&gt;Processors/dp/0387206361/ref=&lt;wbr&gt;&lt;/wbr&gt;sr_1_1?ie=UTF8&amp;amp;qid=1296888434&amp;amp;&lt;wbr&gt;&lt;/wbr&gt;sr=8-1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Assembly-Language-Intel-Based-Computers-5th/dp/0132383101/ref=sr_1_2?ie=UTF8&amp;amp;qid=1296888491&amp;amp;sr=8-2" style="color: #1155cc;" target="_blank"&gt;http://www.amazon.com/&lt;wbr&gt;&lt;/wbr&gt;Assembly-Language-Intel-Based-&lt;wbr&gt;&lt;/wbr&gt;Computers-5th/dp/0132383101/&lt;wbr&gt;&lt;/wbr&gt;ref=sr_1_2?ie=UTF8&amp;amp;qid=&lt;wbr&gt;&lt;/wbr&gt;1296888491&amp;amp;sr=8-2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Introduction-Assembly-Language-Computer-Architecture/dp/0763772232/ref=sr_1_3?ie=UTF8&amp;amp;qid=1296888515&amp;amp;sr=8-3" style="color: #1155cc;" target="_blank"&gt;http://www.amazon.com/&lt;wbr&gt;&lt;/wbr&gt;Introduction-Assembly-&lt;wbr&gt;&lt;/wbr&gt;Language-Computer-&lt;wbr&gt;&lt;/wbr&gt;&lt;span class="il" style="background-attachment: initial; background-clip: initial; background-color: #ffffcc; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #222222;"&gt;Architecture&lt;/span&gt;/dp/0763772232/&lt;wbr&gt;&lt;/wbr&gt;ref=sr_1_3?ie=UTF8&amp;amp;qid=&lt;wbr&gt;&lt;/wbr&gt;1296888515&amp;amp;sr=8-3&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You could also go old-school and learn the way I did, by reading about a much older... and therefore much simpler... CPU.&amp;nbsp; For example, the&amp;nbsp;&lt;b&gt;6502&amp;nbsp;&lt;/b&gt;-- the CPU in the old Apple // computers.&amp;nbsp; It is very simple, and therefore a great way to learn the concepts without getting bogged down in details and modern optimizations.&amp;nbsp; Here's one:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Assembly-Language-Programming-Lance-Leventhal/dp/007881216X/ref=sr_1_1?s=books&amp;amp;ie=UTF8&amp;amp;qid=1296888579&amp;amp;sr=1-1" style="color: #1155cc;" target="_blank"&gt;http://www.amazon.com/&lt;wbr&gt;&lt;/wbr&gt;Assembly-Language-Programming-&lt;wbr&gt;&lt;/wbr&gt;Lance-Leventhal/dp/007881216X/&lt;wbr&gt;&lt;/wbr&gt;ref=sr_1_1?s=books&amp;amp;ie=UTF8&amp;amp;&lt;wbr&gt;&lt;/wbr&gt;qid=1296888579&amp;amp;sr=1-1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Give that a whirl and let me know how it goes.&lt;/div&gt;&lt;div class="MsoNormal" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;J&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-4742481357128268547?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/4742481357128268547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/advice-on-learning-assembler.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/4742481357128268547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/4742481357128268547'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/advice-on-learning-assembler.html' title='Advice on Learning Assembler'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-1610684894758686383</id><published>2012-01-05T00:06:00.000-08:00</published><updated>2012-01-05T00:06:46.199-08:00</updated><title type='text'>Rendering Performance</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;From:&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;span class="gmail_sendername"&gt;Manuel Fernandez&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b class="gmail_sendername"&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hello,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;My name is manny, and I'm a big fan of your book. I think it's great how all the main parts of a game engine interact with each other. Most of the time you can probably find good resources online that teach you how to do one thing or the other, but bringing things together to make a game engine is a topic all on its own. I think you book does a great job at detailing all the different parts of a game engine and how they work together.&amp;nbsp;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I bought your book after I read an article in gamasutra about it, i thought it would be useful. I have a Quake 3 BSP file loader which works on both Direct X and Open gl. I'm pretty proud of it because it implements Quake 3's PVS and AABB to frustum culling, and bezier patches. What surprises me is that when i get out of the BSP comfort zone, like rendering from outside the bsp, or simply rendering the whole virtual world, it's a pretty big hit in performance. I'm pretty sure game engine's like UDK, or source can handle drawing a quake 3 level without a problem. I guess my question is what makes industry strength game engines perform so much better than average? I think it's more than just smart culling, or better thread&amp;nbsp;management.&amp;nbsp;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Thank you for your time.&amp;nbsp;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;______________________________&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hi Manny, I'm sorry I didn't get back to you sooner, but your email fell thru the cracks.&lt;br /&gt;&lt;br /&gt;I'm not a deep rendering guru, more of a generalist.&amp;nbsp; But here are a few ways in which industrial strength rendering engines attain their high performance:&lt;br /&gt;&lt;br /&gt;1. Rendering data is often packed into (relatively) small and contiguous data packets, to improve cache coherency.&amp;nbsp; The real key here is to eliminate all&amp;nbsp;&lt;i&gt;pointer chasing&lt;/i&gt;&amp;nbsp;during rendering. This means duplicating data, but it is worth it. We did this at Naughty Dog in order to optimize our rendering of dynamic objects (i.e. everything that is not static background geometry) and it yielded immense improvements. So as a (contrived) example, instead of a MeshInstance struct that contains a pointer to a material, which in turn contains pointers to lighting data etc. we would now have a RenderableInstance struct that contains all the data that you would have found by following down all the pointers (and ONLY the data that is actually needed for rendering). (Or maybe it would be multiple arrays of structs, each one containing one type of data... but the key is to avoid the use of pointers to refer to data that lives elsewhere in memory.)&amp;nbsp; These structs aren't tiny, but at least we can iterate thru them in one linear swoop, and gain the benefits of precacheing the memory as we go. Any time you jump around in memory you're going to flush your L1/L2 cache and hurt your performance.&lt;br /&gt;&lt;br /&gt;2. Pre-sorting to reduce render state changes is a great idea.&amp;nbsp; That includes which vertex and index buffers you're rendering from (i.e. which mesh), which vertex and fragment/pixel shader programs are loaded, your render constants (transformation matrices, lighting vectors, animation matrix palette, etc.), which texture units you're rendering from, and all the other "render state" of the GPU.&amp;nbsp; Most high-performance rendering engines divide the geometry up into two big categories: opaque and translucent. For opaque, you sort to minimize render state changes as I said: set up the render state for a particular "bin" and then render&amp;nbsp;&lt;i&gt;everything&amp;nbsp;&lt;/i&gt;in that bin, then change state, and go again.&amp;nbsp; For translucent, you typically have to sort the geometry in back-to-front order so it looks right.&amp;nbsp; So you lose the benefits of sorting by render state changes. You do it after the opaque stuff, and try to limit how much translucent geometry you render.&lt;br /&gt;&lt;br /&gt;3. Z pre-pass can be a savior, especially for GPU hardware on which fill rate (pixel shade, blend and store rate) is limited (like the PS3).&amp;nbsp; I think I describe it in the book, but the basic idea is to put the GPU into a special z-write-only mode, then render the scene with the simplest possible pixel shader (since only the depth/z matters anyway). This is very fast. Then you render the scene again, this time with real pixel shaders enabled (much slower), but without writing to the z-buffer... only&lt;i&gt;reading&amp;nbsp;&lt;/i&gt;the depth values you deposited before. The GPU is pretty good at early-ing out on fragments whose z values are larger than what's already in the z buffer, so you don't pay the cost of shading them.&lt;br /&gt;&lt;br /&gt;4. Eliminate the middle man. DirectX and OpenGL are actually wrappers around a lower-level "raw" GPU hardware protocol called a command list. This is basically the stream of data that the GPU actually consumes, in order to know what to render, what render state changes to make, etc. On the PS3, Sony provides a library called libgcm that allows games to build up their own GPU command lists directly, rather than going through the OpenGL layer. This is really the only way to render fast on the PS3. And actually, Naughty Dog's rendering team wrote an optimized interface, similar to libgcm, but even faster, and customized to the specific compressed data formats that we use... That's what Uncharted uses to render.&amp;nbsp; So the lesson here is: if you have access to a library like libgcm (or want to reverse-engineer one!!!), that can be the best way to wring the last ounces of performance out of your rendering engine.&lt;br /&gt;&lt;br /&gt;That said, the only way to be&amp;nbsp;&lt;i&gt;sure&amp;nbsp;&lt;/i&gt;about performance is to code it and profile it. So once you have a basic mesh rendering working, you can try optimizing it by (a) keeping all the render data in one or more contiguous arrays -- i.e. eliminate pointer-chasing in your render loop, and (b) sort by render state changes for maximum thruput. Then profile it, and tweak from there.&lt;br /&gt;&lt;br /&gt;I hope this helps a little.&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;J&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-1610684894758686383?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/1610684894758686383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/rendering-questions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/1610684894758686383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/1610684894758686383'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/rendering-questions.html' title='Rendering Performance'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-810289872953872148</id><published>2012-01-05T00:05:00.000-08:00</published><updated>2012-01-05T00:05:20.678-08:00</updated><title type='text'>From Tokyo</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;From:&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; white-space: nowrap;"&gt;Joseph Conley&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; font-weight: bold; white-space: nowrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hi Jason,&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I'm also a programmer in the game industry and I've recently come across your book.&amp;nbsp; I recently started a new job in Tokyo at Namco Bandai Games (I had previously worked at Activision Blizzard's Vicarious Visions studio(boy that's a mouthful)), and a number of people here recommended your book, and work bought me a copy that I hope to read soon, it looks very interesting and informative.&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;On an interesting note, the reason why my coworkers here have your book is because they are actually the ones reviewing the translation work for Softbank, the publisher of the book here. I guess they are hoping to wrap that up asap, as the book is due out in this country November 30th I believe.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I have also been a huge fan of the Uncharted Series, and I attended the panel "Game Design with the Dogs" at PAX East earlier this year where Richard Lemarchand, Jacob Minkoff, and Justin Richmond lead us through a demonstration of creating a level in Uncharted 2.&amp;nbsp; The narrative in that game and the way that everything is designed with considerations to narrative in mind is just amazing.&amp;nbsp; I would love to work on a game like that some day.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;The technical achievements are just as impressive if not more so, and I have to commend you on you and your teams' work.&amp;nbsp; As I mentioned to Jacob when I talked with him after the panel, I work in the same industry as you and I still have no idea how you make such an awesome game.&amp;nbsp; Maybe your book will help me understand :-)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Thanks for all that you do, I'm eagerly anticipating Uncharted 3.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; white-space: nowrap;"&gt;Joseph Conley&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; white-space: nowrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: arial, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; white-space: nowrap;"&gt;____________________________&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: arial, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; white-space: nowrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hi Joseph,&lt;br /&gt;&lt;br /&gt;Thank you so much for all the kind words!&amp;nbsp; I'll be sure to forward your compliments on to the whole team.&amp;nbsp; I'm very pleased to hear that you're reading my book -- if you have questions, feel free to ask!&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;By the way, I checked out your blog.&amp;nbsp; I've always wanted to travel to Japan... spent some time in Chennai, India and Hong Kong, but never Tokyo (at least not yet).&amp;nbsp; Your ray tracer appears to have been a success, too -- some nice renders -- what a great project!&amp;nbsp; Anyhow, best luck!&amp;nbsp; Learn lots and have fun on the other side of the world!&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;All the best,&lt;br /&gt;J&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;___________________________&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hey Jason,&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I wanted to let you know that I am about halfway through your book now&amp;nbsp;(finishing chapter 8), and I'm really enjoying it. Even though I've worked in the industry for about 2.5 years now, I feel like I have learned a whole lot, and that you have helped fill in a lot of gaps in my knowledge of game engines. And even the parts that I have learned before in various classes spread out over years of college or in previous work experience have been aggregated together and presented in a format that is exactly aimed at the sort of work I do, and for that reason it's incredibly useful. &amp;nbsp;I'm really looking forward to the sections on rendering and animation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also, while I have been reading, I've been keeping a log of any questions, suggestions, or typos I notice, and I'll send a link to share that google document with you, as I will continue to update it as I read. &amp;nbsp;If you want, I can also ask the technical supervisors for the Japanese version to send me any odd points they noticed, and I can add that to the document as well.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By the way, are you going to GDC next month in San Francisco? &amp;nbsp;Me and my coworker at Namco Bandai Games (and one of the technical supervisors for the Japanese version of&amp;nbsp;GEA) Kazuhisa Minato will be going, and if you're there we'd love to get together and chat about Game Engine&amp;nbsp;&lt;span class="il" style="background-attachment: initial; background-clip: initial; background-color: #ffffcc; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #222222;"&gt;Architecture&lt;/span&gt;. &amp;nbsp;Also, I saw that Uncharted 3 was announced, and will have support for stereoscopic televisions, which is something else we could discuss, as the game we are working on ("Dead Storm Pirates 3D" for arcades) also is stereoscopic.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well good luck with Uncharted 3!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;___________________________&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hi Joseph,&lt;br /&gt;&lt;br /&gt;Thanks for the compliments, and for taking the time to accumulate notes.&amp;nbsp; I know I'll find them invaluable as I start work on the second edition (which I plan to begin sometime soon).&lt;br /&gt;&lt;br /&gt;I just got a copy of the Japanese version of GEA, and I must say I'm thoroughly impressed!&amp;nbsp; The folks that translated it clearly spent a lot of time and effort on it.&amp;nbsp; I appreciate your help in keeping me informed.&lt;br /&gt;&lt;br /&gt;Sadly, I'm not attending GDC this year.&amp;nbsp; I would very much like to meet you and Minato-san.&amp;nbsp; Hopefully we'll be able to hook up at another industry event, such as E3 or the like.&amp;nbsp; And certainly, if either of you find yourselves in Los Angeles, drop me a line and I'll hook you up with a tour of Naughty Dog.&lt;br /&gt;&lt;br /&gt;Cheers and many thanks again,&lt;br /&gt;J&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-810289872953872148?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/810289872953872148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/from-tokyo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/810289872953872148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/810289872953872148'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/from-tokyo.html' title='From Tokyo'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-7693001858593348327</id><published>2012-01-04T23:58:00.000-08:00</published><updated>2012-01-04T23:58:00.124-08:00</updated><title type='text'>Course Materials</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;From:&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px; white-space: nowrap;"&gt;Farshad Kheiri&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Dear &amp;nbsp;Dr. Gregory,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I like to develop a course based on your interesting book "Game engine&amp;nbsp;&lt;span class="il" style="background-attachment: initial; background-clip: initial; background-color: #ffffcc; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #222222;"&gt;Architecture&lt;/span&gt;" for a community college. I was wondering if you can provide me some materials for the class. We like to put our course based on your book. I really appreciate your help in this regard.&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Kind regards,&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Farshad&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;_____________________&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hi Farshad,&lt;br /&gt;&lt;br /&gt;Well, I'm not a PhD, although it's fun to see Dr. in front of my name!&amp;nbsp; I'm pleased to hear you're using my book with your new course.&amp;nbsp; The book's website,&amp;nbsp;&lt;a href="http://www.gameenginebook.com/" style="color: #1155cc;" target="_blank"&gt;http://www.gameenginebook.com&lt;/a&gt;, provides some course syllabi, lab assignment outlines, and some 3D math problems.&amp;nbsp; I hope this helps.&amp;nbsp; If you have other questions, feel free to ask!&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;J&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-7693001858593348327?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/7693001858593348327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/course-materials.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/7693001858593348327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/7693001858593348327'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/course-materials.html' title='Course Materials'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-6130545224249247685</id><published>2012-01-04T23:55:00.000-08:00</published><updated>2012-01-04T23:55:05.843-08:00</updated><title type='text'>Getting Hired</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;From:&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Anurag Patnaik&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hi Jason,&lt;/span&gt;&lt;br /&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I recently discovered your book about game engine&amp;nbsp;&lt;span class="il" style="background-attachment: initial; background-clip: initial; background-color: #ffffcc; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #222222;"&gt;architecture&lt;/span&gt;&amp;nbsp;at a friend's place and really liked it. Got a copy for myself from Amazon. Hoping to be able to use this along with my course curriculum soon.&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I got admitted into Cornell university this year under their Grad school. I was hoping you could give me some pointers about what skills are expected within the industry so that I could spend my year at school actually learning something that would help me get into games. Other than C++, I have heard that knowing your way around Lisp and maybe Python are some useful skills. Is there anything in particular that you think would be useful for a grad like me who is trying to make it into game design ?&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I hope I am not intruding .. but any advice from Naughty dog is worth a shot :)&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Regards,&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Anurag&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;_________________________&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hi Anurag,&lt;br /&gt;&lt;br /&gt;I'm pleased you are finding the book helpful. Pretty much everything you need to know to break into the games industry as a programmer is in the book. 3D math is super important, so definitely focus on solving 3D problems, working with vectors, matrices and quaternions.&amp;nbsp; A little calculus doesn't hurt either!&lt;br /&gt;&lt;br /&gt;On the programming side, I strongly believe that learning multiple languages helps you to be a great programmer.&amp;nbsp; I like the Lisp variants, not because they are particularly useful in industry (except at Naughty Dog!), but because they really opened my mind to a completely different way of thinking about computer science. I also recommend Python and C# (both are used extensively in the industry).&amp;nbsp; Oh, and to stay ahead of the crowd, read a bit about Haskell, Ocaml and/or F# -- functional languages are probably the way of the future, given the move toward parallel computing hardware.&amp;nbsp; On that note, familiarizing yourself with parallel programming practices will prove super useful in the years to come.&lt;br /&gt;&lt;br /&gt;You should also learn a little assembly language... the PowerPC ISA (instruction set&amp;nbsp;&lt;span class="il" style="background-attachment: initial; background-clip: initial; background-color: #ffffcc; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #222222;"&gt;architecture&lt;/span&gt;) is a great one to learn nowadays, given that this is the ISA used by Xbox360, PS3 PPU and PS3 SPUs, with minor variations.&amp;nbsp; Again, understanding assembly gives you insights into how higher-level languages like C, C++ or even Lisp actually work under the hood.&lt;br /&gt;&lt;br /&gt;One final note of advice: Try to learn by doing, not just reading.&amp;nbsp; Do 3D math problems on paper, then try to implement the solution in C++ or the language of your choice.&amp;nbsp; Make some small tech demos and mini games.&amp;nbsp; The more you do, the more you'll be prepared to wow them at the job interview.&lt;br /&gt;&lt;br /&gt;Best luck!&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;J&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;______________________&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hi Jason,&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am extremely sorry for such a delayed reply. I was in the middle of moving to Cornell when I had previously mailed you and upon my arrival in Ithaca, your reply was conveniently placed in my Spam Folder !&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thank you so much for such a detailed response. I am really happy to say that I do have a lot of bases covered here. I am actually building a game as a design project this semester, hopefully using my own C++ engine ! That should be an interesting experience. I have also started to tinker around with Python and am cursing myself for not having discovered this wonderful language earlier. Rounding up this semester would be a healthy project in AI and a course in Computer Graphics which I am hoping would help me understand 3D math better. I had no idea about functional languages, thank you so much for pointing me to this new paradigm.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Again, thank you so much for taking the time to write back such a prompt and detailed answer to my queries. I really cannot thank you enough. Your feedback has been of immense help.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sincerely yours,&lt;/div&gt;&lt;div&gt;Anurag Patnaik&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;_____________________&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My pleasure!&amp;nbsp; Best luck, and keep in touch.&lt;/div&gt;&lt;div&gt;J&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-6130545224249247685?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/6130545224249247685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/getting-hired.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/6130545224249247685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/6130545224249247685'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/getting-hired.html' title='Getting Hired'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-4754662918694424716</id><published>2012-01-04T23:51:00.000-08:00</published><updated>2012-01-04T23:52:12.681-08:00</updated><title type='text'>Course Projects</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;From:&lt;/b&gt; Jeremy Walker&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hello Mr. Gregory,&lt;/span&gt;&lt;br /&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;I"m currently a grad student at Appalachian State University and I was wondering if I could ask you a few questions. &amp;nbsp;This fall six graduate students seeking their Masters in Computer Science (including me) will be taking an independent study on what we are calling The Design and Implementation of Game Making. &amp;nbsp;I'm contacting you because we decided to use your Game Engine&amp;nbsp;&lt;span class="il" style="background-attachment: initial; background-clip: initial; background-color: #ffffcc; background-image: initial; background-origin: initial; color: #222222;"&gt;Architecture&lt;/span&gt;&amp;nbsp;book as our semester's text book. &amp;nbsp;We are planning on using the new Unreal Development Kit that is out now.&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;All of the students taking this class have had 4+ years of programming experience though none have done anything with Game Development. &amp;nbsp;We made up the class with the goal of getting a basic understanding of the game making process (from storyboard to actually playing something) and we wanted to learn this cool new Unreal Kit while we were at it. &amp;nbsp;By the end of the semester we would like to actually have a functioning game though it may not be the prettiest thing you've ever seen. &amp;nbsp;Also we were wanting to get a feel for the team aspect of game making. &amp;nbsp;In all our courses so far we've never worked in a team larger than 2 so a team of 6 sounds kind of exciting to me. &amp;nbsp;It would be great if we could have a real team where someone was a "specialist" at one aspect of the game making process, like 3d rendering or gameplay logic, but as of now no one is a specialist at anything. &amp;nbsp;We're all newbies when it comes to game making, though I'm sure we've all wasted many hours playing them.&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;So I guess my question is, Do you have any suggestions or advice on where or how we should start? &amp;nbsp;I've looked over your syllabi on your site already. &amp;nbsp;Could we condense that into one semester somehow? &amp;nbsp;Or are we reaching too high? &amp;nbsp;I just want to know if you have any pointers on how we should go about this.&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Thanks!&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;_____________________________________________&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: #222222; font-family: arial, sans-serif; font-size: 13px;"&gt;Hi Jeremy,&lt;br /&gt;&lt;br /&gt;I'm very pleased to hear that you're considering using my book as your course text.&amp;nbsp; Your plan of having the students build a game using the UDK is a great one, similar in many respects to what I did in my course.&lt;br /&gt;&lt;br /&gt;A 6-person team shouldn't be too hard to manage.&amp;nbsp; (I've done this kind of project with as many as 20 students...)&amp;nbsp; That said, I always liked making sub-teams of no more than 2 or 3 people.&amp;nbsp; (I recall my days as a student -- it was almost impossible to get 4 or more people to agree on a time and place to meet to work on our projects!)&amp;nbsp; So you'd be best off dividing the work into three major categories with sub-teams of 2 each.&amp;nbsp; Perhaps one team could focus on the player mechanics and camera, one team on enemies/AI, and the third on level design/layout and visuals.&amp;nbsp; Or whatever makes sense for your specific project.&lt;br /&gt;&lt;br /&gt;I'd also recommend approaching your design like the layers of an onion.&amp;nbsp; Focus on the most basic, core and crucial functionality first.&amp;nbsp; If&amp;nbsp;&lt;i&gt;and only if&lt;/i&gt;&amp;nbsp;you make good progress on that, then proceed to the next layer of polish and less-important features, and so on.&amp;nbsp; That way, by the end of the semester, you'll have the highest chance of arriving at something that actually works and has all the core features you need.&amp;nbsp; (At Naughty Dog, we're big on getting something functional, but not pretty, up on screen as quickly as possible. This keeps us focused on what's important, and informs us of what is and is not working as early in the process as possible.)&lt;br /&gt;&lt;br /&gt;Best luck, and do keep me posted on how it goes.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-4754662918694424716?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/4754662918694424716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/getting-start.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/4754662918694424716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/4754662918694424716'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/getting-start.html' title='Course Projects'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-7225689539522098541</id><published>2012-01-04T09:17:00.000-08:00</published><updated>2012-01-04T09:17:15.576-08:00</updated><title type='text'>Memory Alignment Question</title><content type='html'>&lt;b&gt;From:&lt;/b&gt; Justin Lam&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;Hi Jason,&lt;br /&gt;&lt;br /&gt;Thank you for writing such a wonderful book, I throughly enjoyed Game&lt;br /&gt;Engine Architecture.&lt;br /&gt;&lt;br /&gt;I was wondering if you can clarify something for me. I'm trying to understand the code for allocating aligned memory on pages 212-213. &amp;nbsp;The part that I'm having trouble understanding &lt;span class="il"&gt;is&lt;/span&gt; how you store the adjustment value. &amp;nbsp;You mentioned that the smallest adjustment value &lt;span class="il"&gt;is&lt;/span&gt;&lt;br /&gt;1 byte, how then can you subtract 4 bytes from the alignedAddress. &amp;nbsp;Wouldn't this put &lt;span class="il"&gt;your&lt;/span&gt; pointer pass the rawAddress and you're overwriting some memory that &lt;span class="il"&gt;is&lt;/span&gt; not yours? &amp;nbsp;Can you clarify or elaborate how this works?&lt;br /&gt;&lt;br /&gt;&lt;span class="il"&gt;Your&lt;/span&gt; &lt;span class="il"&gt;response&lt;/span&gt; &lt;span class="il"&gt;is&lt;/span&gt; &lt;span class="il"&gt;greatly&lt;/span&gt; &lt;span class="il"&gt;appreciated&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;Justin&lt;br /&gt;&lt;br /&gt;____________________________________________&lt;br /&gt; &lt;br /&gt;Hi Justin,&lt;br /&gt;&lt;br /&gt;Thanks for the kind words about the book!&lt;br /&gt;&lt;br /&gt;Re your question: you first allocate a block of raw memory (that is not necessarily aligned) that is &lt;i&gt;larger&lt;/i&gt; than the requested block size. The number of additional bytes is equal to the requested alignment in bytes. When you get the raw block back, you advance the pointer until it is aligned (by at least one byte, and by at most the number of bytes in the requested alignment).&amp;nbsp; That way, you always have at least one additional byte in which to store the adjustment value.&lt;br /&gt;&lt;br /&gt;For example, let's say the requested alignment is 4 bytes, and the requested size is 64 bytes.&amp;nbsp; We'd actually allocate 64+4=68 bytes. If the raw address we get back is &lt;i&gt;already&lt;/i&gt; aligned to a 4-byte boundary (e.g. 0x2000), then we advance the pointer by a full 4 bytes, store our adjustment value in the byte just prior to that (0x2003), and then return the adjusted pointer (0x2004). But if the raw address is &lt;i&gt;not&lt;/i&gt; already aligned (e.g. worst case 0x2003), then we would adjust the pointer until it is aligned (0x2004) which would still give us one byte (0x2003) in which to store the adjustment.&lt;br /&gt;&lt;br /&gt;J&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-7225689539522098541?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/7225689539522098541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/memory-alignment-question.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/7225689539522098541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/7225689539522098541'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/memory-alignment-question.html' title='Memory Alignment Question'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-2463037409225452512</id><published>2012-01-04T09:07:00.001-08:00</published><updated>2012-01-04T09:07:46.005-08:00</updated><title type='text'>Small Typo</title><content type='html'>&lt;b&gt;From:&lt;/b&gt; Kip Warner&lt;br /&gt;&lt;br /&gt;Hey Jason,&lt;br /&gt;&lt;br /&gt;Small typo on page 164. The bottom right entry in the matrix M_c-&amp;gt;p&lt;br /&gt;should be 1, not zero.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-2463037409225452512?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/2463037409225452512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/small-typo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/2463037409225452512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/2463037409225452512'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/small-typo.html' title='Small Typo'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-4428868684205837565</id><published>2012-01-04T09:04:00.001-08:00</published><updated>2012-01-04T09:04:31.173-08:00</updated><title type='text'>More Typos</title><content type='html'>&lt;b&gt;From:&lt;/b&gt; Gayan &lt;span class="gD"&gt;Ediriweera&lt;/span&gt;&lt;br /&gt;&lt;span class="gD"&gt;&amp;nbsp;&lt;/span&gt; &lt;br /&gt;Really just typos this time.&lt;br /&gt;&lt;br /&gt;p. 437, between the two matrices&lt;br /&gt;&amp;nbsp; "...in the range [0,1] rather thanin the range [-1,1]...", should be&lt;br /&gt;&amp;nbsp; "...in the range [0,1] rather than in the range [-1,1]..."&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;p. 823, second last line&lt;br /&gt;&amp;nbsp; "A follow camera alos includes advanced...", should be&lt;br /&gt;&amp;nbsp; "A follow camera also includes advanced..."&lt;br /&gt;&lt;br /&gt;Regards&lt;br /&gt;Gayan&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-4428868684205837565?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/4428868684205837565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/more-typos.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/4428868684205837565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/4428868684205837565'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/more-typos.html' title='More Typos'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-5229500902641313019</id><published>2012-01-04T08:54:00.001-08:00</published><updated>2012-01-04T08:55:38.310-08:00</updated><title type='text'>Matrix Typo</title><content type='html'>&lt;b&gt;From:&lt;/b&gt; Gayan &lt;span class="gD"&gt;Ediriweera&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hey Jason,&lt;br /&gt;&lt;br /&gt;I think I spotted a mistake in the book. On p. 434, the end of the first paragraph reads:&lt;br /&gt;&lt;br /&gt;"...in a manner analogous to that used to construct a model-to-view matrix:"&lt;br /&gt;&lt;br /&gt;I think that should be "model-to-world" matrix.&lt;br /&gt;&lt;br /&gt;Also, thanks for putting together such a brilliant book! It's great for getting a high level understanding of every aspect of game engine tech, and the way it's laid out makes it really easy to follow.&lt;br /&gt;&lt;br /&gt;Regards&lt;br /&gt;Gayan&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-5229500902641313019?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/5229500902641313019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/from-gayan-ediriweera-hey-jason-i-think.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/5229500902641313019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/5229500902641313019'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/from-gayan-ediriweera-hey-jason-i-think.html' title='Matrix Typo'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-4866908365990479099</id><published>2012-01-04T08:53:00.000-08:00</published><updated>2012-01-04T08:55:26.567-08:00</updated><title type='text'>Torque Engine</title><content type='html'>&lt;b&gt;From:&lt;/b&gt; Felipe Otamendi&lt;br /&gt;&lt;br /&gt;You list the Torque engine under Open Source Engines section of your book&lt;br /&gt;(1.5.17) when it's not actually open source. You have to buy it to get&lt;br /&gt;the source.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;&lt;div class="yj6qo ajU"&gt;&lt;div class="ajR" data-tooltip="Hide expanded content" id=":4f" role="button" tabindex="0"&gt;&lt;img class="ajT" src="https://mail.google.com/mail/images/cleardot.gif" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="adL" style="color: black;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;span class="HOEnZb adL"&gt;Felipe.&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;span class="HOEnZb adL"&gt;________________________________&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;span class="HOEnZb adL"&gt; &lt;/span&gt;&lt;/div&gt;Good point, I'll add that to my list of errata to post.&lt;br /&gt;Thanks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-4866908365990479099?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/4866908365990479099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/from-felipe-otamendi-you-list-torque.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/4866908365990479099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/4866908365990479099'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/from-felipe-otamendi-you-list-torque.html' title='Torque Engine'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-4387565558344365963</id><published>2012-01-04T08:52:00.000-08:00</published><updated>2012-01-04T08:55:11.990-08:00</updated><title type='text'>Aligned Allocator Bug</title><content type='html'>&lt;b&gt;From: &lt;/b&gt;Dave Asbell&lt;br /&gt;&lt;br /&gt;Hey Jason,&lt;br /&gt;I am reading your book and I think there is a bug in the aligned allocator. Shouldn't the code be casting the alignedAddress to a U8 instead of a U32 and subtracting 1 byte instead of 4? I believe this would write the offset into the byte preceding the aligned address instead of the word. &amp;nbsp;Similarly shouldn't the free routine be using a 1 byte offset as well? Perhaps I am missing something. In any event I love the book and look forward to finishing it.&lt;br /&gt;&lt;br /&gt;_________________________________________&lt;br /&gt;&lt;br /&gt;You are quite right; the code was written originally with 4-byte offsets, but I changed it (very sloppily!) to use 1-byte offsets without double-checking it.&amp;nbsp; It's one of the errata I plan to post on the book's site when I get some free time.&lt;br /&gt;&lt;br /&gt;Glad you're enjoying it!&amp;nbsp; Do send along any other errata you notice.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;J&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-4387565558344365963?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/4387565558344365963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/from-dave-asbell-hey-jason-i-am-reading.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/4387565558344365963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/4387565558344365963'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/from-dave-asbell-hey-jason-i-am-reading.html' title='Aligned Allocator Bug'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5648435707382491427.post-3045443215884202563</id><published>2012-01-02T01:18:00.000-08:00</published><updated>2012-01-02T10:23:40.034-08:00</updated><title type='text'>Measuring Performance</title><content type='html'>&lt;div class="MsoNormal" style="color: black;"&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: xx-small;"&gt;&lt;span lang="EN-US" style="font-family: Arial; font-size: 9pt;"&gt;From: &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; font-size: xx-small;"&gt;&lt;span lang="EN-US" style="font-family: Arial; font-size: 9pt;"&gt;Kechi Cheng&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="color: black;"&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: xx-small;"&gt;&lt;span lang="EN-US" style="font-family: Arial; font-size: 9pt;"&gt;Date: 7/6/2010&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: black; font-family: Arial; font-size: xx-small;"&gt;&lt;span lang="EN-US" style="font-family: Arial; font-size: 9pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; font-size: xx-small;"&gt;&lt;span lang="EN-US" style="font-family: Arial; font-size: 9pt;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: xx-small;"&gt;&lt;span lang="EN-US" style="font-family: Arial; font-size: 9pt;"&gt;Hi,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: xx-small;"&gt;&lt;span lang="EN-US" style="font-family: Arial; font-size: 9pt;"&gt;I am reader of Game Engine Architecture. But I feel confused in chapter  7.5.4.3 that talk about 32-Bit Floating-Point Clocks.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: xx-small;"&gt;&lt;span lang="EN-US" style="font-family: Arial; font-size: 9pt;"&gt;You  say the time deltas in floating point format, measured in unit of  second. But I don’t understand why you multiply the duration of&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: xx-small;"&gt;&lt;span lang="EN-US" style="font-family: Arial; font-size: 9pt;"&gt;CPU  Cycles by CPU’s clock frequency. I just think the duration of CPU  Cycles should be divided by CPU’s clock frequency. I try to use&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: xx-small;"&gt;&lt;span lang="EN-US" style="font-family: Arial; font-size: 9pt;"&gt;WIN32 API to test the result, and the test code like: &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-autospace: none;"&gt;&lt;span style="color: green; font-family: 細明體; font-size: xx-small;"&gt;&lt;span lang="EN-US"&gt;// Just test&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-autospace: none;"&gt;&lt;span style="font-family: 細明體; font-size: xx-small;"&gt;&lt;span lang="EN-US"&gt;LARGE_INTEGER dwTest;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-autospace: none;"&gt;&lt;span style="font-family: 細明體; font-size: xx-small;"&gt;&lt;span lang="EN-US"&gt;QueryPerformanceFrequency(&amp;amp;&lt;wbr&gt;&lt;/wbr&gt;dwTest);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-autospace: none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-autospace: none;"&gt;&lt;span style="font-family: 細明體; font-size: xx-small;"&gt;&lt;span lang="EN-US"&gt;LARGE_INTEGER dwTest1;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-autospace: none;"&gt;&lt;span style="font-family: 細明體; font-size: xx-small;"&gt;&lt;span lang="EN-US"&gt;QueryPerformanceCounter(&amp;amp;&lt;wbr&gt;&lt;/wbr&gt;dwTest1);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-autospace: none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-autospace: none;"&gt;&lt;span style="font-family: 細明體; font-size: xx-small;"&gt;&lt;span lang="EN-US"&gt;Sleep(1000);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-autospace: none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-autospace: none;"&gt;&lt;span style="font-family: 細明體; font-size: xx-small;"&gt;&lt;span lang="EN-US"&gt;LARGE_INTEGER dwTest2;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-autospace: none;"&gt;&lt;span style="font-family: 細明體; font-size: xx-small;"&gt;&lt;span lang="EN-US"&gt;QueryPerformanceCounter(&amp;amp;&lt;wbr&gt;&lt;/wbr&gt;dwTest2);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-autospace: none;"&gt;&lt;span style="color: blue; font-family: 細明體; font-size: xx-small;"&gt;&lt;span lang="EN-US"&gt;float&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 細明體; font-size: xx-small;"&gt;&lt;span lang="EN-US"&gt;  fHiTimer = (&lt;span style="color: blue;"&gt;&lt;span style="color: blue;"&gt;float&lt;/span&gt;&lt;/span&gt;) (dwTest2.QuadPart - dwTest1.QuadPart) / (&lt;span style="color: blue;"&gt;&lt;span style="color: blue;"&gt;float&lt;/span&gt;&lt;/span&gt;) dwTest.QuadPart;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: green; font-family: 細明體; font-size: xx-small;"&gt;&lt;span lang="EN-US"&gt;// Just test&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: black; font-family: 細明體; font-size: xx-small;"&gt;&lt;span lang="EN-US"&gt;The result is correct, so could you tell me why you multiply by &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black; font-family: Arial; font-size: xx-small;"&gt;&lt;span lang="EN-US" style="color: black; font-family: Arial; font-size: 9pt;"&gt;CPU’s clock frequency?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: black; font-family: Arial; font-size: xx-small;"&gt;&lt;span lang="EN-US" style="color: black; font-family: Arial; font-size: 9pt;"&gt;Thanks&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: black; font-family: Arial; font-size: xx-small;"&gt;&lt;span lang="EN-US" style="color: black; font-family: Arial; font-size: 9pt;"&gt;Kechi Cheng.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;______________________________________________&lt;br /&gt;&lt;br /&gt;You are correct, that's a typographical error.&amp;nbsp; A duration measured  in  cycles divided by frequency in cycles/second (or multiplied by the   inverse frequency, in seconds/cycle) will equal seconds.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;J&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648435707382491427-3045443215884202563?l=gameenginebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gameenginebook.blogspot.com/feeds/3045443215884202563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/from-kechi-cheng-date-762010-hi-i-am.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/3045443215884202563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648435707382491427/posts/default/3045443215884202563'/><link rel='alternate' type='text/html' href='http://gameenginebook.blogspot.com/2012/01/from-kechi-cheng-date-762010-hi-i-am.html' title='Measuring Performance'/><author><name>jqgregory</name><uri>http://www.blogger.com/profile/05574280173559476277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/-btYhwIn8qd4/TwVUJwsrccI/AAAAAAAAAA8/zrShwgLx5eA/s220/b0b2e03ae7a03d0ab4532210.L._V192675505_SX200_.jpg'/></author><thr:total>0</thr:total></entry></feed>
