<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D08NQH8zfyp7ImA9WhRRFE4.&quot;"><id>tag:blogger.com,1999:blog-7275152103306866538</id><updated>2011-11-27T15:18:11.187-08:00</updated><title>Game programmer and his thoughts</title><subtitle type="html">Pushing our CPUs and GPUs up to peak.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://gameprogrammerdiary.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://gameprogrammerdiary.blogspot.com/" /><author><name>Vilém Otte</name><uri>http://www.blogger.com/profile/14589001326115858629</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/GameProgrammerAndHisThoughts" /><feedburner:info uri="gameprogrammerandhisthoughts" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CU8CQ3c5cCp7ImA9WhdbE0o.&quot;"><id>tag:blogger.com,1999:blog-7275152103306866538.post-161778809666628583</id><published>2011-10-11T15:57:00.000-07:00</published><updated>2011-10-11T15:57:42.928-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-11T15:57:42.928-07:00</app:edited><title>Not dead yet, new project announced</title><content type="html">I'm still not dead, though I got a bit busy. There are quite a lot of updates, but the most important is announcement of new project.&lt;br /&gt;
&lt;br /&gt;
The site for new project is in-development and it will be available till end of October (hopefully), along with wiki there, and hopefully first demos.&lt;br /&gt;
&lt;br /&gt;
Whats new project about? Realtime ray tracing (and hopefully even some path tracing will get introduced). Whole system is based on OpenCL + C/C++ (w pthreads of course) - hopefully I'll be able to achieve realtime performances in game-like scenes.&lt;br /&gt;
&lt;br /&gt;
Except some fancy screenshots and demo time soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7275152103306866538-161778809666628583?l=gameprogrammerdiary.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fQ_ZRGv9mnPU78vfCHCTrrGCPsA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fQ_ZRGv9mnPU78vfCHCTrrGCPsA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fQ_ZRGv9mnPU78vfCHCTrrGCPsA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fQ_ZRGv9mnPU78vfCHCTrrGCPsA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GameProgrammerAndHisThoughts/~4/oKTZ-4tuCOU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gameprogrammerdiary.blogspot.com/feeds/161778809666628583/comments/default" title="Komentáře k příspěvku" /><link rel="replies" type="text/html" href="http://gameprogrammerdiary.blogspot.com/2011/10/not-dead-yet-new-project-announced.html#comment-form" title="Počet komentářů: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/161778809666628583?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/161778809666628583?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GameProgrammerAndHisThoughts/~3/oKTZ-4tuCOU/not-dead-yet-new-project-announced.html" title="Not dead yet, new project announced" /><author><name>Vilém Otte</name><uri>http://www.blogger.com/profile/14589001326115858629</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gameprogrammerdiary.blogspot.com/2011/10/not-dead-yet-new-project-announced.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcAQno5cCp7ImA9WhZbEEw.&quot;"><id>tag:blogger.com,1999:blog-7275152103306866538.post-5181817913021628231</id><published>2011-06-13T18:47:00.000-07:00</published><updated>2011-06-13T18:47:23.428-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-13T18:47:23.428-07:00</app:edited><title>Particle systems optimizations</title><content type="html">&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size: large;"&gt;&lt;strong&gt;Particle systems optimizations&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;
I've recently met with few problems while integrating particle systems to more kinds of renderers, so here are few notes and tricky solutions on things I've met. (Consider this article as some uncontrolled brain dump for particles, this thing got up based upon some discussions with other developers and it is more less just a bit of text about our thoughts on particle systems, by the way all these optimisations are running in praxis and they actually work - although it depends...).&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;
Particle systems integration is same for rasterizers and same for ray tracers. Although we won't see that much impact on performance in rasterizers as we see in raytracers, it is due they're better fit for particle systems.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;
As I said problems are similar and I'll try to show few of them and explain how to solve or at least reduce them.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align="justify"&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;Fillrate problem&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
The biggest problem of particles is their rendering, whole particle system can gain a lot or lose a lot in this phase. The most important is only thing - how many times will every pixel be redrawn, until we get resulting color of this pixel.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;
The worst particles are additive ones (alpha blended can be quite easily optimised with early out - when we reach accumulated alpha of 1.0), lets look at simple fire like this:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-fdO7b-UT89M/Tb8dhLalPiI/AAAAAAAAAKI/h-4qxdP1824/s1600/particles01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://2.bp.blogspot.com/-fdO7b-UT89M/Tb8dhLalPiI/AAAAAAAAAKI/h-4qxdP1824/s320/particles01.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;em&gt;&lt;span style="font-size: x-small;"&gt;Fire computed using ray tracing algorithm and additive "blending" of particles&lt;/span&gt;&lt;/em&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align="justify"&gt;If we would just render these particles right in additive blending mode (of cours back-to-front so everything will be correct, actually we can also use front-to-back ... but lets leave it, as we don't think just about rasterizers), or if we used additive ray tracing (after hitting the particle, we spawn a new ray at this position in same direction that we trace again, adding its result to the value), it'd result in very high fillrate (lots and lots of overdraw, and thats not good - the result can be very slow), lets see how much fillrate is used on different regions of viewport:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-i2IModwuoGI/Tb8dhcTkI9I/AAAAAAAAAKQ/Ihv9EpCAO-E/s1600/particles02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://3.bp.blogspot.com/-i2IModwuoGI/Tb8dhcTkI9I/AAAAAAAAAKQ/Ihv9EpCAO-E/s320/particles02.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size: x-small;"&gt;&lt;em&gt;Fillrate - The brighter is higher&lt;/em&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align="justify"&gt;We can define maximum value of particles that can be added together (F.e. 16 additive operations), it can lower fillrate a bit. It can be applied on rasterizers with texkill or alpha test), it gives some speedup, but this technique can't be used with additive blending, only with alpha blending. With raytracers there seems to be higher gain (one can terminate tracing rays on pixel even with additive blending, and we gain more).&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-JGYfLuewutM/Tb8dhoyRxEI/AAAAAAAAAKY/vikRjjhGkEw/s1600/particles03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://3.bp.blogspot.com/-JGYfLuewutM/Tb8dhoyRxEI/AAAAAAAAAKY/vikRjjhGkEw/s320/particles03.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size: x-small;"&gt;&lt;em&gt;Fillrate - defining max value of possible additions (to 16)&amp;nbsp;&lt;/em&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align="justify"&gt;What helps us most with fillrate is so called Particle trimming. Instead of quad we choose much more suitable shape for particle. We can even stay with four vertices shapes, although it is much better to use F.e. 7-vertices shape. Vertex processing is less hit for performance, than huge overdraw of single pixel.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-G6P8uhMDXlU/Tb8dhq_-BJI/AAAAAAAAAKg/Y0opXKj9aR8/s1600/particles04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="193" src="http://3.bp.blogspot.com/-G6P8uhMDXlU/Tb8dhq_-BJI/AAAAAAAAAKg/Y0opXKj9aR8/s320/particles04.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size: x-small;"&gt;&lt;em&gt;Particle trimming - green represents shape of particle&lt;/em&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align="justify"&gt;We will gain most fps with particle trimming, also we can gain even more with compositing more particles into single (LODing for particles).&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size: large;"&gt;&lt;strong&gt;Bandwidth problems&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;
&lt;br /&gt;
The second problem, can even overgrow over fillrate problem. Huge CPU generated particle system with 1M particles and 64-byte per particle can have 64MiB stream for every frame, that's 1.92GiB to go every second to card!&lt;br /&gt;
&lt;br /&gt;
If we generate geometry on geometry shader during the run, we ca achieve 2/3 speedup in bandwidth problems. We can also compute whole particle system on GPU (gives us even better performance, although one must not have too busy GPU).&lt;br /&gt;
&lt;br /&gt;
For ray tracing real-time geometry generation (like in geometry shader) has its sense, although we won't save that much as in case of rasterizers and GPUs. We have to rebuild whole scene hierarchy and that takes time. If we don't generate particle geometry during rendering we can die on CPU&amp;lt;-&amp;gt;RAM latency, otherwise we will die on the same thing, but we will probably use cache more.&lt;br /&gt;
&lt;br /&gt;
Although we can accelerate the computation by parallelization on mutliple cores, or using SIMD extensions, be it AVX or SSE.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;strong&gt;State changes problem&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
State changes are problem for both rasterizers and ray tracers. I strongly recommend using texture atlases as one can gain a lot of speed with them (and you won't need to bind texture for every particle system. On the other hand, there are situations where texture atlases are impossible to do or absolutely useless.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style="font-size: large;"&gt;Matter of time...&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
The last problem is when to render particles? It is simple with ray tracers ... insert them before updating of hierarchy, be it KD-tree or BVH (or any other favourite of yours). And renderer takes care of them. Although it is not that simple with rasterizers.&lt;br /&gt;
&lt;br /&gt;
For forward rendering it is best to render front-to-back (with other models), but thats not possible, it is needed to render them after all models and mostly back to front. And that rewrites Z-buffer ... slow, slow ... :( There is probably no way with additive particles, for alpha blended there is.&lt;br /&gt;
&lt;br /&gt;
For deferred rendering it is best to use separated pass for particles after generation of G-Buffer, and after light computation (lighting phase) mix them into the buffer. And thus we discard all deferred advantages for particles, but we get them. Second possibility is MSAA G-Buffer and stippling. Another solution is depth-peeling, but well we're getting too far from realtime performance now.&lt;br /&gt;
&lt;br /&gt;
The most common is to use separated pass, even half sized, we can use this mainly for consoles, as the fillrate is bigger problem there than on PCs.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;strong&gt;So thats all?&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Not at all! But this is just short article on few of the problems. If you wish you can implement some of the things, here are summed tips:&lt;br /&gt;
- use particle trimming, it is simple and you will gain a lot&lt;br /&gt;
- use geometry shaders on newer cards, R2VB on older if possible&lt;br /&gt;
- use texture atlases if possible and if suitable for renderer &lt;br /&gt;
- use less larger particles rather than more smaller (if you're limited when computing particles) otherwise NOT and NEVER (if you're limited on fillrate)&lt;br /&gt;
- don't compute with particle systems that you can't see (some variation of frustum or occlusion culling is good), keep just time variable for them so they won't "jump"&lt;br /&gt;
&lt;br /&gt;
Well that were few points for particles. If you wish them to implement feel free and do it. You'll probably gain one or two fps on most GPUs and that counts!&lt;br /&gt;
&lt;br /&gt;
Note: I hope you liked the article, feel free to comment. It was lying here on my disk for a while so I released it to public (also there is czech version on www.ceske-hry.cz ).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7275152103306866538-5181817913021628231?l=gameprogrammerdiary.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_Fr1imYrnBiS5tUZSmuiCm8iT6Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_Fr1imYrnBiS5tUZSmuiCm8iT6Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_Fr1imYrnBiS5tUZSmuiCm8iT6Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_Fr1imYrnBiS5tUZSmuiCm8iT6Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GameProgrammerAndHisThoughts/~4/VEPjBqJtOvI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gameprogrammerdiary.blogspot.com/feeds/5181817913021628231/comments/default" title="Komentáře k příspěvku" /><link rel="replies" type="text/html" href="http://gameprogrammerdiary.blogspot.com/2011/06/particle-systems-optimizations.html#comment-form" title="Počet komentářů: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/5181817913021628231?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/5181817913021628231?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GameProgrammerAndHisThoughts/~3/VEPjBqJtOvI/particle-systems-optimizations.html" title="Particle systems optimizations" /><author><name>Vilém Otte</name><uri>http://www.blogger.com/profile/14589001326115858629</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-fdO7b-UT89M/Tb8dhLalPiI/AAAAAAAAAKI/h-4qxdP1824/s72-c/particles01.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://gameprogrammerdiary.blogspot.com/2011/06/particle-systems-optimizations.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUICRnY7fSp7ImA9WhZbEEw.&quot;"><id>tag:blogger.com,1999:blog-7275152103306866538.post-904653902074795790</id><published>2011-06-13T18:06:00.000-07:00</published><updated>2011-06-13T18:06:07.805-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-13T18:06:07.805-07:00</app:edited><title>A little of this and a little of that</title><content type="html">Well, it's been a while I've written on this blog and it had mainly two reasons.&lt;br /&gt;
&lt;br /&gt;
First one was that I actually decided to play through Risen, and it inspired me a lot into my one personal project (that is long time work-in-progress).&lt;br /&gt;
&lt;br /&gt;
Second one was and is more important, as I'm actually gonna showcase some real stuff soon that was in development. It is about libOcean, libRNR and nice technology demo with them (combined with my updated engine). And I hope also first step for doing preview of the first reason (e.g. the game in progress)&lt;br /&gt;
&lt;br /&gt;
Some facts:&lt;br /&gt;
- it will behave as small game (e.g. you'll have main menu, maybe a console)&lt;br /&gt;
- it will be multi-platform (e.g. you'll be able to try it on Windows, but mainly on Linux and other nix systems - as Linux is our main development platform)&lt;br /&gt;
- it will be situated on island&lt;br /&gt;
- it will use newest features from the engine&lt;br /&gt;
&lt;br /&gt;
Rendering engine had some major update recently and whole pipeline is more and more based upon physics (For example physically based shading model).&lt;br /&gt;
&lt;br /&gt;
So await some news during this and next week. I'll definitely try to get images on some servers (like devmaster.net) and probably also give demo available to public through my website (hopefully it will be reconstructed during this week).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7275152103306866538-904653902074795790?l=gameprogrammerdiary.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ssxVJysbVqhpybWIHuQeW6kK1aQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ssxVJysbVqhpybWIHuQeW6kK1aQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ssxVJysbVqhpybWIHuQeW6kK1aQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ssxVJysbVqhpybWIHuQeW6kK1aQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GameProgrammerAndHisThoughts/~4/saHI-iYogKA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gameprogrammerdiary.blogspot.com/feeds/904653902074795790/comments/default" title="Komentáře k příspěvku" /><link rel="replies" type="text/html" href="http://gameprogrammerdiary.blogspot.com/2011/06/little-of-this-and-little-of-that.html#comment-form" title="Počet komentářů: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/904653902074795790?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/904653902074795790?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GameProgrammerAndHisThoughts/~3/saHI-iYogKA/little-of-this-and-little-of-that.html" title="A little of this and a little of that" /><author><name>Vilém Otte</name><uri>http://www.blogger.com/profile/14589001326115858629</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gameprogrammerdiary.blogspot.com/2011/06/little-of-this-and-little-of-that.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YCR3kzeSp7ImA9WhZVEUs.&quot;"><id>tag:blogger.com,1999:blog-7275152103306866538.post-3055595817993937374</id><published>2011-05-23T09:46:00.000-07:00</published><updated>2011-05-23T09:46:06.781-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-23T09:46:06.781-07:00</app:edited><title>Audio library implementation</title><content type="html">Hello again,&lt;br /&gt;
&lt;br /&gt;
I'm back to work and I was given a task to work on audio part of game engine recently. As I found, most articles about OpenAL implementation, are outdated, so I had to implement it on my own (with help of reference manual).&lt;br /&gt;
&lt;br /&gt;
In fact I've got basic sound system finished and right now I'm about to work on OGG standard. After it I'll have audio part of game engine complete and you can wait some sort of article about designing audio part of game engine and how to work with it.&lt;br /&gt;
&lt;br /&gt;
I've recently found out, that I'm really busy finishing lots of different parts of game engine and that I'm finally seeing the light in the end of tunnel.&lt;br /&gt;
&lt;br /&gt;
I hope that I'll be able to deliver more info about engine soon, and possibly info about a game.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7275152103306866538-3055595817993937374?l=gameprogrammerdiary.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YQJyeo2mq6O1Fn1ksXjBx4WRXG4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YQJyeo2mq6O1Fn1ksXjBx4WRXG4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YQJyeo2mq6O1Fn1ksXjBx4WRXG4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YQJyeo2mq6O1Fn1ksXjBx4WRXG4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GameProgrammerAndHisThoughts/~4/fCLjbEFlU0A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gameprogrammerdiary.blogspot.com/feeds/3055595817993937374/comments/default" title="Komentáře k příspěvku" /><link rel="replies" type="text/html" href="http://gameprogrammerdiary.blogspot.com/2011/05/audio-library-implementation.html#comment-form" title="Počet komentářů: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/3055595817993937374?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/3055595817993937374?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GameProgrammerAndHisThoughts/~3/fCLjbEFlU0A/audio-library-implementation.html" title="Audio library implementation" /><author><name>Vilém Otte</name><uri>http://www.blogger.com/profile/14589001326115858629</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gameprogrammerdiary.blogspot.com/2011/05/audio-library-implementation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYBRH45cSp7ImA9WhZWFUU.&quot;"><id>tag:blogger.com,1999:blog-7275152103306866538.post-5277147075917791105</id><published>2011-05-16T14:42:00.000-07:00</published><updated>2011-05-16T14:42:35.029-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-16T14:42:35.029-07:00</app:edited><title>Appologize for absence</title><content type="html">I appologize for my absence here, I'm having time full of stress. I'm graduating in ~37 hours and well, that's not too much time to learn (my consciousness to me - why are you posting here!!! Prepare yourself!!!).&lt;br /&gt;
I hope I'll pass the exam. I'll let you know here, and as soon as I'll pass it - I'll bring new news here, along with some cool stuff.&lt;br /&gt;
&lt;br /&gt;
For your information, I'm gonna graduate from math, czech language and literature, physics and english.&lt;br /&gt;
&lt;br /&gt;
Okay, I'm going to learn a bit more, god knows I need it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7275152103306866538-5277147075917791105?l=gameprogrammerdiary.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XSTDi9Kjo1NTyCG4Vb9nXvyrBhI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XSTDi9Kjo1NTyCG4Vb9nXvyrBhI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XSTDi9Kjo1NTyCG4Vb9nXvyrBhI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XSTDi9Kjo1NTyCG4Vb9nXvyrBhI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GameProgrammerAndHisThoughts/~4/UCnJ2YbrLe0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gameprogrammerdiary.blogspot.com/feeds/5277147075917791105/comments/default" title="Komentáře k příspěvku" /><link rel="replies" type="text/html" href="http://gameprogrammerdiary.blogspot.com/2011/05/appologize-for-absence.html#comment-form" title="Počet komentářů: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/5277147075917791105?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/5277147075917791105?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GameProgrammerAndHisThoughts/~3/UCnJ2YbrLe0/appologize-for-absence.html" title="Appologize for absence" /><author><name>Vilém Otte</name><uri>http://www.blogger.com/profile/14589001326115858629</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gameprogrammerdiary.blogspot.com/2011/05/appologize-for-absence.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcBQnY4cSp7ImA9WhZSFU0.&quot;"><id>tag:blogger.com,1999:blog-7275152103306866538.post-3828665167860486391</id><published>2011-03-30T09:20:00.000-07:00</published><updated>2011-03-30T09:20:53.839-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-30T09:20:53.839-07:00</app:edited><title>RNR system</title><content type="html">Still no luck with moving blog to my site (I didnt have time to actually finish the site). Although here are some news:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;LibOcean site is in development (it will probably actually be finished sooner than my own site, as it is quite huge)&lt;/li&gt;
&lt;li&gt;LibOcean v0.2 (planned) will have a demo, and a smaller application showing how to implement it (demo won't be with source, smaller application will)&lt;/li&gt;
&lt;li&gt;RNR system - for creating and rendering vegetation - is being work-in-progress for some time and today itactually has first&amp;nbsp;tree type implemented&lt;/li&gt;
&lt;/ul&gt;RNR system is system for generating and rendering vegetation, right now it is rather small (first tree-type implemented today) and there are still not any GLSL shaders for rendering implemented. Anyway here is a shot with tree render:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/--DiAA6cKysY/TZNXKL_t8oI/AAAAAAAAAKE/mmYsmBR6ezI/s1600/rnr1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" r6="true" src="http://1.bp.blogspot.com/--DiAA6cKysY/TZNXKL_t8oI/AAAAAAAAAKE/mmYsmBR6ezI/s1600/rnr1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;em&gt;Spruce, the first one implemented.&lt;/em&gt;﻿&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;So as you can see, it doesn't look that bad. And whole rnr is taking care of LOD, so in the end you'll just render it whenever you will need (with lod activate for current render or not - because sometimes, f.e. when generating shadow maps, it can be very disturbing).&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;Okay, I hope I'll have anything new to bring here soon.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7275152103306866538-3828665167860486391?l=gameprogrammerdiary.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AcBJOF8P_IyTlieX7gYqKnIoiqQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AcBJOF8P_IyTlieX7gYqKnIoiqQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AcBJOF8P_IyTlieX7gYqKnIoiqQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AcBJOF8P_IyTlieX7gYqKnIoiqQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GameProgrammerAndHisThoughts/~4/g2CRIU7kSkA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gameprogrammerdiary.blogspot.com/feeds/3828665167860486391/comments/default" title="Komentáře k příspěvku" /><link rel="replies" type="text/html" href="http://gameprogrammerdiary.blogspot.com/2011/03/rnr-system.html#comment-form" title="Počet komentářů: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/3828665167860486391?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/3828665167860486391?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GameProgrammerAndHisThoughts/~3/g2CRIU7kSkA/rnr-system.html" title="RNR system" /><author><name>Vilém Otte</name><uri>http://www.blogger.com/profile/14589001326115858629</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/--DiAA6cKysY/TZNXKL_t8oI/AAAAAAAAAKE/mmYsmBR6ezI/s72-c/rnr1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://gameprogrammerdiary.blogspot.com/2011/03/rnr-system.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4GRH86eyp7ImA9WhZTEUk.&quot;"><id>tag:blogger.com,1999:blog-7275152103306866538.post-5235782035144401771</id><published>2011-03-14T16:55:00.000-07:00</published><updated>2011-03-14T16:55:25.113-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-14T16:55:25.113-07:00</app:edited><title>Blog moving</title><content type="html">This blog is gonna move, I will probably include it as part of my new websites (still not opened). Design of my new website can be seen here:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.otte.cz/Otte/"&gt;http://www.otte.cz/Otte/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Pretty, dont you think?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7275152103306866538-5235782035144401771?l=gameprogrammerdiary.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yrtsG-oq85cNCUV6olT8D_GWVSk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yrtsG-oq85cNCUV6olT8D_GWVSk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yrtsG-oq85cNCUV6olT8D_GWVSk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yrtsG-oq85cNCUV6olT8D_GWVSk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GameProgrammerAndHisThoughts/~4/wnI5DOvsyT8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gameprogrammerdiary.blogspot.com/feeds/5235782035144401771/comments/default" title="Komentáře k příspěvku" /><link rel="replies" type="text/html" href="http://gameprogrammerdiary.blogspot.com/2011/03/blog-moving.html#comment-form" title="Počet komentářů: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/5235782035144401771?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/5235782035144401771?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GameProgrammerAndHisThoughts/~3/wnI5DOvsyT8/blog-moving.html" title="Blog moving" /><author><name>Vilém Otte</name><uri>http://www.blogger.com/profile/14589001326115858629</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gameprogrammerdiary.blogspot.com/2011/03/blog-moving.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cCQ3s7cSp7ImA9Wx9UGUU.&quot;"><id>tag:blogger.com,1999:blog-7275152103306866538.post-8597166063220285466</id><published>2011-02-17T15:24:00.000-08:00</published><updated>2011-02-17T15:24:22.509-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-17T15:24:22.509-08:00</app:edited><title>LibOcean alpha here - a demo for you</title><content type="html">Hello fellow programmers,&lt;br /&gt;
this time especially for programmers, as no one will appreciate this thing more, here it is - my almighty LibOcean! Okay, before we get too excited, there are several things right now - this is a demo (limited use, no control over wind or tessellation of grid to simulate, no multithreading, etc.), even though you still can build pretty nice ocean simulation on it. Here are few screenshots of it in action:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-nI9Bdp2Yspo/TV2bho4kaEI/AAAAAAAAAJ4/tHhSC1w9130/s1600/LibOcean.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-nI9Bdp2Yspo/TV2bho4kaEI/AAAAAAAAAJ4/tHhSC1w9130/s320/LibOcean.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
As you can see, LibOcean generates just and only water surface, everything else (including rendering that surface) is up to you.&lt;br /&gt;
I also supply sample application (source + win32 binaries) with libraries (win32 binaries), that shows how to implement simple ocean cell surface, animated with LibOcean. Also I promise that there are going to be future releases (and updates) with much more funcionality, this one is just a demo library + application.&lt;br /&gt;
LibOcean uses inverse FFT of some spectrum to animate ocean surface, it also is using own FFT function - that is highly optimised for this purposes, currently single thread on Core i3 can compute 512x512 grid in realtime.&lt;br /&gt;
&lt;br /&gt;
For future releases, these are planned features:&lt;br /&gt;
- &lt;em&gt;Multithreading support (up to 8 cores)&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;- Choppy waves&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;- Pre-computing height fields (and offset fields for choppy waves), and saving them&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;- Setting wind and wave direction (you're not allowed to do this in demo)&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;- Setting tessellation and other parameters (you're also not allowed to do this in demo)&amp;nbsp;&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;- Full scale LibOcean site (right now in progress)&amp;nbsp;&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
So, what do you think? Will you give it a try? Here is sample video:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/PdfB8nuG8pw/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/PdfB8nuG8pw?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/PdfB8nuG8pw?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;
Also note, that same system was used on Game Access conference in our tech demo, sample screenshot and video:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Ah_UU4VnjK4/TV2fEHTr8ZI/AAAAAAAAAJ8/uXAgzcd_JXE/s1600/Sea.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-Ah_UU4VnjK4/TV2fEHTr8ZI/AAAAAAAAAJ8/uXAgzcd_JXE/s320/Sea.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/2J_Tuf2Ghdg/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/2J_Tuf2Ghdg?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/2J_Tuf2Ghdg?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;
Okay, you also want a sample application archive and library demonstration, here they are:&lt;br /&gt;
&lt;a href="http://www.otte.cz/engine/libocean/LibOcean_v01a.zip"&gt;LibOcean library win32 binaries&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.otte.cz/engine/libocean/LibOcean_v01a_sample.zip"&gt;LibOcean win32 sample source binaries&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Linux libraries + source will be here soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7275152103306866538-8597166063220285466?l=gameprogrammerdiary.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JX_mXztC5HYX-Mb3iH_wOkU50ks/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JX_mXztC5HYX-Mb3iH_wOkU50ks/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JX_mXztC5HYX-Mb3iH_wOkU50ks/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JX_mXztC5HYX-Mb3iH_wOkU50ks/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GameProgrammerAndHisThoughts/~4/D83DKaaxrvg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gameprogrammerdiary.blogspot.com/feeds/8597166063220285466/comments/default" title="Komentáře k příspěvku" /><link rel="replies" type="text/html" href="http://gameprogrammerdiary.blogspot.com/2011/02/libocean-alpha-here-demo-for-you.html#comment-form" title="Počet komentářů: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/8597166063220285466?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/8597166063220285466?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GameProgrammerAndHisThoughts/~3/D83DKaaxrvg/libocean-alpha-here-demo-for-you.html" title="LibOcean alpha here - a demo for you" /><author><name>Vilém Otte</name><uri>http://www.blogger.com/profile/14589001326115858629</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-nI9Bdp2Yspo/TV2bho4kaEI/AAAAAAAAAJ4/tHhSC1w9130/s72-c/LibOcean.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://gameprogrammerdiary.blogspot.com/2011/02/libocean-alpha-here-demo-for-you.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYMQ3g5eip7ImA9Wx9VFkw.&quot;"><id>tag:blogger.com,1999:blog-7275152103306866538.post-6879387631961612547</id><published>2011-02-01T19:26:00.000-08:00</published><updated>2011-02-01T19:26:22.622-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-01T19:26:22.622-08:00</app:edited><title /><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Another update, this time quite different, because this is the first post I'm writing from linux operating system (I've had been using it for quite a long time, although I've never used it for writing here ... huh strange).&lt;br /&gt;
Apart from another (path tracing positive) news, that I'll post tomorrow or the day after it, I've got some recent news now, this is image:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PHCyn95roV0/TUjGrH5IhCI/AAAAAAAAAJo/kkMdIZ8e5ic/s1600/screen5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://3.bp.blogspot.com/_PHCyn95roV0/TUjGrH5IhCI/AAAAAAAAAJo/kkMdIZ8e5ic/s320/screen5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Yes, this is a little bit more complicated model of horse (2k triangles), rendered with current version of my software ray tracer (and still single core, no packets and such...).&lt;br /&gt;
The first official specification of my interactive raytracer is being more and more complete (before release to public!), and here goes some specs stuff for version 0.1:&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;em&gt;- Support for triangle primitives (more primitives like Spheres, and such next time; I need to test hit on performance for different kinds of prims)&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;em&gt;- Support for KD trees (right now no BVHs, or BIHs; I gotta start small, so KD trees are only option, although KD compiler is O(N log N) one ... so maybe less complex dynamic scenes are also possible)&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;em&gt;- Support for textures (no texture filtering right now, in next specification and next release)&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;em&gt;- Support for point lights&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;em&gt;- Support for fixed-shading rendering path (possiblity for reflection and/or refraction)&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;em&gt;- Support for single core rendering (Ah... this one hurts!)&amp;nbsp;&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
Don't be scared that this spec can seem a bit too fixed, as for next version I plan adding a lot (of finished stuff, that hasn't been debugged). I hope for releasing spec in due time, but...&lt;span style="font-size: x-small;"&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
Also there will be no packet tracing right now, I still have to decide if to use it, or not (some 2.5 speed gain would be cool, but...), also no gpu support for now (although I have thought of OpenCL, and even more insane GLSL, support), changelog for version 0.2 is going to be:&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;em&gt;- Adding magnification texture filtering (bilinear and bicubic filters)&lt;/em&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;em&gt;- Adding multi-core processing (hee yeah, n-threads means n-times faster ... well ... almost)&lt;/em&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;em&gt;- Speeding up (better memory alignment, I think I can dig out some percents outta this)&lt;/em&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;em&gt;- Extending fixed shading rendering path to be a bit programmable (e.g. start to extending it)&lt;br /&gt;
- Start working on GPU support&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
As you can see, it is gonna grow, with little steps, but... it will grow. I hope I'll manage to keep this project on a line.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7275152103306866538-6879387631961612547?l=gameprogrammerdiary.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lazTV6t6syq6fFC3jXRWYbZ0Udc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lazTV6t6syq6fFC3jXRWYbZ0Udc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lazTV6t6syq6fFC3jXRWYbZ0Udc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lazTV6t6syq6fFC3jXRWYbZ0Udc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GameProgrammerAndHisThoughts/~4/CR0IG5L43BE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gameprogrammerdiary.blogspot.com/feeds/6879387631961612547/comments/default" title="Komentáře k příspěvku" /><link rel="replies" type="text/html" href="http://gameprogrammerdiary.blogspot.com/2011/02/another-update-this-time-quite.html#comment-form" title="Počet komentářů: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/6879387631961612547?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/6879387631961612547?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GameProgrammerAndHisThoughts/~3/CR0IG5L43BE/another-update-this-time-quite.html" title="" /><author><name>Vilém Otte</name><uri>http://www.blogger.com/profile/14589001326115858629</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_PHCyn95roV0/TUjGrH5IhCI/AAAAAAAAAJo/kkMdIZ8e5ic/s72-c/screen5.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://gameprogrammerdiary.blogspot.com/2011/02/another-update-this-time-quite.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8NQnk_eip7ImA9Wx9WGE8.&quot;"><id>tag:blogger.com,1999:blog-7275152103306866538.post-7815840608762183909</id><published>2011-01-23T14:14:00.000-08:00</published><updated>2011-01-23T14:14:53.742-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-23T14:14:53.742-08:00</app:edited><title>Now it is alot better</title><content type="html">Yeah, SAH splitting did good job and I made some pointer magic ... so now performance runs from 1.2 MRays/s to 4.6 MRays/s (Hee yeah!).&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PHCyn95roV0/TTymimkxG5I/AAAAAAAAAJk/m9vgZHEINUk/s1600/screen4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" s5="true" src="http://2.bp.blogspot.com/_PHCyn95roV0/TTymimkxG5I/AAAAAAAAAJk/m9vgZHEINUk/s320/screen4.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Converged image from path tracing :P ... okay, next time I'll probably use another scene, this one is pretty boring and evil for KD-trees (made out of triangle fans). I'll probably compose mine, and compare results to offline renderers and my own OpenGL 4.1 engine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7275152103306866538-7815840608762183909?l=gameprogrammerdiary.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7KHYNZUrrwk2h7-AehsRMr3fHwU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7KHYNZUrrwk2h7-AehsRMr3fHwU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7KHYNZUrrwk2h7-AehsRMr3fHwU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7KHYNZUrrwk2h7-AehsRMr3fHwU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GameProgrammerAndHisThoughts/~4/yBRb0qkG8HQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gameprogrammerdiary.blogspot.com/feeds/7815840608762183909/comments/default" title="Komentáře k příspěvku" /><link rel="replies" type="text/html" href="http://gameprogrammerdiary.blogspot.com/2011/01/now-it-is-alot-better.html#comment-form" title="Počet komentářů: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/7815840608762183909?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/7815840608762183909?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GameProgrammerAndHisThoughts/~3/yBRb0qkG8HQ/now-it-is-alot-better.html" title="Now it is alot better" /><author><name>Vilém Otte</name><uri>http://www.blogger.com/profile/14589001326115858629</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_PHCyn95roV0/TTymimkxG5I/AAAAAAAAAJk/m9vgZHEINUk/s72-c/screen4.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://gameprogrammerdiary.blogspot.com/2011/01/now-it-is-alot-better.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AFSHY4eCp7ImA9Wx9WFEo.&quot;"><id>tag:blogger.com,1999:blog-7275152103306866538.post-7542669321441369844</id><published>2011-01-19T15:28:00.000-08:00</published><updated>2011-01-19T15:28:39.830-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-19T15:28:39.830-08:00</app:edited><title>Optimizing</title><content type="html">&lt;div class="separator" style="clear: both; text-align: left;"&gt;Raising performance with KD-trees is really important part of code, one has to write fast and cache-wise traversal, along with being careful at construction phase - Surface Area Heuristics is really important part, it can make ray tracer run like hell, or die (very, and I mean really very) slowly in pain.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I prefer first way, to make it run like hell - 1.54 MRays/s showed on screenshot is definitely not good! Still it uses single core, but I can do better - I mostly finished some traversal optimisations, tripled triangle count in scene (performance stood the same - so I'm definitely not triangle bound right now) ... so right now I'll focus on implementing median and surface area heuristics - instead of naive.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_PHCyn95roV0/TTdxcVokipI/AAAAAAAAAJg/VWI9BT45S4Q/s1600/screen3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" n4="true" src="http://4.bp.blogspot.com/_PHCyn95roV0/TTdxcVokipI/AAAAAAAAAJg/VWI9BT45S4Q/s320/screen3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;So next things are:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;em&gt;Median, SAH splitting in KD Building process&lt;/em&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Optimizing KD-tree cache-wise&lt;/li&gt;
&lt;li&gt;Optimizing traversal further&lt;/li&gt;
&lt;/em&gt;
&lt;li&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;em&gt;Doing some black magic?&lt;/em&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7275152103306866538-7542669321441369844?l=gameprogrammerdiary.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/R9tJDizpruDGK55bOvT2JLZyOeE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/R9tJDizpruDGK55bOvT2JLZyOeE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/R9tJDizpruDGK55bOvT2JLZyOeE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/R9tJDizpruDGK55bOvT2JLZyOeE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GameProgrammerAndHisThoughts/~4/6ucAyFRR6rY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gameprogrammerdiary.blogspot.com/feeds/7542669321441369844/comments/default" title="Komentáře k příspěvku" /><link rel="replies" type="text/html" href="http://gameprogrammerdiary.blogspot.com/2011/01/optimizing.html#comment-form" title="Počet komentářů: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/7542669321441369844?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/7542669321441369844?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GameProgrammerAndHisThoughts/~3/6ucAyFRR6rY/optimizing.html" title="Optimizing" /><author><name>Vilém Otte</name><uri>http://www.blogger.com/profile/14589001326115858629</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_PHCyn95roV0/TTdxcVokipI/AAAAAAAAAJg/VWI9BT45S4Q/s72-c/screen3.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://gameprogrammerdiary.blogspot.com/2011/01/optimizing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cAQX07fCp7ImA9Wx9WEk8.&quot;"><id>tag:blogger.com,1999:blog-7275152103306866538.post-1900980909362497464</id><published>2011-01-16T17:50:00.000-08:00</published><updated>2011-01-16T17:50:40.304-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-16T17:50:40.304-08:00</app:edited><title>KD-trees</title><content type="html">Ok, so I've said myself to try some KD-trees and write a new code to&amp;nbsp;them ... (I haven't touched them for a while and I wanna rewrite my old code, so...)&amp;nbsp;to see how they outperform todays BVHs! Of course right now I tested just primary rays with some simple single texture unit on BSP level, see some very boring screenshot.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PHCyn95roV0/TTOb2af2Y-I/AAAAAAAAAJc/9wwTBtsyBtM/s1600/RT.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" n4="true" src="http://3.bp.blogspot.com/_PHCyn95roV0/TTOb2af2Y-I/AAAAAAAAAJc/9wwTBtsyBtM/s320/RT.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;The important thing is, I can get between 0.67 and 3.92 MRays/s on single core with median splitting KD-tree (with really unoptimised structure and pretty ugly and slow traversal) - I presume that implementing SAH could definitely double the speed at least, and more important thing, optimising speed could double or triple it again! That would be really good gain (I just need to perform some black magic on it :P).&lt;br /&gt;
And I'll give it at least 4 cores - that should ideally quadruple the speed. So in recent time I'll probably want to implement SAH KD tree and optimise code a bit (with lots and lots of magic).&lt;br /&gt;
&lt;br /&gt;
As this is weekend project I don't know when I'll get my hands on it again. I just have too much of standard work through the week, but I might find some hours to work on it :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7275152103306866538-1900980909362497464?l=gameprogrammerdiary.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AAzsG3m-9u2FizDiL5XqOMA-T5M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AAzsG3m-9u2FizDiL5XqOMA-T5M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AAzsG3m-9u2FizDiL5XqOMA-T5M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AAzsG3m-9u2FizDiL5XqOMA-T5M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GameProgrammerAndHisThoughts/~4/P_zc9rcNy2Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gameprogrammerdiary.blogspot.com/feeds/1900980909362497464/comments/default" title="Komentáře k příspěvku" /><link rel="replies" type="text/html" href="http://gameprogrammerdiary.blogspot.com/2011/01/kd-trees.html#comment-form" title="Počet komentářů: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/1900980909362497464?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/1900980909362497464?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GameProgrammerAndHisThoughts/~3/P_zc9rcNy2Y/kd-trees.html" title="KD-trees" /><author><name>Vilém Otte</name><uri>http://www.blogger.com/profile/14589001326115858629</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_PHCyn95roV0/TTOb2af2Y-I/AAAAAAAAAJc/9wwTBtsyBtM/s72-c/RT.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://gameprogrammerdiary.blogspot.com/2011/01/kd-trees.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMERnk-fCp7ImA9Wx9XFk0.&quot;"><id>tag:blogger.com,1999:blog-7275152103306866538.post-114696110283459324</id><published>2011-01-09T13:07:00.000-08:00</published><updated>2011-01-09T13:10:07.754-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T13:10:07.754-08:00</app:edited><title>Blog reset + changes to come</title><content type="html">Hello,&lt;br /&gt;&lt;br /&gt;I've decided to reset whole blog and make it a bit more attractive (e.g. write here more professional stuff). And also to attract more people here.&lt;br /&gt;&lt;br /&gt;I've also decided to write weekly reports here (they might be written often, and also they might not as well - but I'll try to write at least one a week) on what am I working, how my projects progressed, etc.&lt;br /&gt;&lt;br /&gt;So I hope it will get more cool in few moments!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7275152103306866538-114696110283459324?l=gameprogrammerdiary.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HpAuFSOJ9yClylzrZA9AoXaEqHg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HpAuFSOJ9yClylzrZA9AoXaEqHg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HpAuFSOJ9yClylzrZA9AoXaEqHg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HpAuFSOJ9yClylzrZA9AoXaEqHg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GameProgrammerAndHisThoughts/~4/Cx_Fdwevhhk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gameprogrammerdiary.blogspot.com/feeds/114696110283459324/comments/default" title="Komentáře k příspěvku" /><link rel="replies" type="text/html" href="http://gameprogrammerdiary.blogspot.com/2011/01/blog-reset-changes-to-come.html#comment-form" title="Počet komentářů: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/114696110283459324?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7275152103306866538/posts/default/114696110283459324?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GameProgrammerAndHisThoughts/~3/Cx_Fdwevhhk/blog-reset-changes-to-come.html" title="Blog reset + changes to come" /><author><name>Vilém Otte</name><uri>http://www.blogger.com/profile/14589001326115858629</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gameprogrammerdiary.blogspot.com/2011/01/blog-reset-changes-to-come.html</feedburner:origLink></entry></feed>

