<?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-1284103224036292113</id><updated>2012-02-11T13:34:17.446+02:00</updated><category term='d3d 11'/><category term='multithreading'/><category term='3d vision'/><category term='nvstereo'/><category term='0x4433564e'/><category term='NV3D'/><category term='d3d 11.1'/><title type='text'>Joe's CG</title><subtitle type='html'>Блог о real-time графике и другой разной ерунде</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default?start-index=101&amp;max-results=100'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>261</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-1735902841868295090</id><published>2012-02-09T13:40:00.001+02:00</published><updated>2012-02-10T10:30:29.054+02:00</updated><title type='text'>Books</title><content type='html'>&lt;b&gt;&lt;span style="font-size: large;"&gt;К&lt;/span&gt;&lt;/b&gt;упил пару новых книг:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-miibhiHj5Wo/TzOwDIP4Y1I/AAAAAAAAAqI/C86lEJ6fyu4/s1600/tex_and_myth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-miibhiHj5Wo/TzOwDIP4Y1I/AAAAAAAAAqI/C86lEJ6fyu4/s320/tex_and_myth.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Думаю, в описании они не нуждаются.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-1735902841868295090?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/1735902841868295090/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2012/02/books.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1735902841868295090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1735902841868295090'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2012/02/books.html' title='Books'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-miibhiHj5Wo/TzOwDIP4Y1I/AAAAAAAAAqI/C86lEJ6fyu4/s72-c/tex_and_myth.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-2893262693211775741</id><published>2012-02-05T01:42:00.000+02:00</published><updated>2012-02-05T01:42:09.990+02:00</updated><title type='text'>Visual Studio Vista</title><content type='html'>&lt;b&gt;&lt;span style="font-size: large;"&gt;1&lt;/span&gt;&lt;/b&gt;0 и 11 студии ужасны. Точка.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-2893262693211775741?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/2893262693211775741/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2012/02/visual-studio-vista.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2893262693211775741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2893262693211775741'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2012/02/visual-studio-vista.html' title='Visual Studio Vista'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-4990539464452254974</id><published>2012-02-01T14:25:00.003+02:00</published><updated>2012-02-01T14:25:46.152+02:00</updated><title type='text'>The State Of Anti-Aliasing</title><content type='html'>&lt;a href="http://www.anandtech.com/show/5458/the-radeon-hd-7970-reprise-pcie-bandwidth-overclocking-and-msaa/1"&gt;The Radeon HD 7970 Reprise: PCIe Bandwidth, Overclocking, &amp; The State Of Anti-Aliasing&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-4990539464452254974?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/4990539464452254974/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2012/02/state-of-anti-aliasing.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4990539464452254974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4990539464452254974'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2012/02/state-of-anti-aliasing.html' title='The State Of Anti-Aliasing'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7623299546184164248</id><published>2012-01-28T21:11:00.002+02:00</published><updated>2012-01-28T21:11:42.127+02:00</updated><title type='text'>The End of USSR</title><content type='html'>&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/Vw-HrKS7y5M?rel=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-7623299546184164248?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7623299546184164248/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2012/01/end-of-ussr.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7623299546184164248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7623299546184164248'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2012/01/end-of-ussr.html' title='The End of USSR'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/Vw-HrKS7y5M/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-917837440155729408</id><published>2012-01-27T18:12:00.000+02:00</published><updated>2012-01-27T20:20:35.714+02:00</updated><title type='text'>iMac Greyish Smudge</title><content type='html'>&lt;b&gt;&lt;span style="font-size: large;"&gt;М&lt;/span&gt;&lt;/b&gt;ой iMac 27' уже где-то полтора года в эксплуатации. А сегодня я заметил на его матрице, в правом верхнем углу, странные серые разводы. Я подумал что на фронтальном стекле скопились пыль и жир и протёр его влажной салфеткой. Но оказалось, что это повреждения IPS матрицы, а не грязь на стекле.&lt;br /&gt;&lt;br /&gt;Я прошёл по офису и выяснил, что подобные пятна появились и на других iMac-ах, в основном в правом верхнем углу. Ну и наконец Google подсказал, что это распространённый дефект этих моноблоков: &lt;a href="https://discussions.apple.com/thread/2699434?start=0&amp;amp;tstart=0"&gt;пользователи жалуются&lt;/a&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/1284103224036292113-917837440155729408?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/917837440155729408/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2012/01/imac-greyish-smudge.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/917837440155729408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/917837440155729408'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2012/01/imac-greyish-smudge.html' title='iMac Greyish Smudge'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-1059271206105284606</id><published>2012-01-23T23:52:00.000+02:00</published><updated>2012-01-27T19:28:39.501+02:00</updated><title type='text'>DirectGL progress</title><content type='html'>&lt;b&gt;&lt;span style="font-size: large;"&gt;З&lt;/span&gt;&lt;/b&gt;авершил работу над функциями по загрузке 2D-текстур. Решено реализовать только загрузку BMP, TGA и DDS форматов (без поддержки расширений DX10, т. к. они всё равно не применимы в DX9-рендере). Я написал простой unit test который грузит DDS текстуры разных форматов (как сжатые, так и различных форматов вида RGB8, R5G6B5 и т. д.), а фактически текстуры разделены на два лагеря - несжатые RGBA8 и сжатые DXT, всё остальное практически никогда не используется для хранения в видеопамяти. Для полноты необходимо реализовать ещё загрузку cubemap текстуры из DDS, но это если руки дойдут.&lt;br /&gt;&lt;br /&gt;Решено также постепенно подключать к проекту различные unit test-ы, как это практикуется в Wine, чтобы тестировать враппер на соответствие реальному поведению рантайма Direct3D. Из того же Wine эти тесты и думаю заимствовать (как-никак open source).&lt;br /&gt;&lt;br /&gt;Также заставил работать через враппер два сэмпла из DirectX 9 SDK - EmptyProject и SimpleSample. Как и другие примеры они интенсивно используют DXUT, так что это хороший тест "на прочность". Но тут обнаружился интересный баг - шрифт рисуется в бэк-буфер перевернутым по оси ординат:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-RdSmJcFF9UY/TyKS3otO7jI/AAAAAAAAAp0/6lf25Kjx4RU/s1600/SimpleSample01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" src="http://4.bp.blogspot.com/-RdSmJcFF9UY/TyKS3otO7jI/AAAAAAAAAp0/6lf25Kjx4RU/s320/SimpleSample01.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Тут нужно отметить, что при портировании Direct3D кода на OpenGL есть один неприятный момент: &amp;nbsp;начало системы текстурных координат Direct3D находится в левом верхнем углу, тогда как в OpenGL - в левом нижнем. Для обычных текстур это не имеет значения, т. к. похоже драйвер правильно укладывает их в память (или железо вычисляет адрес в памяти) в зависимости от используемого API. Но с render target текстурами при их семплировании в шейдере приходится инвертировать текстурные координаты по оси Y. Это решение имеет по крайней мере два недостатка:&lt;br /&gt;&lt;br /&gt;1) Необходимо пересмотреть код всех шейдеров и в тех местах, где семплируется render target, поправить текстурные координаты.&lt;br /&gt;&lt;br /&gt;2) Возможны случаи, когда в шейдер на один и тот же текстурный слот попеременно передаётся обычная текстура и render target. Тут приходится заводить дополнительный булевый флажок либо создавать отдельный шейдер для каждого случая. При использовании флажка, если он по какой-то причине не отражает реальное положение дел (упустили где-то, энджин-то большой), изображение нарисуется перевёрнутым.&lt;br /&gt;&lt;br /&gt;Оба эти решения являются неприемлемыми.&lt;br /&gt;&lt;br /&gt;Как компромисс, мною решено менять матрицу проекции так, чтобы растеризуемая геометрия рисовалась в render target с инвертированием по оси ординат. Позже, при семплировании этого render target в шейдере, произойдёт восстановление правильного изображения. Обычно в коде достаточно мало мест, где устанавливается матрица проекции для вершинного шейдера (или TnL), или мы можем знать номер регистра, по которому лежит первая строка (столбец) матрицы, поэтому внести поправки в этом случае легче, чем в остальных.&lt;br /&gt;&lt;br /&gt;Если же использовать этот метод, то любые другие способы записи в render target (например, отображение шрифта силами GDI), не проходят преобразование матрицей, и попадают в render target с исходными координатами - соответственно при семплировании в шейдере изображение перевернётся. Впрочем, это минорный недостаток, в реальных играх вся графика полигональна.&lt;br /&gt;&lt;br /&gt;Общий вид GDI текста с инвертированием текстурных координат:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-bnnUwoQqhH0/TyKS4yTLp3I/AAAAAAAAAp8/fQ13AOZW5DE/s1600/SimpleSample02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" src="http://3.bp.blogspot.com/-bnnUwoQqhH0/TyKS4yTLp3I/AAAAAAAAAp8/fQ13AOZW5DE/s320/SimpleSample02.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&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/1284103224036292113-1059271206105284606?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/1059271206105284606/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2012/01/directgl-progress.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1059271206105284606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1059271206105284606'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2012/01/directgl-progress.html' title='DirectGL progress'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-RdSmJcFF9UY/TyKS3otO7jI/AAAAAAAAAp0/6lf25Kjx4RU/s72-c/SimpleSample01.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-5242053088450673464</id><published>2012-01-19T15:31:00.002+02:00</published><updated>2012-01-19T15:31:52.237+02:00</updated><title type='text'>I Love MS</title><content type='html'>&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/IY2j_GPIqRA" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-5242053088450673464?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/5242053088450673464/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2012/01/i-love-ms.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5242053088450673464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5242053088450673464'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2012/01/i-love-ms.html' title='I Love MS'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/IY2j_GPIqRA/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7630431221923853482</id><published>2012-01-16T00:46:00.003+02:00</published><updated>2012-01-16T00:46:21.902+02:00</updated><title type='text'>Фобос-Грунт</title><content type='html'>&lt;b&gt;&lt;span style="font-size: large;"&gt;С&lt;/span&gt;&lt;/b&gt;абж наконец-то упал в океан.&lt;br /&gt;Нанотехнологии блять!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-7630431221923853482?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7630431221923853482/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2012/01/blog-post_16.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7630431221923853482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7630431221923853482'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2012/01/blog-post_16.html' title='Фобос-Грунт'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-5251734797250359828</id><published>2012-01-12T12:57:00.000+02:00</published><updated>2012-01-12T12:57:57.129+02:00</updated><title type='text'>30</title><content type='html'>&lt;b&gt;&lt;span style="font-size: large;"&gt;В&lt;/span&gt;&lt;/b&gt;от так вот живёшь, крутишься, чего-то добиваешься...&lt;br /&gt;А тут тебе, хлоп - тридцать лет стукнуло :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-5251734797250359828?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/5251734797250359828/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2012/01/30.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5251734797250359828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5251734797250359828'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2012/01/30.html' title='30'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-4531098121543354904</id><published>2012-01-06T15:00:00.000+02:00</published><updated>2012-01-06T19:14:29.264+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3d vision'/><category scheme='http://www.blogger.com/atom/ns#' term='nvstereo'/><category scheme='http://www.blogger.com/atom/ns#' term='NV3D'/><category scheme='http://www.blogger.com/atom/ns#' term='0x4433564e'/><title type='text'>Stereo Texture</title><content type='html'>&lt;span style="font-size: large;"&gt;&lt;b&gt;П&lt;/b&gt;&lt;/span&gt;ока мы все вынуждены ждать Direct3D 11.1, где появится нэйтивная &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/hh404554(v=VS.85).aspx"&gt;поддержка стереоскопии&lt;/a&gt;, под DirectX 9 для всяких этих ваших ассассинов кридов приходится использовать различные хаки, чтобы улучшить поддержку стерео.&lt;br /&gt;&lt;br /&gt;Механизм, через который работает 3D Vision на картах NVidia, довольно прост - драйвер добавляет  &lt;i&gt;footer&lt;/i&gt; в каждый вершинный шейдер таким образом, чтобы позиция вершины в clip space различалась для правого и левого кадра (см. &lt;a href="http://developer.download.nvidia.com/whitepapers/2010/NVIDIA%203D%20Vision%20Automatic.pdf"&gt;NVIDIA 3D Vision Automatic Best Practices Guide&lt;/a&gt;). Таким образом стерео автоматически работает в большинстве трёхмерных игр и даже тех, которые изначально под него не разрабатывались.&lt;br /&gt;&lt;br /&gt;Проблемы начинаются в случаях, если при рендеринге использовались какие-то нечестные техники или в случае различных deferred подходов - картинка обычно выглядит неестественно, если не сказать хуже. 3D Vision работает на уровне геометрического пайплайна, во всех остальных случаях нужно что-то делать руками самостоятельно. Вот недавно по работе мне было поручено исправить некоторые огрехи нашего движка при работе в стерео-режиме. Как выяснилось, одна из техник использовала механизм отложенного рендеринга партиклов, при котором цвет и дополнительная информация сначала рисуются в промежуточный render target, а потом изображение из него "вклеивается" в основной кадр. Понятно, что 3D Vision проплывает в этом случае по левому борту, и необходимы поправки уже в пиксельном шейдере. Но вот загвоздка - стандартными средствами Direct3D выяснить какой из кадров - правый или левый, рисуется в данный момент - в шейдере невозможно, а без возможности их различать нет и возможности что-либо изменить.&lt;br /&gt;&lt;br /&gt;Начав искать в Сети методы решения подобных проблем, я обнаружил, что NVidia предоставляет пример &lt;a href="http://developer.nvidia.com/sites/default/files/akamai/gamedev/files/sdk/11/StereoIssues.zip"&gt;StereoIssues&lt;/a&gt; в &lt;a href="http://developer.nvidia.com/nvidia-graphics-sdk-11"&gt;NVIDIA Graphics SDK 11&lt;/a&gt;, в котором имеется код по созданию специальной "стереотекстуры" (файл nvstereo.h). Стереотекстура позволяет семплировать в шейдере данные, которые будут различаться для левого и правого кадра, так что, например, можно вычислить смещение для каждого кадра по формуле:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;pos.x += separation * (pos.w - convergence)&lt;/div&gt;&lt;br /&gt;Это очередной хак на уровне D3D9/10 API, и для его включения необходимо разместить fourcc 'NV3D' в последней строке staging текстуры формата RGBA32F, данные из которой впоследствии необходимо скопировать в обычную текстуру посредством &lt;i&gt;UpdateSurface()/CopySubresourceRegion()&lt;/i&gt;. При копировании драйвер разместит данные для левого кадра в целевой текстуре, а для правого (как я понимаю) создаст shadow copy и разместит в ней данные для правого кадра, взяв их по определённому адресу (см. раздел 3D Video в &lt;a href="http://developer.download.nvidia.com/presentations/2009/GDC/GDC09-3DVision-The_In_and_Out.pdf"&gt;GDC09 3DVision The In and Out&lt;/a&gt;). Если всё сделать в том порядке, который предлагается в примере, то шейдер действительно будет семплировать различные данные по одним и тем же текстурным координатам. Ну а дальше уже дело техники...&lt;br /&gt;&lt;br /&gt;Одним из подводных камней, о который я споткнулся, является то, что недостаточно просто при старте скопировать данные в стереотекстуру и в дальнейшем пользоваться ею. Всё дело в том, что 3D Vision не включается с первым же кадром: драйвер сначала собирает некоторую информацию о первых кадрах, и только потом включается стереорежим. После его включения и нужно создавать стереотекстуру, а лучше всего проверять &amp;nbsp;переключение режимов функцией &lt;i&gt;NvAPI_Stereo_IsActivated()&lt;/i&gt;&amp;nbsp;из NvAPI, и обновлять её после изменения результата. А в примере StereoIssues идут ещё дальше: т. к. пользователь может динамически изменять такие параметры 3D Vision как EyeSeparation и Convergence, то необходимо отслеживать изменения этих параметров и своевременно обновлять данные в стереотекстуре.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-4531098121543354904?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/4531098121543354904/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2012/01/stereo-texture.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4531098121543354904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4531098121543354904'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2012/01/stereo-texture.html' title='Stereo Texture'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-207639178982250362</id><published>2012-01-05T01:12:00.001+02:00</published><updated>2012-01-05T01:12:22.674+02:00</updated><title type='text'>Игры</title><content type='html'>&lt;b&gt;&lt;span style="font-size: large;"&gt;Я&lt;/span&gt;&lt;/b&gt; работаю в Ubisoft не потому, что мне нравится играть в игры, а просто потому, что мне нравится их программировать :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-207639178982250362?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/207639178982250362/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2012/01/blog-post_05.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/207639178982250362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/207639178982250362'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2012/01/blog-post_05.html' title='Игры'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-352651920146617685</id><published>2012-01-05T01:08:00.002+02:00</published><updated>2012-01-05T01:09:38.084+02:00</updated><title type='text'>Intel Celeron M</title><content type='html'>&lt;b&gt;&lt;span style="font-size: large;"&gt;И&lt;/span&gt;&lt;/b&gt;з-за того, что в моём ноуте стоит сабжевый процессор, IE 8 на нём безбожно тормозит и сёрфинг по Сети лишь раздражает. Ситуация с Opera лишь чуть лучше. По законам копроэкономики я как потреблядь должен был побежать в магазин и прикупить что-нить с намного более мощным CPU (желательно с 4-мя ядрами!). Но вот незадача, Google Chrome на текущей конфигурации летает.&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/1284103224036292113-352651920146617685?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/352651920146617685/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2012/01/intel-celeron-m.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/352651920146617685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/352651920146617685'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2012/01/intel-celeron-m.html' title='Intel Celeron M'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7309343487904532052</id><published>2012-01-02T17:26:00.002+02:00</published><updated>2012-01-02T17:29:30.690+02:00</updated><title type='text'>ТВ</title><content type='html'>&lt;strong&gt;&lt;span style="font-size: large;"&gt;П&lt;/span&gt;&lt;/strong&gt;о случаю Нового года довелось посмотреть телевизор.&lt;br /&gt;&lt;br /&gt;Я смотрю, его прямо оккупировали, каждый год одни и те же рожи! Все сытые и довольные, с улыбками поздравляют нас и как всегда желают быть счастливыми! Сколько, интересно, им это стоит и кому на это жаловаться?&lt;br /&gt;&lt;br /&gt;P.S. Да ещё этот ваш карлик, карманный президент, выскочит в перерыве на экран и в двух словах расскажет, как у вас там всё пиздато, и что Россия катится полным ходом в светлое будущее.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-7309343487904532052?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7309343487904532052/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2012/01/blog-post.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7309343487904532052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7309343487904532052'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2012/01/blog-post.html' title='ТВ'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-2840596961799524568</id><published>2011-12-26T13:59:00.001+02:00</published><updated>2011-12-26T14:14:40.296+02:00</updated><title type='text'>Ennio Morricone</title><content type='html'>&lt;b&gt;&lt;span style="font-size: large;"&gt;Н&lt;/span&gt;&lt;/b&gt;едавно (20 числа) в Киеве был концерт Эннио Морриконе. Сегодня открыл для себя что этот саундтрек написал именно он:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.youtube.com/watch?v=Ez_J9Vf1tYU"&gt;The Demise of Barbara and the Return of Joe&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Под него Билл делал свои последние шаги, если кто помнит. Даже если бы и мне довелось умирать, то да - только под этот бриллиант...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-2840596961799524568?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/2840596961799524568/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/12/ennio-morricone.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2840596961799524568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2840596961799524568'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/12/ennio-morricone.html' title='Ennio Morricone'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-2689537392262466964</id><published>2011-12-24T19:03:00.002+02:00</published><updated>2011-12-26T13:59:39.629+02:00</updated><title type='text'>Эксимер</title><content type='html'>&lt;b&gt;&lt;span style="font-size: large;"&gt;В&lt;/span&gt;&lt;/b&gt;чера ходил в киевский "Эксимер", делал диагностику зрения.&lt;br /&gt;Капали глаза, мучили несколькими аппаратами.&lt;br /&gt;&lt;br /&gt;Зав. отделением сказал что из-за анатомии моего глаза роговица&amp;nbsp;слишком тонкая для LASIK и что годится только LAS&lt;b&gt;E&lt;/b&gt;K. Период восстановления - до двух недель. К тому же у меня какие-то повреждения в глазу и надо делать укрепление сетчатки лазером перед основной операцией.&lt;br /&gt;&lt;br /&gt;Я вычитал что в случае с LASEK после операции два дня болят глаза (из-за повреждения нервных окончаний) и предсказуемость операции ниже, чем при LASIK, так что как-то не хочется её делать. Думаю в следующем году сходить ещё в "Новий Зiр" - пишут у них есть метод &lt;i&gt;Super LASIK Thin Flap&lt;/i&gt;, пока единственный в Украине. Думаю стоит попробовать, хотя цены наверное заоблачные. Впрочем, собственные глаза - это явно не тот орган, на котором надо экономить.&lt;br /&gt;&lt;br /&gt;Кстати на Ютюбе есть &lt;a href="http://www.youtube.com/watch?v=sdmrtzmvgm4"&gt;видео&lt;/a&gt; с подобной процедурой.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-2689537392262466964?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/2689537392262466964/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/12/blog-post.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2689537392262466964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2689537392262466964'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/12/blog-post.html' title='Эксимер'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-9168059589734724333</id><published>2011-12-24T16:50:00.000+02:00</published><updated>2011-12-26T13:59:53.664+02:00</updated><title type='text'>DirectGL progress</title><content type='html'>&lt;b&gt;&lt;span style="font-size: large;"&gt;П&lt;/span&gt;&lt;/b&gt;о работе вытащил уже запылившийся DirectGL, и увидел что многое надо переделать. В итоге меня занесло и я сел дописывать функционал D3DX.&lt;br /&gt;&lt;br /&gt;Во-первых, я серьёзно взялся за загрузку текстур через D3DX API. Тут я многое позаимствовал из кодов Wine, а именно иерархию вызовов при загрузке текстуры, различные проверки, способ мэппинга файла в память и т. д. Пока что грузятся палитровые и true-color BMP файлы, TGA с RLE-компрессией и без, работает распознавание DDS файлов. Последний формат довольно сложен (поверхности, cubemap-ы, объёмные текстуры, куча форматов, расширения DX10+), так что надо выкроить время на его поддержку.&lt;br /&gt;&lt;br /&gt;Во-вторых, я реализовал загрузку простых файлов формата .x, но быстрым путём: создаются интерфейсы Direct3D для временного окна и грузится реальный меш, потом данные копируются в OpenGL реализацию интерфейса ID3DXMesh :) Конечно этот способ непортируем, зато позволяет проверить насколько работоспособен код рисования.&lt;br /&gt;&lt;br /&gt;Результат:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-BVkHNvnlmHw/TvXj3ip_YpI/AAAAAAAAApg/3sIVKL5Czms/s1600/Tut06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/-BVkHNvnlmHw/TvXj3ip_YpI/AAAAAAAAApg/3sIVKL5Czms/s320/Tut06.png" width="300" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-9168059589734724333?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/9168059589734724333/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/12/directgl-progress.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/9168059589734724333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/9168059589734724333'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/12/directgl-progress.html' title='DirectGL progress'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-BVkHNvnlmHw/TvXj3ip_YpI/AAAAAAAAApg/3sIVKL5Czms/s72-c/Tut06.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-8842693871297077332</id><published>2011-12-23T11:32:00.000+02:00</published><updated>2011-12-23T11:32:11.117+02:00</updated><title type='text'>Slim LG DM92</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flatpanelshd.com/news.php?subaction=showfull&amp;amp;id=1324551456"&gt;LG teases DM92, DM82, and DM52 IPS monitors&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-z3LyWXpGDzs/TvRKAYZ8o5I/AAAAAAAAApM/nvFLGphBGMU/s1600/lgdm92-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="194" src="http://2.bp.blogspot.com/-z3LyWXpGDzs/TvRKAYZ8o5I/AAAAAAAAApM/nvFLGphBGMU/s320/lgdm92-1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-4ApcFjVQvJ8/TvRKDDJPE1I/AAAAAAAAApU/E-5Ji7sv6NA/s1600/lgdm92-2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-4ApcFjVQvJ8/TvRKDDJPE1I/AAAAAAAAApU/E-5Ji7sv6NA/s320/lgdm92-2.jpg" width="228" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Хотет такой!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-8842693871297077332?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/8842693871297077332/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/12/slim-lg-dm92.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/8842693871297077332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/8842693871297077332'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/12/slim-lg-dm92.html' title='Slim LG DM92'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-z3LyWXpGDzs/TvRKAYZ8o5I/AAAAAAAAApM/nvFLGphBGMU/s72-c/lgdm92-1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-5991016907871974634</id><published>2011-12-22T17:19:00.001+02:00</published><updated>2011-12-26T14:00:07.742+02:00</updated><title type='text'>Radeon 7970</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a href="http://www.guru3d.com/article/amd-radeon-hd-7970-review/"&gt;AMD Radeon HD 7970 review&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Н&lt;/span&gt;&lt;/b&gt;адеюсь в этот раз Хуанг Энвидиевич не будет бегать по сцене и трясти Кеплером, как он это делал с макетом Ферми.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-5991016907871974634?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/5991016907871974634/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/12/radeon-7970.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5991016907871974634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5991016907871974634'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/12/radeon-7970.html' title='Radeon 7970'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-8987660471716621281</id><published>2011-12-09T17:06:00.001+02:00</published><updated>2011-12-09T17:08:08.986+02:00</updated><title type='text'>GSC закрылись</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;П&lt;/span&gt;&lt;/b&gt;охоже, Сталкера 2 нам уже не дождаться.&lt;br /&gt;Григорович решил закрыть компанию, не объясняя причин.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ukranews.com/ru/news/ukraine/2011/12/09/59663"&gt;http://ukranews.com/ru/news/ukraine/2011/12/09/59663&lt;/a&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/1284103224036292113-8987660471716621281?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/8987660471716621281/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/12/gsc.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/8987660471716621281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/8987660471716621281'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/12/gsc.html' title='GSC закрылись'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-6483641423638581759</id><published>2011-12-05T10:32:00.001+02:00</published><updated>2011-12-05T10:42:03.084+02:00</updated><title type='text'>Relocation</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;П&lt;/span&gt;&lt;/b&gt;осле двух лет жизни на Оболони я переехал в центр города. Снимаю двухкомнатную квартирку вместе с &lt;a href="http://www.gamedev.ru/users/?id=46282"&gt;PANDA&lt;/a&gt; (ему одному было дорого). Теперь до офиса - 10 минут неспешным шагом. И да, наконец-то мне больше не придётся спускаться в киевское метро. Ура.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-6483641423638581759?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/6483641423638581759/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/12/relocation.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/6483641423638581759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/6483641423638581759'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/12/relocation.html' title='Relocation'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-1674843545822884847</id><published>2011-11-18T12:20:00.001+02:00</published><updated>2011-11-20T17:03:46.198+02:00</updated><title type='text'>OnLive</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;У&lt;/span&gt;&lt;/b&gt; нас в офисе появилось вот такое примечательное устройство:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-UZW3JjR3lK4/TsYxY8t30pI/AAAAAAAAAmc/MAhJf11U0yM/s1600/IMG_0437.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-UZW3JjR3lK4/TsYxY8t30pI/AAAAAAAAAmc/MAhJf11U0yM/s320/IMG_0437.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both; text-align: left;"&gt;Это OnLive(R) Microconsole TV Adapter. Подключается к TV через разъём HDMI, а к геймпаду- через переходник USB/mini-USB.Кабелёк коротенький, приходится держать консоль на коленях.&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-w1XjONtP94g/TskPnP0CpeI/AAAAAAAAAmk/XAGyzmOcc0k/s1600/IMG_0458.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-w1XjONtP94g/TskPnP0CpeI/AAAAAAAAAmk/XAGyzmOcc0k/s320/IMG_0458.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-1H96cHnYM5g/TskQ2WZHisI/AAAAAAAAAnU/7JvQeaNKlWY/s1600/IMG_0460.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-1H96cHnYM5g/TskQ2WZHisI/AAAAAAAAAnU/7JvQeaNKlWY/s320/IMG_0460.JPG" width="240" /&gt;&lt;/a&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: left;"&gt;У этого экземпляра уже есть аккаунт на серверах OnLive, так что можно играть. Я для пробы поиграл в Splinter Cell: Conviction&amp;nbsp;и Prince Of Persia: The Fogotten Sands.&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;a href="http://3.bp.blogspot.com/-w6WlCwrbEu0/TskQrdi2gWI/AAAAAAAAAnI/Cl7be_1YmKM/s1600/IMG_0438.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-w6WlCwrbEu0/TskQrdi2gWI/AAAAAAAAAnI/Cl7be_1YmKM/s320/IMG_0438.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-V8CtCvxZE9U/TskRqofw-II/AAAAAAAAAnc/GlsuEUBs_0k/s1600/IMG_0439.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-V8CtCvxZE9U/TskRqofw-II/AAAAAAAAAnc/GlsuEUBs_0k/s320/IMG_0439.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-iNA_UNh2pW4/TskRt_5F-kI/AAAAAAAAAnk/OHbTFOA3HiM/s1600/IMG_0441.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-iNA_UNh2pW4/TskRt_5F-kI/AAAAAAAAAnk/OHbTFOA3HiM/s320/IMG_0441.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-QS_fvrno4d0/TskRyDvONXI/AAAAAAAAAns/d2XdibzqB7U/s1600/IMG_0443.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-QS_fvrno4d0/TskRyDvONXI/AAAAAAAAAns/d2XdibzqB7U/s320/IMG_0443.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-4ZzQbdYA294/TskR010ASFI/AAAAAAAAAn0/u4ml1R82YSg/s1600/IMG_0444.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-4ZzQbdYA294/TskR010ASFI/AAAAAAAAAn0/u4ml1R82YSg/s320/IMG_0444.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-WK1pGgU46JM/TskR3p4w4NI/AAAAAAAAAn8/ygiS0rtLoHs/s1600/IMG_0446.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-WK1pGgU46JM/TskR3p4w4NI/AAAAAAAAAn8/ygiS0rtLoHs/s320/IMG_0446.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-VuNEJOrOg4o/TskR7rkI8iI/AAAAAAAAAoE/4XKTRA9iHH4/s1600/IMG_0447.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-VuNEJOrOg4o/TskR7rkI8iI/AAAAAAAAAoE/4XKTRA9iHH4/s320/IMG_0447.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ZeqvUv_5ZfU/TskR-IBxRFI/AAAAAAAAAoM/eH_ZIiIPVvE/s1600/IMG_0448.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-ZeqvUv_5ZfU/TskR-IBxRFI/AAAAAAAAAoM/eH_ZIiIPVvE/s320/IMG_0448.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-KEA7D4Ta9fc/TskSAsoTGeI/AAAAAAAAAoU/tzLVlKaF9gA/s1600/IMG_0450.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-KEA7D4Ta9fc/TskSAsoTGeI/AAAAAAAAAoU/tzLVlKaF9gA/s320/IMG_0450.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-swwmdWTDoCA/TskSL8l3AwI/AAAAAAAAAok/phMx4bBDmag/s1600/IMG_0452.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-swwmdWTDoCA/TskSL8l3AwI/AAAAAAAAAok/phMx4bBDmag/s320/IMG_0452.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-cECG4dpq9UI/TskSWjdpD3I/AAAAAAAAAos/3Xw1wQnmjEg/s1600/IMG_0454.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-cECG4dpq9UI/TskSWjdpD3I/AAAAAAAAAos/3Xw1wQnmjEg/s320/IMG_0454.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-QficGoD0HQI/TskSY3c8TPI/AAAAAAAAAo0/Eo-3mNKiBgI/s1600/IMG_0455.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-QficGoD0HQI/TskSY3c8TPI/AAAAAAAAAo0/Eo-3mNKiBgI/s320/IMG_0455.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-8PXlu8u8R4Q/TskScL9Xg6I/AAAAAAAAAo8/G7XRYC2EdIo/s1600/IMG_0456.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-8PXlu8u8R4Q/TskScL9Xg6I/AAAAAAAAAo8/G7XRYC2EdIo/s320/IMG_0456.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;Качество изображения на 40-дюймовом телевизоре вполне хорошее, артефактов сжатия я не заметил, возможно их видно только на мониторе, или же железо консольки "старается" убрать все огрехи. Чувства, что ты смотришь YouTube в 240p, не возникает. Частота кадров - по мне где-то 20-25, точнее сказать затруднительно. Есть небольшой лаг ввода, но гораздо меньше чем я ожидал, когда начинал играть. Целиться конечно неудобно, консольный геймпад+специфика доставки контента сообща работают против этого. Да и вообще игрок я никудышный :)&lt;br /&gt;&lt;br /&gt;В общем, я думаю, что&amp;nbsp;это будущее игровой индустрии. Пройдут годы, Сеть разрастётся оптоволокном,&amp;nbsp;уменьшится пинг&amp;nbsp;и такие вот решения&amp;nbsp;станут вполне жизнеспособны. А если есть хороший интернет, в казуальные и пошаговые игры можно играть уже сейчас. По сути&amp;nbsp;приход on-line моделей&amp;nbsp;доставки контента неизбежен, как неизбежным стало и появление многочисленных торрентов-трекеров в середине 2000-x. Сеть породила массовое пиратство, она же его и убъёт.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-1674843545822884847?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/1674843545822884847/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/11/onlive.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1674843545822884847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1674843545822884847'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/11/onlive.html' title='OnLive'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-UZW3JjR3lK4/TsYxY8t30pI/AAAAAAAAAmc/MAhJf11U0yM/s72-c/IMG_0437.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-6509931387047476850</id><published>2011-11-17T11:39:00.001+02:00</published><updated>2011-11-17T15:26:53.291+02:00</updated><title type='text'>Чикса на Лексусе</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;В&lt;/span&gt;&lt;/b&gt;чера я ехал на работу&lt;/div&gt;&lt;div style="text-align: center;"&gt;в метель, туман и гололёд,&lt;/div&gt;&lt;div style="text-align: center;"&gt;вдруг мимо пронеслась Тойота,&lt;/div&gt;&lt;div style="text-align: center;"&gt;взяла опасный поворот.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Пересекая автостраду&lt;/div&gt;&lt;div style="text-align: center;"&gt;там, где сплошная полоса,&lt;/div&gt;&lt;div style="text-align: center;"&gt;водитель мазалась помадой&lt;/div&gt;&lt;div style="text-align: center;"&gt;и тушью красила глаза!&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Как тут от злости не беситься?&lt;/div&gt;&lt;div style="text-align: center;"&gt;Я в гневе бритву уронил&lt;/div&gt;&lt;div style="text-align: center;"&gt;(я дома не успел побриться&lt;/div&gt;&lt;div style="text-align: center;"&gt;и по дороге щёки брил).&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Упала бритва в кофе прямо&lt;/div&gt;&lt;div style="text-align: center;"&gt;(между колен стоял стакан -&lt;/div&gt;&lt;div style="text-align: center;"&gt;мне вкусный кофе варит мама -&lt;/div&gt;&lt;div style="text-align: center;"&gt;его я пью в такой туман ).&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Когда предмет тяжёлый падал,&lt;/div&gt;&lt;div style="text-align: center;"&gt;крутой горячий кипяток&lt;/div&gt;&lt;div style="text-align: center;"&gt;плеснул туда, куда не надо -&lt;/div&gt;&lt;div style="text-align: center;"&gt;там третьей степени ожог.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;И вот от боли я подпрыгнул,&lt;/div&gt;&lt;div style="text-align: center;"&gt;и из моей руки другой&lt;/div&gt;&lt;div style="text-align: center;"&gt;вдруг выпал телефон мобильный -&lt;/div&gt;&lt;div style="text-align: center;"&gt;и снова - в кофе по прямой.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Не помню, что там дальше было...&lt;/div&gt;&lt;div style="text-align: center;"&gt;Открыл глаза: больница? морг?&lt;/div&gt;&lt;div style="text-align: center;"&gt;Теперь ни тачки, ни мобилы...&lt;/div&gt;&lt;div style="text-align: center;"&gt;Зато повязка между ног.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Весь загипсован под завязку,&lt;/div&gt;&lt;div style="text-align: center;"&gt;без гипса только голова.&lt;/div&gt;&lt;div style="text-align: center;"&gt;А вот мораль у этой сказки -&lt;/div&gt;&lt;div style="text-align: center;"&gt;У ВСЕХ БЫ БАБ ЗАБРАТЬ ПРАВА!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-6509931387047476850?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/6509931387047476850/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/11/blog-post_17.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/6509931387047476850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/6509931387047476850'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/11/blog-post_17.html' title='Чикса на Лексусе'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-5786900637937685455</id><published>2011-11-11T20:10:00.001+02:00</published><updated>2011-11-11T20:38:14.270+02:00</updated><title type='text'>Китайская грамота</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;С&lt;/span&gt;&lt;/b&gt;егодня нашёл способ заставить шаблонную функцию определять размер массива.&lt;br /&gt;&lt;br /&gt;Всё началось с того, что при программировании я использовал несколько вспомагательных шаблонных функций, вроде memzero(), которая является обёрткой над memset() и принимает один параметр вместо трёх:&lt;br /&gt;&lt;blockquote&gt;template &amp;lt; typename T &amp;gt;&lt;br /&gt;inline void *memzero(T *p)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; return memset(p, 0, sizeof(T));&lt;br /&gt;}&lt;/blockquote&gt;Также я завёл один вспомогательный макрос для очистки статических С-arrays:&lt;br /&gt;&lt;blockquote&gt;#define zeroarray(a) memset(a, 0, sizeof(a));&lt;/blockquote&gt;Мне хотелось оформить этот макрос тоже в виде функции, но вся загвоздка в том, что определив параметр как указатель на тип, применить к нему sizeof() нельзя.Первая попытка оформить функцию в виде шаблона выглядила так:&lt;br /&gt;&lt;blockquote&gt;template &amp;lt; typename T, size_t N &amp;gt;&lt;br /&gt;inline void zeroarray(T a[N])&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; return memset(a, 0, sizeof(a));&lt;br /&gt;}&lt;/blockquote&gt;Но в данном случае компилятор С++ не может вывести размер массива, и sizeof() выдаёт типичные 4 байта для 32-битной конфигурации.Тепение моё лопнуло и я полез в гугл: после 5 минут гугления выяснилось, что существует такое решение этой проблемы:&lt;blockquote&gt;template &amp;lt; typename T, size_t N &amp;gt;&lt;br /&gt;inline void zeroarray(T(&amp;a)[N])&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; return memset(a, 0, sizeof(T) * N);&lt;br /&gt;}&lt;/blockquote&gt;Я не эксперт в С++, и мне сложно понять, что это за китайская грамота написана в виде параметра функции.Понимаю только одно - выглядит фигово :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-5786900637937685455?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/5786900637937685455/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/11/blog-post_11.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5786900637937685455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5786900637937685455'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/11/blog-post_11.html' title='Китайская грамота'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7148454399932618650</id><published>2011-11-09T11:07:00.002+02:00</published><updated>2011-11-09T11:08:44.567+02:00</updated><title type='text'>Новое пальто</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;С&lt;/span&gt;&lt;/b&gt;шил себе сабж:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-1zUAjGiAYtw/TrpCUkrGV8I/AAAAAAAAAmM/rZCKH1WaUHg/s1600/IMG_0432.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-1zUAjGiAYtw/TrpCUkrGV8I/AAAAAAAAAmM/rZCKH1WaUHg/s320/IMG_0432.JPG" width="231" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-7148454399932618650?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7148454399932618650/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/11/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7148454399932618650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7148454399932618650'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/11/blog-post.html' title='Новое пальто'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-1zUAjGiAYtw/TrpCUkrGV8I/AAAAAAAAAmM/rZCKH1WaUHg/s72-c/IMG_0432.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-1722245613412437378</id><published>2011-11-02T11:27:00.000+02:00</published><updated>2011-11-04T11:15:48.731+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='multithreading'/><category scheme='http://www.blogger.com/atom/ns#' term='d3d 11'/><title type='text'>Driver Concurrent Creates</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;С&lt;/span&gt;&lt;/b&gt;тремление ускорить загрузку программы естественно.&lt;br /&gt;Чем быстрее программа загружается, тем меньше это раздражает пользователя. Применительно к игрострою можно даже помечтать об играх, которые загружаются почти мгновенно :)&lt;br /&gt;&lt;br /&gt;С этими мыслями я наблюдаю код некоторых D3D9-движков, содержащих типичную функцию LoadShaders(), которая загружает массив сгенерированных шейдеров (в один поток, разумеется). Время выполнения такой функции может длиться от нескольких секунд и дольше.&lt;br /&gt;&lt;br /&gt;В отличие от своих предшественников, Direct3D 11 был спроектирован для поддержки мультипоточности. Вкратце, её поддержка заключается в двух возможностях:&lt;br /&gt;&lt;br /&gt;1) Driver Concurrent Creates&lt;br /&gt;2) Driver Command Lists&lt;br /&gt;&lt;br /&gt;Первая функциональность позволяет создавать объекты (текстуры, буферы, шейдеры) в разных потоках, а вторая - формировать command buffer в отдельном потоке с дальнейшем "вливанием" его в общий контекст рендеринга. Обе эти функциональности опциональны и зависят от видеодрайвера. Если драйвер их не поддерживает, рантайм будет их эмулировать, но без надежды получить выигрыш в производительности.&lt;br /&gt;&lt;br /&gt;В DirectX Caps Viewer в разделе "&lt;b&gt;DXGI 1.1 Devices \ Reference \ Direct3D 11&lt;/b&gt;" каждый может посмотреть, поддерживает ли текущий драйвер эти "фичи" (&lt;i&gt;как оказалось, утилита может привирать&lt;/i&gt;). Сразу скажу, что Driver Command Lists на момент написания этого поста не реализованы ни у AMD, ни у NVidia. О причинах можно только догадываться. Поддержка Driver Concurrent Creates может варьироваться от системы к системе, но обычно она присутствует.&lt;br /&gt;&lt;br /&gt;Создание шейдеров на основе скомпилированного байткода вычислительно ресурсоёмкая задача: рантайм должен распарсить и валидировать байткод, а драйвер - соптимизировать его под конкретную архитектуру и транслировать в машинный код GPU. Использование нескольких ядер CPU в целях ускорения этой задачи оправданно, и если драйвер Direct3D 11 поддерживает эту функциональность, её можно задействовать.&lt;br /&gt;&lt;br /&gt;Я решил поиграться с мультипоточной загрузкой шейдеров и написал небольшое тестовое приложение. Исходный код расположен &lt;a href="http://joescg.googlecode.com/files/d3d11-csc.zip"&gt;здесь&lt;/a&gt; (проект для Visual Studio 2008). Суть его проста: сравнить время загрузки одного и того же количества шейдеров используя один и несколько потоков. Для начала я скрестил Win32 и консольное приложения: нет окна и обработчика оконных сообщений, зато есть консоль с HWND. Для инициализации Direct3D достаточно просто создать устройство, во всём остальном нет надобности. Далее я взял несколько простых шейдеров из состава DirectX SDK, байткод которых заставил грузиться в цикле энное количество раз. Для простоты количество создаваемых потоков равно количеству физических ядер CPU, т. е. по одному на ядро. В конце время выполнения обоих тестов сравнивается и подсчитывается фактор ускорения (он может плавать, что естественно).&lt;br /&gt;&lt;br /&gt;С установленными видеокартами (и драйверами) AMD для Core 2 Quad я получил ускорение приблизительно 1.8X, для Core i5 - 2X-2.5X. Что интересно, для NVidia ускорение составляет ~3X, при этом скорость создания шейдеров значительно медленнее, чем в случае с AMD. Не четырёхкратное ускорение, конечно же, но и эти показатели неплохи. Интересно было бы запустить тест на новых 8-ядерных FX-81xx от AMD. Если кому-то выпадет такая возможность - пишите. Также неплохо попробовать использовать в тесте более разнообразные и тяжёлые пиксельные и вычислительные шейдеры.&lt;br /&gt;&lt;br /&gt;P.S. Не пытайтесь запускать программу из-под отладчика - в этом случае она ведёт себя некорректно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-1722245613412437378?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/1722245613412437378/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/11/driver-concurrent-creates.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1722245613412437378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1722245613412437378'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/11/driver-concurrent-creates.html' title='Driver Concurrent Creates'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7712534875634579411</id><published>2011-10-25T17:44:00.003+03:00</published><updated>2011-10-25T17:47:28.304+03:00</updated><title type='text'>Hitler gets angry about iPhone 4S</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Г&lt;/span&gt;&lt;/b&gt;итлер в очередной раз негодуэ&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/Lxn6Ag0mmhs" width="420"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-7712534875634579411?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7712534875634579411/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/10/hitler-gets-angry-about-iphone-4s.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7712534875634579411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7712534875634579411'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/10/hitler-gets-angry-about-iphone-4s.html' title='Hitler gets angry about iPhone 4S'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/Lxn6Ag0mmhs/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-185411450655792859</id><published>2011-10-22T19:16:00.002+03:00</published><updated>2011-10-22T19:16:59.500+03:00</updated><title type='text'>Code Quality</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-QF_utYqAsYc/TqLsdW17DKI/AAAAAAAAAmA/1VEd8lPv1t0/s1600/wtfm.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="302" src="http://1.bp.blogspot.com/-QF_utYqAsYc/TqLsdW17DKI/AAAAAAAAAmA/1VEd8lPv1t0/s320/wtfm.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-185411450655792859?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/185411450655792859/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/10/code-quality.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/185411450655792859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/185411450655792859'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/10/code-quality.html' title='Code Quality'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-QF_utYqAsYc/TqLsdW17DKI/AAAAAAAAAmA/1VEd8lPv1t0/s72-c/wtfm.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-6371044556077100583</id><published>2011-10-12T11:44:00.001+03:00</published><updated>2011-10-12T11:46:02.941+03:00</updated><title type='text'>RAGE</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;О&lt;/b&gt;&lt;/span&gt;босрались Вы, товарищ Кармаг, со своим RAGE.&lt;br /&gt;&lt;br /&gt;С таким дурацким релизом на PC, когда на половине Radeon-ов игра представляет из себя не пойми какой калейдоскоп или вообще падает, это ещё одно убедительное доказательство, что OpenGL (как стандарт) и его реализация (в драйверах) - унылое говно, и его место возле параши&amp;nbsp;(т. е. на мобильниках).&lt;br /&gt;&lt;br /&gt;Конечно, AMD с NVidia наваяют очередные говнопатчи под Вашу конкретную игру, но лучше бы они сделали это заранее, чтобы остальные хомячки не видели этот ебаный стыд. Незнание - это блаженство.&lt;br /&gt;&lt;br /&gt;Нет, серьёзно. Пошлите нах..й OpenGL (и OpenCL заодно туда же).&lt;br /&gt;Желаю вам, товарищ Кармаг, разума и осознания.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-6371044556077100583?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/6371044556077100583/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/10/rage.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/6371044556077100583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/6371044556077100583'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/10/rage.html' title='RAGE'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-2086606328671621035</id><published>2011-10-05T19:19:00.000+03:00</published><updated>2011-10-05T19:19:18.420+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='d3d 11.1'/><title type='text'>Direct3D 11.1</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/hh404562(v=VS.85).aspx"&gt;Direct3D 11.1 Features&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;И да, Microsoft сменила движок и дизайн MSDN. Выглядит здорово!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-2086606328671621035?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/2086606328671621035/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/10/direct3d-111.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2086606328671621035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2086606328671621035'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/10/direct3d-111.html' title='Direct3D 11.1'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-4229621927071969787</id><published>2011-09-26T12:13:00.000+03:00</published><updated>2011-09-26T12:13:40.906+03:00</updated><title type='text'>Быстрее света?</title><content type='html'>&lt;a href="http://static.arxiv.org/pdf/1109.4897.pdf"&gt;Measurement of the neutrino velocity with the OPERA detector &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-4229621927071969787?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/4229621927071969787/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/09/blog-post_26.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4229621927071969787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4229621927071969787'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/09/blog-post_26.html' title='Быстрее света?'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-8047733508686200104</id><published>2011-09-24T16:51:00.001+03:00</published><updated>2011-09-26T11:15:37.172+03:00</updated><title type='text'>Поворот не туда</title><content type='html'>&lt;iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/hYtKnVhJ1eM" width="420"&gt;&lt;/iframe&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/1284103224036292113-8047733508686200104?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/8047733508686200104/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/09/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/8047733508686200104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/8047733508686200104'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/09/blog-post.html' title='Поворот не туда'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/hYtKnVhJ1eM/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7565283767620108757</id><published>2011-08-18T21:30:00.002+03:00</published><updated>2011-08-18T21:31:18.787+03:00</updated><title type='text'>Радиус</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;С&lt;/span&gt;&lt;/b&gt;егодня я валялся на пляже в Ялте и смотрел на линию горизонта, где море соединялось с небом.&amp;nbsp;Вдруг подумалось: вот если бы я был сейчас в средних веках (как Колумб), то ведь можно же было бы определить расстояние до линии горизонта - ну например, с помощью мачты на корабле или просто лодки... Так вот, узнав расстояние до горизонта при заданной высоте наблюдения, как тогда вычислить радиус Земли? Ведь эти три величины геометрически связаны самым непосредственным образом, а значит, существует формула, из которой выводится радиус. Но как её записать, я так и не придумал.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-7565283767620108757?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7565283767620108757/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/08/blog-post_18.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7565283767620108757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7565283767620108757'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/08/blog-post_18.html' title='Радиус'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-1383658608094737794</id><published>2011-08-08T23:24:00.001+03:00</published><updated>2011-08-08T23:25:03.800+03:00</updated><title type='text'>OpenGL 4.2</title><content type='html'>&lt;span style="font-size: large;"&gt;&lt;b&gt;Я&lt;/b&gt;&lt;/span&gt; думал, он уже умер. Наверное, кому-то он всё-таки нужен :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-1383658608094737794?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/1383658608094737794/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/08/opengl-42.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1383658608094737794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1383658608094737794'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/08/opengl-42.html' title='OpenGL 4.2'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-4870263437626065652</id><published>2011-08-03T15:46:00.000+03:00</published><updated>2011-08-03T15:46:30.213+03:00</updated><title type='text'>Дождь</title><content type='html'>&lt;strong&gt;&lt;span style="font-size: large;"&gt;Я&lt;/span&gt;&lt;/strong&gt; вчера в Киеве попал под настоящий ливень - промок до нитки. Кажется, никогда в жизни я так ещё не промокал.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-4870263437626065652?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/4870263437626065652/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/08/blog-post_03.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4870263437626065652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4870263437626065652'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/08/blog-post_03.html' title='Дождь'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-4646387664476208384</id><published>2011-08-01T14:07:00.002+03:00</published><updated>2011-08-01T14:07:42.781+03:00</updated><title type='text'>Я вернулся в Быдлостан</title><content type='html'>:(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-4646387664476208384?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/4646387664476208384/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/08/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4646387664476208384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4646387664476208384'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/08/blog-post.html' title='Я вернулся в Быдлостан'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-6932630971992440620</id><published>2011-07-29T22:12:00.003+03:00</published><updated>2011-07-29T22:14:53.703+03:00</updated><title type='text'>Спалились</title><content type='html'>&lt;strong&gt;&lt;span style="font-size: large;"&gt;I&lt;/span&gt;&lt;/strong&gt;ntel спалились - процессор Haswell (наследник Ivy Bridge) получит поддержку DirectX 11.1. Это значит, что Microsoft готовит minor update интерфейса для ОС Windows 8:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.guru3d.com/news/intel-2013-haswell-processor-to-finally-get-directx-111/"&gt;Intel 2013 Haswell Processor to finally get DirectX 11.1&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;И ещё другие любопытные слухи. Говорят, следующие поколения игровых консолей Xbox/Playstation обзаведутся графикой AMD, как раз наверное тогда и DX 11.1 подоспеет. Несложно понять, почему - при равных с NVidia&amp;nbsp;вычислительных возможностях GPU AMD имеют меньшее тепловыделение, что критично для компактных устройств. Я уже начинаю подумывать, а не зря ли&amp;nbsp;NVidia затеяла CUDA на consumer level железе?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-6932630971992440620?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/6932630971992440620/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/07/blog-post_29.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/6932630971992440620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/6932630971992440620'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/07/blog-post_29.html' title='Спалились'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-6790150361236807490</id><published>2011-07-26T17:16:00.000+03:00</published><updated>2011-07-26T17:16:01.453+03:00</updated><title type='text'>Shaq Retires</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Л&lt;/span&gt;&lt;/b&gt;егендарный центровой NBA Шакил О'Нил (Shaquille O'Neal), игравший за такие команды, как LA Lakers и Miami Heat, сообщил о завершении профессиональной карьеры, длившейся 19 лет.&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="257" src="http://www.youtube.com/embed/48Oa7DOkASA?rel=0" width="400"&gt;&lt;/iframe&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/1284103224036292113-6790150361236807490?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/6790150361236807490/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/07/shaq-retires.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/6790150361236807490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/6790150361236807490'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/07/shaq-retires.html' title='Shaq Retires'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/48Oa7DOkASA/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7341388468017267997</id><published>2011-07-22T01:40:00.002+03:00</published><updated>2011-07-22T15:30:13.197+03:00</updated><title type='text'>Multisample soft shadows</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;В&lt;/b&gt;&lt;/span&gt; последнее время я размышлял, каким путём следует развивать далее реализацию мягких теней. Ясно, что аппроксимация протяжённого источника света (и. с.) от одной точки неприемлема. Можно ограничиться и. с. небольшой площади: в этом случае ошибки, вызванные аппроксимацией, незначительны. Однако это одно из главных преимуществ алгоритма, и отказываться от него не хочется. Чтобы получить болеё четкое представление об ошибках рендеринга, я дополнил реализацию возможностью работы с несколькими семплами на и. с.: силуэт, теневой объём и пенумбра считаются для каждого семпла. Вот примеры изображений:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-7aeppP5WZnI/Tiigq29z8eI/AAAAAAAAAiw/JRqlCLuoQTE/s1600/single01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://4.bp.blogspot.com/-7aeppP5WZnI/Tiigq29z8eI/AAAAAAAAAiw/JRqlCLuoQTE/s320/single01.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;1x&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-rT6ldk6W4dA/TiigoMnMxBI/AAAAAAAAAis/uvqsFJIbyCY/s1600/multi01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-rT6ldk6W4dA/TiigoMnMxBI/AAAAAAAAAis/uvqsFJIbyCY/s320/multi01.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;4x&lt;/div&gt;&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;a href="http://2.bp.blogspot.com/-vQfa9u-SDVk/Tiih3C9BL_I/AAAAAAAAAi0/Y4Ab6DVNHcQ/s1600/single02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-vQfa9u-SDVk/Tiih3C9BL_I/AAAAAAAAAi0/Y4Ab6DVNHcQ/s320/single02.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;1x&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-xC2Gkac0Kws/Tiih4IgX2eI/AAAAAAAAAi4/0aR7TgkP93M/s1600/multi02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://4.bp.blogspot.com/-xC2Gkac0Kws/Tiih4IgX2eI/AAAAAAAAAi4/0aR7TgkP93M/s320/multi02.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;4x&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-X0x0Pj8URMw/TiinVGhqq0I/AAAAAAAAAi8/_pZgpTXnRVs/s1600/penumbra_debug.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://1.bp.blogspot.com/-X0x0Pj8URMw/TiinVGhqq0I/AAAAAAAAAi8/_pZgpTXnRVs/s320/penumbra_debug.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Области пенумбры (отладочный рендер)&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Хорошо видно, что если аппроксимировать протяжённый источник одним семплом, пенумбра получается неправильная. Несколько семплов вместо одного усложняют и замедляют алгоритм, но становится заметно, например, как разделяются область умбры и пенумбры: тень становится более корректной и правдоподобной. Четыре семпла приводят к бандингу (ну а что вы хотели), тем не менее ясно, что в этом направлении нужно работать дальше.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Авторы оригинальных penumbra wedges не ставили себе задачей вменяемо решить проблему аппроксимации. Если уж и решать её, то точно не увеличением кол-ва семплов (слишком дорого и неуклюже), нужно менять подход. Например, алгоритм изначально опирается на построение теневого объёма из центра и. с., с последующей компенсации пенумбры по краям чёткой тени. Я думаю, что правильным будет пойти таким путём: считаем coverage в пенумбре без знака (он зависит от того, находимся мы в тени или вне её), а вместо стандартной чёткой тени для центра и. с. определяем область умбры и закрашиваем её чёрным - вклад в освещённость там полностью отсутствует. Получается две логичные части: умбра, где нет освещённости, и пенумбра, где пиксельный шейдер аналитически её высчитывает. Непонятно, как рассчитать умбру для протяжённого источника: приближения тут опасны, если произойдёт "нестыковка" между умброй и пенумброй, в изображении появятся артефакты. В принципе, если &amp;nbsp; мы рассчитываем области пенумбры, то определённо можно выделить и область умбры, но сказать это, увы, проще, чем написать стабильную реализацию.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Я планирую пока вернуться к шлифовке и оптимизации пиксельных шейдеров, например, хочется наконец-то попробовать четырёхмерные таблицы с предрассчитанной освещённостью, вместо того, чтобы считать её в шейдере аналитически - это поможет уменьшить его длину и теоретически ускорить шейдинг. А также отрефакторить код рендера, отшлифовать детали и т. д. Но уже ясно, что геометрическую часть алгоритма нужно менять, как именно - покажет время.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-7341388468017267997?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7341388468017267997/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/07/multi-point-soft-shadows.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7341388468017267997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7341388468017267997'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/07/multi-point-soft-shadows.html' title='Multisample soft shadows'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-7aeppP5WZnI/Tiigq29z8eI/AAAAAAAAAiw/JRqlCLuoQTE/s72-c/single01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-8247044582185177944</id><published>2011-07-14T02:06:00.004+03:00</published><updated>2011-07-14T02:06:40.102+03:00</updated><title type='text'>Transformers 3</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Т&lt;/span&gt;&lt;/b&gt;ехнически совершенный и бездушный.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-8247044582185177944?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/8247044582185177944/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/07/transformers-3.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/8247044582185177944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/8247044582185177944'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/07/transformers-3.html' title='Transformers 3'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-2828739271610300165</id><published>2011-07-09T23:41:00.002+03:00</published><updated>2011-07-09T23:41:21.252+03:00</updated><title type='text'>Не пишется</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-2828739271610300165?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/2828739271610300165/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/07/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2828739271610300165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2828739271610300165'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/07/blog-post.html' title='Не пишется'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7033989253241429689</id><published>2011-07-04T00:57:00.001+03:00</published><updated>2011-07-04T00:59:46.796+03:00</updated><title type='text'>GL_EXTENSIONS</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;П&lt;/span&gt;&lt;/b&gt;опытался сегодня поиграть в Quake II (не смейтесь - игра всех времён) на своём ноуте и не смог - игра падала. Режим совместимости никаких результатов не дал.&lt;br /&gt;&lt;br /&gt;Разыскал на диске q2source-3.21, собрал отладочный билд, переназначил пути - запускаю. Падает. Начал разбираться - дошёл до инициализации ref_gl и увидел, что движок спотыкается о стандартную ошибку - buffer overflow при попытке вывести строчку GL_EXTENSIONS. Дело в том, что константа MAXPRINTMSG (функция VID_Printf) равна 4096, чего недостаточно для такой строки в наше время - слишком уж она разрослась за все эти годы. Если константу увеличить вдвое - проблема уходит. С - небезопасный язык :)&lt;br /&gt;&lt;br /&gt;Эта проблема была решена в OpenGL 3.x, где вы получаете не весь список расширений сразу в одной строке, а имя каждого отдельного расширения по индексу. Надо было сделать так изначально при дизайне API, но никто ведь тогда не думал, что механизм расширений превратится в такой дурдом, а?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-7033989253241429689?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7033989253241429689/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/07/glextensions.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7033989253241429689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7033989253241429689'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/07/glextensions.html' title='GL_EXTENSIONS'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-8199704786340797751</id><published>2011-06-29T01:29:00.008+03:00</published><updated>2011-07-09T22:00:15.422+03:00</updated><title type='text'>Samsung SA750</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;К&lt;/span&gt;&lt;/b&gt;орейская компания Samsung запускает LED-мониторы нового поколения, с поддержкой 3D (т. е. стерео посредством 120 Гц). Я, например, хочу такой:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-nlYna32T6Dk/TgpVX1E5UaI/AAAAAAAAAiA/RG5xATbYyfM/s1600/IMG_6667_540x360.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/-nlYna32T6Dk/TgpVX1E5UaI/AAAAAAAAAiA/RG5xATbYyfM/s320/IMG_6667_540x360.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Одно важное изменение, которое не сразу бросается глаза - начиная с этого поколения, Samsung решили наконец-то избавиться от старого порта DVI в пользу HDMI 1.4 и DisplayPort, разорвав таким образом порочный круг. Правда прямо сейчас в этом есть и свой минус - надо апгрейдиться до видео с поддержкой DisplayPort (AMD), или искать переходник DVI-&amp;gt;DP (NVidia).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-IgaX_8nxxxo/ThCLFxg61ZI/AAAAAAAAAiY/1dTNBcO6JAo/s1600/lcd-samsung-5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="226" src="http://1.bp.blogspot.com/-IgaX_8nxxxo/ThCLFxg61ZI/AAAAAAAAAiY/1dTNBcO6JAo/s320/lcd-samsung-5.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;:)&lt;br /&gt;&lt;br /&gt;Update&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;У&lt;/span&gt;&lt;/b&gt;же появились на российских складах:&lt;br /&gt;&lt;a href="http://itrate.ru/cgi-bin/show.pl?option=full_retail_news&amp;amp;id=8269"&gt;http://itrate.ru/cgi-bin/show.pl?option=full_retail_news&amp;amp;id=8269&lt;/a&gt;&lt;br /&gt;Обзор соседней линейки на xbitlabs:&lt;br /&gt;&lt;a href="http://www.xbitlabs.com/articles/monitors/display/samsung-sa950.html"&gt;Samsung SyncMaster SA950 Monitor: 3D Beauty&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-8199704786340797751?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/8199704786340797751/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/06/samsung-sa750.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/8199704786340797751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/8199704786340797751'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/06/samsung-sa750.html' title='Samsung SA750'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-nlYna32T6Dk/TgpVX1E5UaI/AAAAAAAAAiA/RG5xATbYyfM/s72-c/IMG_6667_540x360.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-4832437835600541861</id><published>2011-06-15T01:36:00.003+03:00</published><updated>2011-06-15T01:37:40.116+03:00</updated><title type='text'>HK2207 Demo</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Н&lt;/span&gt;&lt;/b&gt;у вот, приехали!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-4832437835600541861?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/4832437835600541861/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/06/hk2207-demo.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4832437835600541861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4832437835600541861'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/06/hk2207-demo.html' title='HK2207 Demo'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-852967550483783043</id><published>2011-06-13T14:00:00.004+03:00</published><updated>2011-06-14T01:34:18.544+03:00</updated><title type='text'>Я в Бухаресте</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;Н&lt;/b&gt;&lt;/span&gt;ачальство предложило приехать в Ubisoft Bucharest для решения местных проблем.&amp;nbsp;Беготня с паспортом и визой, полтора часа полёта - и вот я здесь.&amp;nbsp;Пробыть предполагается два месяца.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-5vi8wn7b_Sc/TfXtUyMc5MI/AAAAAAAAAhc/oxrDY85Hm2w/s1600/IMG_0117.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-5vi8wn7b_Sc/TfXtUyMc5MI/AAAAAAAAAhc/oxrDY85Hm2w/s320/IMG_0117.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;P.S. Здесь нет русской клавиатуры, клацаю по нужным клавишам с помощью моторной памяти :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-852967550483783043?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/852967550483783043/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/06/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/852967550483783043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/852967550483783043'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/06/blog-post.html' title='Я в Бухаресте'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-5vi8wn7b_Sc/TfXtUyMc5MI/AAAAAAAAAhc/oxrDY85Hm2w/s72-c/IMG_0117.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-3006170857610898808</id><published>2011-06-03T11:24:00.000+03:00</published><updated>2011-06-03T11:24:30.954+03:00</updated><title type='text'>Rectangular light source</title><content type='html'>&lt;span style="font-size: large;"&gt;&lt;strong&gt;Н&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;а&lt;/span&gt; днях сидел по вечерам за отладкой шейдера пенумбры для прямоугольного источника света. Все мои предыдущие реализации мягких теней использовали только сферический источник света, с прямоугольным как-то не ладилось. В конце-концов я написал алгоритм шейдера на C++ и отладил несколько тестовых случаев. Оказалось, что корректное решение требует инвертирования матрицы 3x3 прямо в пиксельном шейдере, чего в оригинальной реализации алгоритма я не увидел. Программная реализация помогла обсосать все тонкости алгоритма (что с HLSL и GPU-ориентированными инструментами, я считаю, сделать невозможно или крайне затруднительно).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-vmQ6t3pjXlg/TeiTALqCVmI/AAAAAAAAAg0/ZvIkkzZfl48/s1600/05_small.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://4.bp.blogspot.com/-vmQ6t3pjXlg/TeiTALqCVmI/AAAAAAAAAg0/ZvIkkzZfl48/s320/05_small.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-JXLipqKkCQc/TeiTCpxBNUI/AAAAAAAAAg4/9xirhiph6-c/s1600/06_small.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://1.bp.blogspot.com/-JXLipqKkCQc/TeiTCpxBNUI/AAAAAAAAAg4/9xirhiph6-c/s320/06_small.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-jCONHlSeGgo/TeiTEq0dfWI/AAAAAAAAAg8/FIuuU7SZ_ag/s1600/07_small.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-jCONHlSeGgo/TeiTEq0dfWI/AAAAAAAAAg8/FIuuU7SZ_ag/s320/07_small.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Из-за лоу-поли геометрии и прямоугольности источника света пенумбра выглядит угловатой. Но главная проблема носит название single point silhouette approximation, о ней я уже писал &lt;a href="http://joescg.blogspot.com/2010/07/single-point-silhouette-approximation.html"&gt;здесь&lt;/a&gt;. Из-за этого упрощения тени выглядят как overshadowed, потому что не все потенциальные силуэтные рёбра внесли свой вклад в пенубмру. То, как выглядят тени сейчас, меня не устраивает, поэтому так или иначе придётся реализовывать корректный поиск силуэта.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-3006170857610898808?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/3006170857610898808/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/06/rectangular-light-source.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/3006170857610898808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/3006170857610898808'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/06/rectangular-light-source.html' title='Rectangular light source'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-vmQ6t3pjXlg/TeiTALqCVmI/AAAAAAAAAg0/ZvIkkzZfl48/s72-c/05_small.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-4734837929186009514</id><published>2011-05-31T20:34:00.000+03:00</published><updated>2011-05-31T20:34:24.140+03:00</updated><title type='text'>We want C++ developers</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-fJjKPSQxgwc/TeUmir3vEiI/AAAAAAAAAgw/gwKFwUiii0I/s1600/cxx_devs.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-fJjKPSQxgwc/TeUmir3vEiI/AAAAAAAAAgw/gwKFwUiii0I/s320/cxx_devs.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-4734837929186009514?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/4734837929186009514/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/05/we-want-c-developers.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4734837929186009514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4734837929186009514'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/05/we-want-c-developers.html' title='We want C++ developers'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-fJjKPSQxgwc/TeUmir3vEiI/AAAAAAAAAgw/gwKFwUiii0I/s72-c/cxx_devs.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-3753893976226364644</id><published>2011-05-31T11:36:00.003+03:00</published><updated>2011-05-31T11:38:26.128+03:00</updated><title type='text'>Маурицио</title><content type='html'>&lt;strong&gt;&lt;span style="font-size: large;"&gt;Н&lt;/span&gt;&lt;/strong&gt;икто не знал, где он ночует и что он ест. О нем говорили, будто он колдун, потому что он умел играть на всех инструментах и играл блестяще, а жил всегда бесприютным, нищим бродягой. Вот этот Маурицио послушал, как звучит виола  да гамба моего деда, и предложил ему обмен: дед  отдаст ему инструмент, а Маурицио откроет ему тайну  жизни. Дед согласился - каждый человек в семнадцать лет хочет заранее  узнать тайну  бытия. И тогда Маурицио сказал деду, что тот должен сделать еще триста девяносто девять инструментов - на четырехсотой скрипке его ждет бессмертие.&lt;br /&gt;&lt;br /&gt;С тех пор в деда Андреа будто вселился демон. Он работал как галерник, дни и ночи, случалось, что по трое суток он не выходил из мастерской, руки его были изъедены кислотами и растворителями, в мозолях, порезах и ссадинах, с трех пальцев были сорваны ногти, и больше они не выросли.&lt;br /&gt;&lt;br /&gt;Он сделал около пятисот  инструментов, и когда  перед  смертью от  него ушел исповедник, я спросил деда, а было мне тогда девять лет:&lt;br /&gt;&lt;br /&gt;- Этот противный сумасшедший колдун Маурицио обманул вас, синьор?&lt;br /&gt;&lt;br /&gt;Дед был совсем старый, просто усохший от времени, весь&lt;br /&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/1284103224036292113-3753893976226364644?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/3753893976226364644/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/05/blog-post_31.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/3753893976226364644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/3753893976226364644'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/05/blog-post_31.html' title='Маурицио'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-5512313367830263246</id><published>2011-05-27T14:03:00.005+03:00</published><updated>2011-05-27T15:18:45.797+03:00</updated><title type='text'>День рождения</title><content type='html'>&lt;strong&gt;&lt;span style="font-size: large;"&gt;У&lt;/span&gt;&lt;/strong&gt; блога сегодня день рождения - ему исполнилось два года :)&lt;br /&gt;По этому поводу я приготовил (сидел допоздна) несколько скриншотов:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-IBum28IxCmo/Td-VtLxoQ7I/AAAAAAAAAgI/u3vzsdX5AH0/s1600/01_small.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-IBum28IxCmo/Td-VtLxoQ7I/AAAAAAAAAgI/u3vzsdX5AH0/s320/01_small.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-J7lvFvrNkIQ/Td-VwYl2jjI/AAAAAAAAAgQ/iAD6A-ejvXQ/s1600/02_small.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://1.bp.blogspot.com/-J7lvFvrNkIQ/Td-VwYl2jjI/AAAAAAAAAgQ/iAD6A-ejvXQ/s320/02_small.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ZBozvmZTz70/Td-V0NFBoFI/AAAAAAAAAgY/HjpzHBZqE_o/s1600/03_small.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-ZBozvmZTz70/Td-V0NFBoFI/AAAAAAAAAgY/HjpzHBZqE_o/s320/03_small.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-9wj9hG1cL0g/Td-V3Pjy3DI/AAAAAAAAAgg/44S5klz9uq4/s1600/04_small.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://4.bp.blogspot.com/-9wj9hG1cL0g/Td-V3Pjy3DI/AAAAAAAAAgg/44S5klz9uq4/s320/04_small.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Код не отполирован, множество визуальных артефактов, ещё есть множество вещей, которые я хочу реализовать и отладить. Но впервые за всё время мягкие тени делаются с поддержкой Direct3D 11.&lt;br /&gt;&lt;br /&gt;И ещё одно. Начиная с этого дня я решил завести англоязычную версию блога, в котором я буду публиковать переводы своих ключевых постов (и совершенствовать свой английский): &lt;a href="http://joescg-en.blogspot.com/"&gt;joescg-en.blogspot.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-5512313367830263246?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/5512313367830263246/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/05/blog-post_27.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5512313367830263246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5512313367830263246'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/05/blog-post_27.html' title='День рождения'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-IBum28IxCmo/Td-VtLxoQ7I/AAAAAAAAAgI/u3vzsdX5AH0/s72-c/01_small.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-2119781591965732651</id><published>2011-05-24T17:09:00.000+03:00</published><updated>2011-05-24T17:09:00.439+03:00</updated><title type='text'>Лебедев</title><content type='html'>Герой в тельняшке! Ура, блять...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-2119781591965732651?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/2119781591965732651/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/05/blog-post_24.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2119781591965732651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2119781591965732651'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/05/blog-post_24.html' title='Лебедев'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-190116767679752889</id><published>2011-05-21T17:22:00.001+03:00</published><updated>2011-05-21T17:23:10.303+03:00</updated><title type='text'>3DMark 11</title><content type='html'>&lt;span style="font-size: large;"&gt;&lt;strong&gt;П&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;рочитал я &lt;/span&gt;&lt;a href="http://www.ixbt.com/video3/3dmark11.shtml"&gt;обзор и анализ&lt;/a&gt; уже давно вышедшего 3DMark 11, закручинился. &lt;br /&gt;&lt;br /&gt;Печально всё обстоит в нашем королевстве, при том что GPU сильны и умны, как никогда прежде. Похоже, CG отныне будет развиваться только скачками, от старого поколения консолей к новым, с периодом этак лет в... 10.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-190116767679752889?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/190116767679752889/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/05/3dmark-11.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/190116767679752889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/190116767679752889'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/05/3dmark-11.html' title='3DMark 11'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-3197434321720111828</id><published>2011-05-18T16:37:00.007+03:00</published><updated>2011-05-19T11:06:42.212+03:00</updated><title type='text'>Packed Stream Output</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;Е&lt;/span&gt;&lt;/strong&gt;сть такой перекос в D3D 10/11 железе - input layout может фетчить данные из вершинного буфера в разнообразных форматах, а вот stream output может выводить только 32-битные значения (написано в са-а-амом конце раздела Getting Started with the Stream-Output Stage). Между тем, обычно float точность сильно избыточна для небольших моделей, и хотелось бы иметь возможность выводить данные типа half.&lt;br /&gt;&lt;br /&gt;SM 5.0 предоставляет две функции для конвертирования float в half и обратно: f32tof16() и f16tof32(). Для них есть dedicated silicon в D3D11-железе и подразумевается, что они first-class citizen. Также эти функции могут применяться в SM 4.0, в этом случае они эмулируются программно - в шейдер вставляются многочисленные операции битового сдвига, целочисленного сложения и т. д. Я случайно нашёл С-аналоги этих функциий в OpenGL RedBook: &lt;a href="http://www.opengl-redbook.com/appendices/AppJ.pdf"&gt;Floating-Point Formats Used in OpenGL&lt;/a&gt; (вероятнее всего, алгоритм следует стандарту IEEE 754-2008 для half precision floating-point format). В своё время я написал подобные функции конвертирования, работающие в шейдере посредством lookup table, но в свете SM 5.0 это уже устарело :)&lt;br /&gt;&lt;br /&gt;У меня появилась идея, что с помощью этих функций можно в геометрическом шейдере паковать два float-значения в один, ужимая каждый в half, и т. о. снизить нагрузку на stream output и на input assembler. Кроме того, можно уменьшить важный параметр maxvertexcount геометрического шейдера: например, если ранее GS выводил две вершины, то теперь достаточно одной. Общая идея такова: SO выводит по два half, запакованных во float, а IA интерпретирует вершинный буфер как R16G16B16A16_FLOAT, т. о. мы сможем легко читать каждую запакованную вершину.&lt;br /&gt;&lt;br /&gt;Вот код упаковки двух трёхкомпонентных векторов в один четырёхкомпонентный: &lt;a href="http://pastie.org/1921618"&gt;pck&lt;/a&gt;. Четвёртый компонент необходим вследствие того, что формат R16G16B16A16_FLOAT имеет четыре компоненты (6-байтные форматы с тремя компонентами не поддерживаются), но его можно игнорировать при чтении из вершинного буфера, а значит, и при упаковке.&lt;br /&gt;&lt;br /&gt;Всё легко пакуется до тех пор, пока вы выводите чётное кол-во вершин: 2, 4 и т. д. А если нужно вывести 3 вершины (треугольник)? Можно запаковать первые две в один vec4, третью - в компоненты .xy второго vec4, компоненты .zw - оставить пустыми. Но при последующем чтении треугольника мы прочитам три half4, а пустой четвёртый будет относиться уже к следующему примитиву - ошибка! Указать же stride между &lt;i&gt;примитивами&lt;/i&gt; в вершинном буфере невозможно - никому в голову не придёт идея оставлять в памяти ненужные "дырки".&lt;br /&gt;&lt;br /&gt;Решение простое. Если раньше мы сжимали, скажем, четыре вершины в две, то теперь надо сжать три в одну:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;struct gs_out&lt;br /&gt;{&lt;br /&gt;vec4 pos1_pos2 : Data0;&lt;br /&gt;vec2 pos3 : Data1;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;[maxvertexcount(1)]&lt;br /&gt;void gs_main(..., inout PointStream&lt; gs_out &gt; stream)&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;В IA читаем данные из вершинного буфера как поледовательность half4 - и всё.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-3197434321720111828?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/3197434321720111828/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/05/packed-stream-output.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/3197434321720111828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/3197434321720111828'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/05/packed-stream-output.html' title='Packed Stream Output'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-141519790234284985</id><published>2011-05-09T15:06:00.007+03:00</published><updated>2011-05-09T15:45:22.482+03:00</updated><title type='text'>Дом</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span style="font-size: large;"&gt;&lt;strong&gt;В&lt;/strong&gt;&lt;/span&gt;ам знакомо это ощущение - когда лучшие фильмы с торрентов уже много раз пересмотрены, и вы без особой надежды пытаетесь выловить что-нибудь новое или, что лучше, хорошо забытое старое. Вот в таком настроении я как-то случайно наткнулся на фильм "Дом из песка и тумана".&lt;br /&gt;&lt;br /&gt;Помню, как начал смотреть его без особого энтузизма, но спустя некоторое время вдруг понял, что с этим фильмом не всё так просто. Скажу сразу - досмотреть его до конца оказалось очень тяжело (иногда хотелось всё остановить), и остаток дня я сильно переживал увиденное. Неожиданно фильм оказался тяжелейшей драмой, если только в этой категории уместно выдавать первые "места". Это не бездарное артхаусное кино, под которое хорошо засыпать на ночь, но удивительное творение гениального режиссёра (нашего соотечественника, к слову).&lt;br /&gt;&lt;br /&gt;С тех пор я больше не пересматривал его - мне хватило одного раза. А вот сегодня случайно узнал, что прокат фильма в США даже не отбил его скромный бюджет. Это не удивительно, ведь под него не почавкаешь попкорном, а желание просто поржать быстро пропадает. И всё же мне стало немного грустно, что снимать такие фильмы - это рисковать своими положением и финансами, и я просто решил написать об этом фильме - пускай хотя бы ещё несколько человек узнает о нём.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-141519790234284985?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/141519790234284985/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/05/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/141519790234284985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/141519790234284985'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/05/blog-post.html' title='Дом'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-1591409653330104145</id><published>2011-05-06T16:22:00.001+03:00</published><updated>2011-05-06T18:15:05.804+03:00</updated><title type='text'>T-junction elimination</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;П&lt;/span&gt;&lt;/b&gt;ри рендеринге теней от md2 мешей появились артефакты. Как выяснилось, даже лоу-поли модели из Quake II не лишены багов (а я надеялся, что всё будет отлично). Видимо, это из-за того, что изначально они не предназначались для отбрасывания теней, хотя заметно, что при их моделировании соблюдались правила замкнутости.&lt;br /&gt;&lt;br /&gt;В общем, конвертер пришлось дорабатывать, чтобы он мог выделять кластеры несмежных треугольников, обходить T-junction, делать поиск по совпадающим координатам и т. д. В итоге мне удалось обойти в моделях мелкие ошибки и убрать из adjacency невалидные треугольники.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-xWv0XEte3hM/TcP0sVzhcyI/AAAAAAAAAd4/h7eaiDNMyEM/s1600/berserk.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-xWv0XEte3hM/TcP0sVzhcyI/AAAAAAAAAd4/h7eaiDNMyEM/s320/berserk.png" width="309" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-tqz6GGkDN8Q/TcP0sjaByxI/AAAAAAAAAeA/YBRvcB6IWMM/s1600/bitch.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-tqz6GGkDN8Q/TcP0sjaByxI/AAAAAAAAAeA/YBRvcB6IWMM/s320/bitch.png" width="309" /&gt;&lt;/a&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;a href="http://3.bp.blogspot.com/-3ZR5VlJ_S5M/TcP1K7DjQhI/AAAAAAAAAeI/IQMINx6Y1_k/s1600/brain.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-3ZR5VlJ_S5M/TcP1K7DjQhI/AAAAAAAAAeI/IQMINx6Y1_k/s320/brain.png" width="308" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;В принципе, целый ряд моделей не содержит никаких ошибок. А вот например, у bitch выпало целое плечо (как оказалось, там какая-то каша из треугольников).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-1591409653330104145?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/1591409653330104145/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/05/t-junction-elimination.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1591409653330104145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1591409653330104145'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/05/t-junction-elimination.html' title='T-junction elimination'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-xWv0XEte3hM/TcP0sVzhcyI/AAAAAAAAAd4/h7eaiDNMyEM/s72-c/berserk.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-1221267676928521373</id><published>2011-04-29T18:10:00.002+03:00</published><updated>2011-04-29T18:31:41.907+03:00</updated><title type='text'>Плакат SC:C</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;К&lt;/span&gt;&lt;/b&gt; нам в офис привезли замечательный плакат "по мотивам" нашего проекта:&lt;br /&gt;&lt;br /&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-S6uB43CFOM0/TbrUxuSmwrI/AAAAAAAAAd0/o_gNgWcnMAI/s1600/sc5_banner.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/-S6uB43CFOM0/TbrUxuSmwrI/AAAAAAAAAd0/o_gNgWcnMAI/s400/sc5_banner.jpg" width="300" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Есть ещё парочка других, но это уже не так интересно.&lt;/div&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/1284103224036292113-1221267676928521373?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/1221267676928521373/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/04/scc.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1221267676928521373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1221267676928521373'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/04/scc.html' title='Плакат SC:C'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-S6uB43CFOM0/TbrUxuSmwrI/AAAAAAAAAd0/o_gNgWcnMAI/s72-c/sc5_banner.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-3319799806336523147</id><published>2011-04-26T13:00:00.005+03:00</published><updated>2011-04-27T16:28:45.073+03:00</updated><title type='text'>Depth of Field: First Experiments</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Н&lt;/span&gt;&lt;/b&gt;ачал экспериментировать с различными реализациями depth of field. Тема эта очень сложная, поэтому для начала решил попробовать несколько brute-force методов для получения референсного изображения, отталкиваясь от которого, можно было бы подгонять real-time технику до нужного качества.&lt;br /&gt;&lt;br /&gt;Первый вариант, он же самый простой: рендеринг из различных положений на виртуальной линзе в буфер с накоплением:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-UB60I9Ioei4/TbaTeeVz7sI/AAAAAAAAAdg/EDRDZr8Xw5g/s1600/dof_accum_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="251" src="http://3.bp.blogspot.com/-UB60I9Ioei4/TbaTeeVz7sI/AAAAAAAAAdg/EDRDZr8Xw5g/s320/dof_accum_01.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-OxQsGYaqkGI/TbaTfWLZBqI/AAAAAAAAAdk/fn1FzG7NlM8/s1600/dof_accum_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="251" src="http://1.bp.blogspot.com/-OxQsGYaqkGI/TbaTfWLZBqI/AAAAAAAAAdk/fn1FzG7NlM8/s320/dof_accum_02.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Используется 48 сэмплов, для каждого кадра инстансингом рисуется 1024 кубика, расстояние до фокальной плоскости учитывается при построении look-at матрицы. 48 "выборок" явно недостаточно для сглаженного изображения,&amp;nbsp;очень виден&amp;nbsp;бандинг. Нужно как минимум 128, и хорошо посчитанный kernel. Можно получить очень хороший depth of field, качеством напоминающий ray-tracing.&lt;br /&gt;&lt;br /&gt;Второй вариант: для каждого пикселя экрана рисуется вершина, которую геометрический шейдер раздувает в спрайт нужного диаметра, который аддивно смешивается с содержимым в буфере кадра. Чудовищный способ, но по идее должен был дать хороший эффект для данной сцены. Пока не получается сохранять исходную энергию изображения, есть артефакты и т. д.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-W_qQ3UyZeso/TbaVCeuIX6I/AAAAAAAAAdo/iDvipfuxD7Q/s1600/dof_spread.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="251" src="http://4.bp.blogspot.com/-W_qQ3UyZeso/TbaVCeuIX6I/AAAAAAAAAdo/iDvipfuxD7Q/s320/dof_spread.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Немного о реализации: с помощью инстансинга рисуются всё те же 1024 кубика, в depth буфер выводится view space z. Затем рисуется w * h вершин, по одной вершине в каждом пикселе окна. Чтобы снизить нагрузку, вершинный буфер не используется, вызовы вершинного шейдера генерируются вызовом DrawInstanced(), в шейдере используется семантика SV_InstanceID для расчёта экранных координат. Вершинный шейдер сэмплирует цвет и глубину и передаёт данные в геометрический шейдер. Последний рассчитывает диаметр circle of confusion и раздувает вершину в спрайт нужного размера. Ну а дальше блендинг в PS. Техника упирается, как ни странно, не в геометрический pipeline, а в блендинг в FP-render target.&lt;br /&gt;&lt;br /&gt;Следующий шаг - разбор уравнений, по которым рассчитывается правильный CoC (как оказалось, у всех - по-разному).﻿&lt;br /&gt;&lt;br /&gt;Update&lt;br /&gt;&lt;br /&gt;Сегодня построил график изменения радиуса circle of confusion в зависимости от параметров оптической системы: диаметра линзы, фокального расстояния и фокальной плоскости. Для построения была взята формула из пейпра&amp;nbsp;&lt;a href="http://www.eecis.udel.edu/~jye/lab_research/10/pgdof.pdf"&gt;Dynamic Light Field Generation and Filtering&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-9YknZUzXSh0/TbgXEFaN-1I/AAAAAAAAAds/JWRX76mPn5k/s1600/dof_plot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-9YknZUzXSh0/TbgXEFaN-1I/AAAAAAAAAds/JWRX76mPn5k/s320/dof_plot.png" width="306" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;По характеру кривой график совпал с тем, что приведён в другом пейпре по DoF:&amp;nbsp;&lt;a href="http://wwwcg.in.tum.de/Research/data/Publications/eg07.pdf"&gt;Pyramidal Image Processing&lt;/a&gt;. Естественно, что на кривую влияют выбранные параметры и характер масштабирования по оси Y, т. к. размеры CoC меняются далеко нелинейно. Но вот например в слайдах&amp;nbsp;&lt;a href="https://graphics.stanford.edu/wikis/cs448s-10/FrontPage?action=AttachFile&amp;amp;do=get&amp;amp;target=CS448s-10-10-depthOfFieldForWeb.pdf"&gt;Advanced Real-Time Depth of Field Techniques&lt;/a&gt;&amp;nbsp;приводится другой график:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-LhXT5rX6iyA/TbgZsbuu3BI/AAAAAAAAAdw/MhzsnyVisIA/s1600/another_plot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-LhXT5rX6iyA/TbgZsbuu3BI/AAAAAAAAAdw/MhzsnyVisIA/s320/another_plot.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;и не совсем ясно, по какой формуле он считался. Будем думать :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-3319799806336523147?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/3319799806336523147/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/04/depth-of-field-first-experiments.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/3319799806336523147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/3319799806336523147'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/04/depth-of-field-first-experiments.html' title='Depth of Field: First Experiments'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-UB60I9Ioei4/TbaTeeVz7sI/AAAAAAAAAdg/EDRDZr8Xw5g/s72-c/dof_accum_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7889975170278021433</id><published>2011-04-19T13:41:00.002+03:00</published><updated>2011-04-19T15:49:00.953+03:00</updated><title type='text'>MacOS X 10.7 Preview</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;П&lt;/span&gt;&lt;/strong&gt;о слухам, Apple наконец-то добавляет поддержку OpenGL 3.2 в новой версии операционной системы:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.macrumors.com/2011/02/24/apple-releases-first-developer-preview-of-mac-os-x-lion/"&gt;Apple releases first developer preview of MacOS X Lion&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;И да, наконец-то размер окна можно изменять, хватаясь мышкой за любую его рамку!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-7889975170278021433?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7889975170278021433/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/04/macos-x-107-preview.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7889975170278021433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7889975170278021433'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/04/macos-x-107-preview.html' title='MacOS X 10.7 Preview'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7562431820295030902</id><published>2011-04-15T11:32:00.005+03:00</published><updated>2011-04-15T13:46:02.000+03:00</updated><title type='text'>Бомбы не оказалось</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Я&lt;/span&gt;&lt;/b&gt; обычно возвращаюсь домой через станцию метро "Университет". Но вчера распорядок дня выбился из привычной колеи: станцию оцепили, милиция преграждала проход. Я заснял это безобразие на камеру iPod-а:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&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;a href="http://2.bp.blogspot.com/-HBy3oNaC7a0/TagCOYW6EiI/AAAAAAAAAdc/YSgE87gJk6M/s1600/IMG_0046.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-HBy3oNaC7a0/TagCOYW6EiI/AAAAAAAAAdc/YSgE87gJk6M/s320/IMG_0046.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-BJ7sr9ISzMM/TagCONMy9sI/AAAAAAAAAdY/p-orxMEG6Sc/s1600/IMG_0045.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-BJ7sr9ISzMM/TagCONMy9sI/AAAAAAAAAdY/p-orxMEG6Sc/s320/IMG_0045.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;В новостях написали, что якобы была обнаружена бомба. Позже выяснилось, что никакой бомбы нет. Вместо неё был сломанный мобильник в помятом пакете из "Макдональдса".&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-7562431820295030902?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7562431820295030902/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/04/blog-post_15.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7562431820295030902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7562431820295030902'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/04/blog-post_15.html' title='Бомбы не оказалось'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-HBy3oNaC7a0/TagCOYW6EiI/AAAAAAAAAdc/YSgE87gJk6M/s72-c/IMG_0046.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-116891896968273189</id><published>2011-04-07T18:10:00.002+03:00</published><updated>2011-04-07T18:10:49.184+03:00</updated><title type='text'>D3D10 MRT</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span style="font-size: large;"&gt;&lt;strong&gt;O&lt;/strong&gt;&lt;/span&gt;utput-Merger Stage (Direct3D 10), почти в самом конце подраздел &lt;strong&gt;Multiple RenderTargets Overview&lt;/strong&gt;:&lt;br /&gt;&lt;br /&gt;... Furthermore, all render targets must have the same size in all dimensions  (width, height, depth, array size, sample counts). &lt;em&gt;Each render target may have a  different data format&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Как-то до сих пор ускользало от меня. И да, в Direct3D 9 depth буфер по размерам может быть больше, чем render target.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-116891896968273189?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/116891896968273189/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/04/d3d10-mrt.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/116891896968273189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/116891896968273189'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/04/d3d10-mrt.html' title='D3D10 MRT'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-4040710206428905855</id><published>2011-04-05T15:26:00.002+03:00</published><updated>2011-04-05T15:26:34.921+03:00</updated><title type='text'>Косим под оффисс</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-z4kFB__Jy1w/TZsKaDzlucI/AAAAAAAAAdM/mw-thjXZhgo/s1600/2eus8xk.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://4.bp.blogspot.com/-z4kFB__Jy1w/TZsKaDzlucI/AAAAAAAAAdM/mw-thjXZhgo/s320/2eus8xk.png" width="320" /&gt;&lt;/a&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/1284103224036292113-4040710206428905855?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/4040710206428905855/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/04/blog-post.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4040710206428905855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4040710206428905855'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/04/blog-post.html' title='Косим под оффисс'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-z4kFB__Jy1w/TZsKaDzlucI/AAAAAAAAAdM/mw-thjXZhgo/s72-c/2eus8xk.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-1448493752116634242</id><published>2011-03-28T12:37:00.005+03:00</published><updated>2011-03-28T17:11:42.347+03:00</updated><title type='text'>Splinter Cell: Conviction</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span style="font-size: large;"&gt;&lt;strong&gt;Н&lt;/strong&gt;&lt;/span&gt;а &lt;a href="http://www.macgamestore.com/"&gt;http://www.macgamestore.com/&lt;/a&gt;&amp;nbsp;появился порт Splinter Cell: Conviction (Капитан Очевидность подсказывает, что это для Mac). Игра доступна посредством цифровой дистрибуции по цене $19.99:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.macgamestore.com/product/1743/Tom-Clancys-Splinter-Cell-Conviction/"&gt;Tom Clancy's Splinter Cell: Conviction&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-UTGwWfJnWFA/TZBcYZGY4sI/AAAAAAAAAcc/fSG_zI8FGSI/s1600/Screen+shot+2011-03-28+at+12.57.56+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-UTGwWfJnWFA/TZBcYZGY4sI/AAAAAAAAAcc/fSG_zI8FGSI/s320/Screen+shot+2011-03-28+at+12.57.56+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-XXNUSmm8O0o/TZBcYkvbL-I/AAAAAAAAAcg/ctesUEtpPHA/s1600/Screen+shot+2011-03-28+at+12.58.13+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-XXNUSmm8O0o/TZBcYkvbL-I/AAAAAAAAAcg/ctesUEtpPHA/s320/Screen+shot+2011-03-28+at+12.58.13+PM.png" width="320" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-oK6GH0zTHR4/TZBZYzxnDRI/AAAAAAAAAb8/sIXYwa5J_BY/s1600/Screen+shot+2011-03-28+at+12.43.11+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-oK6GH0zTHR4/TZBZYzxnDRI/AAAAAAAAAb8/sIXYwa5J_BY/s320/Screen+shot+2011-03-28+at+12.43.11+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-FJsrj2yz6fs/TZBazM9JqxI/AAAAAAAAAcI/5xUOW4amCGk/s1600/Screen+shot+2011-03-28+at+12.50.42+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-FJsrj2yz6fs/TZBazM9JqxI/AAAAAAAAAcI/5xUOW4amCGk/s320/Screen+shot+2011-03-28+at+12.50.42+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-5_XkzpCP9aw/TZBcZLR5zGI/AAAAAAAAAck/ZneZyIMbOKc/s1600/Screen+shot+2011-03-28+at+12.59.00+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-5_XkzpCP9aw/TZBcZLR5zGI/AAAAAAAAAck/ZneZyIMbOKc/s320/Screen+shot+2011-03-28+at+12.59.00+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-iFDKEZjPQv0/TZBZaQ8QkjI/AAAAAAAAAcA/NSva1sf4q8c/s1600/Screen+shot+2011-03-28+at+12.45.21+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://1.bp.blogspot.com/-iFDKEZjPQv0/TZBZaQ8QkjI/AAAAAAAAAcA/NSva1sf4q8c/s320/Screen+shot+2011-03-28+at+12.45.21+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-p0VKrPiuvMg/TZBZbKeSBbI/AAAAAAAAAcE/SqtLnpTIOfM/s1600/Screen+shot+2011-03-28+at+12.45.30+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://1.bp.blogspot.com/-p0VKrPiuvMg/TZBZbKeSBbI/AAAAAAAAAcE/SqtLnpTIOfM/s320/Screen+shot+2011-03-28+at+12.45.30+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ELkqzgxXvpA/TZBazjqEwQI/AAAAAAAAAcM/57-aA6Vfz1g/s1600/Screen+shot+2011-03-28+at+12.51.59+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-ELkqzgxXvpA/TZBazjqEwQI/AAAAAAAAAcM/57-aA6Vfz1g/s320/Screen+shot+2011-03-28+at+12.51.59+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ZO4vFBWJbjY/TZBa0MsIJII/AAAAAAAAAcQ/8a3pHiP4zpY/s1600/Screen+shot+2011-03-28+at+12.52.22+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-ZO4vFBWJbjY/TZBa0MsIJII/AAAAAAAAAcQ/8a3pHiP4zpY/s320/Screen+shot+2011-03-28+at+12.52.22+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-7_7NYOtUmzc/TZBa1PL1eWI/AAAAAAAAAcY/SE_x_pqekXY/s1600/Screen+shot+2011-03-28+at+12.52.34+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-7_7NYOtUmzc/TZBa1PL1eWI/AAAAAAAAAcY/SE_x_pqekXY/s320/Screen+shot+2011-03-28+at+12.52.34+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;(актуальные скриншоты Mac-версии)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Это проект, над портированием графической составляющей которого я и работал в Ubisoft Kiev весь последний год. Да,&amp;nbsp;юбики решили портировать&amp;nbsp;свои крупнейшие&amp;nbsp;AAA-тайтлы на Mac, и это при том что SCC вначале вообще объявлялся как &lt;a href="http://www.vg247.com/2009/06/19/splinter-cell-conviction-on-ps3-never-says-ubi/"&gt;Microsoft-exclusive&lt;/a&gt;&amp;nbsp;проект!&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Изначально планировалось зарелизить проект 29 октября 2010, до старта рождественских продаж, но сроки мы благополучно зафейлили и начальству пришлось даты сдвигать. Мы всё же успешно довели проект до рабочего состояния, и через некоторое время он должен появиться&amp;nbsp;и в&amp;nbsp;Mac App Store (уже без DRM - требование яблочников).&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Удачного плавания, Сэм!﻿&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-S6bVBJERppY/TZCXCH2xA6I/AAAAAAAAAco/teu49XExdoQ/s1600/Screen+shot+2011-03-28+at+5.10.11+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://4.bp.blogspot.com/-S6bVBJERppY/TZCXCH2xA6I/AAAAAAAAAco/teu49XExdoQ/s320/Screen+shot+2011-03-28+at+5.10.11+PM.png" width="320" /&gt;&lt;/a&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/1284103224036292113-1448493752116634242?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/1448493752116634242/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/03/splinter-cell-conviction.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1448493752116634242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1448493752116634242'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/03/splinter-cell-conviction.html' title='Splinter Cell: Conviction'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-UTGwWfJnWFA/TZBcYZGY4sI/AAAAAAAAAcc/fSG_zI8FGSI/s72-c/Screen+shot+2011-03-28+at+12.57.56+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-2170802158597980401</id><published>2011-03-25T18:23:00.003+02:00</published><updated>2011-03-25T18:27:38.377+02:00</updated><title type='text'>MD2 normals</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;Е&lt;/span&gt;&lt;/strong&gt;сть такой файл в составе Quake II engine - anorms.h. В нём хранятся предрассчитанные нормали (скорее всего по сфере). Если говорить про формат MD2, то key-frame анимация в нём делает хранение нормалей непосредственно в вершине неэффективным. Вместо этого, в .w компоненте хранится индекс нормали из anorms-таблицы.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-8LBs8vaW53A/TYy-3H5uR4I/AAAAAAAAAb0/KymaC5je8lw/s1600/umd2_debug_normals.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="302" src="http://1.bp.blogspot.com/-8LBs8vaW53A/TYy-3H5uR4I/AAAAAAAAAb0/KymaC5je8lw/s320/umd2_debug_normals.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Для выборки нормали я залил anorms-таблицу в буфер и подключил его как shader resource. Теперь в вершинном шейдере делается выборка нормалей по индексам и их интерполяция. Для проверки корректности я написал простой геометрический шейдер, который берёт нормаль в вершине, размножает её и выводит как линию.&lt;br /&gt;&lt;br /&gt;Точность этого метода хранение нормалей,&amp;nbsp;конечно, низковата; линейная интерполяция помогает сгладить квантование.&lt;br /&gt;&lt;br /&gt;P.S. &lt;em&gt;Теперь я узнал, почему зелёный цвет (нормалей) плохо выглядит на белом фоне: человеческий глаз наиболее чувствителен в зелёному цвету и воспринимает его как более яркий, чем красный или синий.&lt;/em&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-2170802158597980401?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/2170802158597980401/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/03/md2-normals.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2170802158597980401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2170802158597980401'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/03/md2-normals.html' title='MD2 normals'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-8LBs8vaW53A/TYy-3H5uR4I/AAAAAAAAAb0/KymaC5je8lw/s72-c/umd2_debug_normals.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-1262635336478488544</id><published>2011-03-24T17:48:00.001+02:00</published><updated>2011-03-24T18:01:48.584+02:00</updated><title type='text'>ПЕЧ 590</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;N&lt;/span&gt;&lt;/b&gt;Vidia представила ПЕЧ 590.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="255" src="http://www.youtube.com/embed/5XrVAhcOmmk?rel=0" title="YouTube video player" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Петерсон суетится, тычет пальцами в оверлеи, меряет какой-то штукой деЦИБелы :)&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Обзоры:&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.techpowerup.com/reviews/ASUS/GeForce_GTX_590/"&gt;TechPowerUp&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.bit-tech.net/hardware/graphics/2011/03/24/nvidia-geforce-gtx-590-3gb-review/1"&gt;Bit-Tech&lt;/a&gt;&lt;/div&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/1284103224036292113-1262635336478488544?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/1262635336478488544/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/03/590.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1262635336478488544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1262635336478488544'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/03/590.html' title='ПЕЧ 590'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/5XrVAhcOmmk/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-5484261136068373496</id><published>2011-03-23T17:24:00.002+02:00</published><updated>2011-03-23T17:35:04.363+02:00</updated><title type='text'>IsDebuggerPresent</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;С&lt;/b&gt;&lt;/span&gt;егодня начал играться с компиляцией проекта вкупе с DirectGL в release, чтобы убедиться в работоспособности кода во всех конфигурациях. И сразу сделал открытие: время загрузки шейдеров резко увеличилось (требовалось всего 1-2 секунды)! Я бросился инспектировать код на предмет #ifdef _DEBUG, но никаких зацепок не нашлось. Тогда я пересобрал проект в debug конфигурации, запустил по Ctrl-F5 и о чудо: GLSL шейдеры скомпилировались влёт.&lt;br /&gt;&lt;br /&gt;Больше ничего не оставалось, как запустить проект по F5 и наблюдать картину с тормозявой загрузкой шейдеров. Ппц.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-0WAX4btmxr8/TYoS4MsiWlI/AAAAAAAAAbo/CpSQ_Pmk8wA/s1600/digl_textured.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="186" src="https://lh5.googleusercontent.com/-0WAX4btmxr8/TYoS4MsiWlI/AAAAAAAAAbo/CpSQ_Pmk8wA/s320/digl_textured.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-5484261136068373496?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/5484261136068373496/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/03/isdebuggerpresent.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5484261136068373496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5484261136068373496'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/03/isdebuggerpresent.html' title='IsDebuggerPresent'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-0WAX4btmxr8/TYoS4MsiWlI/AAAAAAAAAbo/CpSQ_Pmk8wA/s72-c/digl_textured.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-4305484528821891240</id><published>2011-03-21T17:56:00.003+02:00</published><updated>2011-03-22T11:47:21.075+02:00</updated><title type='text'>Этот ваш DirectX тормозит</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;a href="http://www.3dnews.ru/news/amd-directx-tormozit-razvitie-igr-na-pk/"&gt;AMD: DirectX тормозит развитие игр на ПК&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center" class="caption" style="clear: both; display: block; font-family: Tahoma, Verdana, Arial, sans; font-size: 9pt; font-style: italic; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; text-align: center;"&gt;&lt;em&gt;Мог бы Crysis исполняться более эффективно, если бы Crytek не была ограничена Direct3D и могла иметь более широкий низкоуровневый доступ к&amp;nbsp;&lt;/em&gt;&lt;em&gt;GPU?&lt;/em&gt;&lt;/div&gt;&lt;div class="caption" style="clear: both; color: #444444; display: block; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;А к какому GPU?&lt;/span&gt;&lt;/div&gt;&lt;div class="caption" style="clear: both; display: block; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma, Verdana, Arial, sans; font-size: 13px;"&gt;&lt;em&gt;Ускоритель Xenos в Xbox 360 имеет более чем в 10 раз меньшую производительность, чем самые мощные&amp;nbsp;&lt;/em&gt;&lt;em&gt;GPU для ПК. Так почему же игры не выглядят в 10 раз лучше?&lt;/em&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="caption" style="clear: both; display: block; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma, Verdana, Arial, sans; font-size: 13px;"&gt;&lt;em&gt;&lt;/em&gt;&lt;/span&gt;А как это: в 10 раз лучше?&amp;nbsp;:)&lt;br /&gt;&lt;br /&gt;На самом деле, эту проблему намеревались решить в DX 11 с помощью Driver Command Lists, но эта фича до сих пор не реализована ни в драйверах AMD, ни у NVIDIA. Разработчики из DICE&amp;nbsp;&lt;a href="http://www.slideshare.net/DICEStudio/directx-11-rendering-in-battlefield-3?from=ss_embed"&gt;жалуются&lt;/a&gt;: уже два года ждём, и всё нету.&lt;br /&gt;&lt;br /&gt;P.S. Ричард Хадди - осёл.&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/1284103224036292113-4305484528821891240?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/4305484528821891240/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/03/directx.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4305484528821891240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4305484528821891240'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/03/directx.html' title='Этот ваш DirectX тормозит'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-5669307420628177861</id><published>2011-03-18T19:30:00.005+02:00</published><updated>2011-03-24T14:41:39.718+02:00</updated><title type='text'>AC2 in Mac Store</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;В&lt;/span&gt;&lt;/b&gt; Apple Mac (не App!) Store появился порт Assassin's Creed II, который разрабатывался Ubisoft Kiev. Нужно сказать, что это игра из разряда "тяжеловесов" для Mac, т. к. в основном сейчас там (не считая нескольких исключений) продаются довольно примитивные игры.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-BN6c0NIX8xw/TYs75LjwwqI/AAAAAAAAAbs/d-gi-LL5jX0/s1600/ac2_mac.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="198" src="https://lh4.googleusercontent.com/-BN6c0NIX8xw/TYs75LjwwqI/AAAAAAAAAbs/d-gi-LL5jX0/s320/ac2_mac.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Для сёрфинга по магазину приложений нужны MacOS X и App Store клиент. Стоит игруша $37.99.&lt;br /&gt;&lt;br /&gt;Думаю, скоро там появится порт игры, над графикой которой весь прошлый год работал и я :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-5669307420628177861?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/5669307420628177861/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/03/ac2-in-mac-store.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5669307420628177861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5669307420628177861'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/03/ac2-in-mac-store.html' title='AC2 in Mac Store'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/-BN6c0NIX8xw/TYs75LjwwqI/AAAAAAAAAbs/d-gi-LL5jX0/s72-c/ac2_mac.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-1637771583262238548</id><published>2011-03-16T11:09:00.003+02:00</published><updated>2011-03-16T11:09:52.939+02:00</updated><title type='text'>GS</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Н&lt;/span&gt;&lt;/b&gt;е используйте массивы!!!&lt;br /&gt;Ну или GlukoGL... :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-1637771583262238548?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/1637771583262238548/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/03/gs.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1637771583262238548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1637771583262238548'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/03/gs.html' title='GS'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-2351182150278824112</id><published>2011-03-11T12:27:00.000+02:00</published><updated>2011-03-11T12:27:21.083+02:00</updated><title type='text'>District 9 Main Theme</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;iframe allowfullscreen="" frameborder="0" height="255" src="http://www.youtube.com/embed/kD8LcP3m8fg?rel=0" title="YouTube video player" width="400"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-2351182150278824112?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/2351182150278824112/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/03/district-9-main-theme.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2351182150278824112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2351182150278824112'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/03/district-9-main-theme.html' title='District 9 Main Theme'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/kD8LcP3m8fg/default.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7959270362717217308</id><published>2011-03-10T15:11:00.001+02:00</published><updated>2011-03-16T11:10:12.261+02:00</updated><title type='text'>UE3 Samaritan Demo</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;В&lt;/b&gt;&lt;/span&gt;печатляет:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=RSXyztq_0uM"&gt;http://www.youtube.com/watch?v=RSXyztq_0uM&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Хотя мне бы больше понравилась яркое солнышко, голубое небо и зелёная травка :)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-7959270362717217308?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7959270362717217308/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/03/ue3-samaritan-demo.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7959270362717217308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7959270362717217308'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/03/ue3-samaritan-demo.html' title='UE3 Samaritan Demo'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-3179404495152017095</id><published>2011-03-10T13:06:00.005+02:00</published><updated>2011-03-16T11:10:27.071+02:00</updated><title type='text'>GlukoGL</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;В&lt;/b&gt;&lt;/span&gt;олею судеб угораздило меня отлаживать OpenGL рендер на iMac-е под Windows 7. GLSL-шейдеры, которые на этой же машине под управлением MacOS X компилируются и компонуются влёт, под Windows с драйверами ATI делают это со страшными тормозами. Вот для примера вырезки из лога:&amp;nbsp;&lt;a href="http://pastie.org/1655135"&gt;http://pastie.org/1655135&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Несложно подсчитать, сколько приходится ждать, пока всё это счастье запустится и программа что-то нарисует. К тому же это только небольшая часть шейдеров, они собираются "на лету", ибо ждать, пока соберутся все часто используемые пары, не хватит даже ангельского терпения. К слову, под MacOS X несколько сот пар этих же шейдеров компилируются и компонуются за 8 секунд.&lt;br /&gt;&lt;br /&gt;Похоже, GLSL-компилятор Apple писали самостоятельно, и он невероятно быстр. Наверное, компилирует в какой-то промежуточный код, который дальше переколбашивает атишный драйвер, а может, в Apple сами написали драйверы под железо маков. А вот для Windows драйвер писали криворукие индусы, ппц.&lt;br /&gt;&lt;br /&gt;Update&lt;br /&gt;&lt;div style="text-align: center;"&gt;Ура, мой DirectGL заработал! Наконец-то.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-no7BDY5c6hg/TXo_hbaKrxI/AAAAAAAAAbk/rLxZmyB_-4A/s1600/digl_wire.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="186" src="https://lh6.googleusercontent.com/-no7BDY5c6hg/TXo_hbaKrxI/AAAAAAAAAbk/rLxZmyB_-4A/s320/digl_wire.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-N-F3vqeH_sA/TXo_IVLbgSI/AAAAAAAAAbg/VAmjwKBU_cQ/s1600/digl_wire2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="186" src="https://lh3.googleusercontent.com/-N-F3vqeH_sA/TXo_IVLbgSI/AAAAAAAAAbg/VAmjwKBU_cQ/s320/digl_wire2.png" width="320" /&gt;&lt;/a&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/1284103224036292113-3179404495152017095?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/3179404495152017095/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/03/glukogl.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/3179404495152017095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/3179404495152017095'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/03/glukogl.html' title='GlukoGL'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/-no7BDY5c6hg/TXo_hbaKrxI/AAAAAAAAAbk/rLxZmyB_-4A/s72-c/digl_wire.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-8507123771846990972</id><published>2011-02-24T16:51:00.001+02:00</published><updated>2011-03-10T14:35:26.111+02:00</updated><title type='text'>Beyond Programmable Shading</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Немного ссылок, если у кого их до сих пор нет:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bps10.idav.ucdavis.edu/"&gt;SIGGRAPH 2010 Slides&lt;/a&gt;&lt;br /&gt;&lt;a href="http://developer.nvidia.com/object/siggraph-2009.html"&gt;NVIDIA SIGGRAPH 2009&lt;/a&gt;&lt;br /&gt;&lt;a href="http://developer.nvidia.com/object/siggraph-2010-home.html"&gt;NVIDIA SIGGRAPH 2010&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.nvidia.com/object/gdc2011.html"&gt;NVIDIA GDC 2011&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-8507123771846990972?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/8507123771846990972/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/02/beyond-programmable-shading.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/8507123771846990972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/8507123771846990972'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/02/beyond-programmable-shading.html' title='Beyond Programmable Shading'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7176689971849428489</id><published>2011-02-19T13:36:00.008+02:00</published><updated>2011-02-19T18:06:32.135+02:00</updated><title type='text'>Стиляги</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;С&lt;/span&gt;&lt;/strong&gt;шил наконец-то себе пальто, о котором я писал раньше. Ох и пришлось же мне с ним повозиться. Но носить Совпаршив с Петровки - с меня довольно.&lt;br /&gt;&lt;br /&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-tfxYHENpsQ4/TV-qdkGAuPI/AAAAAAAAAbQ/FtLJNmrMQyk/s1600/IMG_0018.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-tfxYHENpsQ4/TV-qdkGAuPI/AAAAAAAAAbQ/FtLJNmrMQyk/s320/IMG_0018.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-QuRhuOawA6w/TV-qeCXnUPI/AAAAAAAAAbU/Cem1ZHhHfUU/s1600/IMG_0023.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-QuRhuOawA6w/TV-qeCXnUPI/AAAAAAAAAbU/Cem1ZHhHfUU/s320/IMG_0023.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;"Как сказал буржуазный писатель Антон Палыч Чехов, надо по капле выдавливать из себя жлоба." (C) Фрэд.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-bxeOK1YSusA/TV-rO-kLWQI/AAAAAAAAAbY/yGwd6PeM9ag/s1600/stilyagi1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="187" src="http://3.bp.blogspot.com/-bxeOK1YSusA/TV-rO-kLWQI/AAAAAAAAAbY/yGwd6PeM9ag/s320/stilyagi1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Да, задроты, чтобы носить такое пальто, нужно иметь крепкие орешки :)&lt;/div&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/1284103224036292113-7176689971849428489?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7176689971849428489/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/02/blog-post_19.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7176689971849428489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7176689971849428489'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/02/blog-post_19.html' title='Стиляги'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-tfxYHENpsQ4/TV-qdkGAuPI/AAAAAAAAAbQ/FtLJNmrMQyk/s72-c/IMG_0018.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7795527184062170693</id><published>2011-02-16T16:36:00.001+02:00</published><updated>2011-02-16T16:39:14.836+02:00</updated><title type='text'>My own Fraps counter</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;О&lt;/span&gt;&lt;/strong&gt;т нечего делать прикрутил пока счётчик FPS к DirectGL. &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Дело в том, что на Mac нет встроенных средств подсчёта кадров в секунду, и программ наподобии Fraps я тоже не видел. Поэтому было решено написать встроенный счётчик, общий для Win и Mac, а за образец была взята утилита Fraps.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;﻿&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" height="240" j6="true" src="http://3.bp.blogspot.com/-LcVfhmq1LrA/TVveFWF0duI/AAAAAAAAAbI/GU_KoG3tePs/s320/fraps.JPG" width="320" /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Я отсканировал цифры Fraps-а принт-скрином и выстроил их в текстуре 160x26. Потом я написал утилиту, которая считывала данные из этого bmp-файла и записывала их в виде массива dword-ов для C++. Этот массив зашивается в exe-файл при билде, его легко копировать в текстуру и не нужно таскать с проектом .bmp файл. Далее я написал простой класс, который ведёт подсчёт кадров и расчёт fps, а также выводит несколько текстурированных квадов с текстурой шрифта. Т. к. stretch бэк-буфера DX9 не влияет на счётчик Fraps, мой вариант рисуется после того, как на окно натянута текстура с изображением кадра, но до вызова SwapBuffers().&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Получился счётчик, который как две капли воды похож на Fraps.&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/1284103224036292113-7795527184062170693?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7795527184062170693/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/02/my-own-fraps-counter.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7795527184062170693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7795527184062170693'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/02/my-own-fraps-counter.html' title='My own Fraps counter'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-LcVfhmq1LrA/TVveFWF0duI/AAAAAAAAAbI/GU_KoG3tePs/s72-c/fraps.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-6184408687759290833</id><published>2011-02-11T12:36:00.003+02:00</published><updated>2011-02-11T12:37:12.689+02:00</updated><title type='text'>Нокия</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;В&lt;/span&gt;&lt;/b&gt;раг моего врага - мой друг.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-6184408687759290833?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/6184408687759290833/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/02/blog-post_11.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/6184408687759290833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/6184408687759290833'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/02/blog-post_11.html' title='Нокия'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-4902551190768430472</id><published>2011-02-09T15:15:00.009+02:00</published><updated>2011-02-11T12:24:19.560+02:00</updated><title type='text'>MD2 Converter</title><content type='html'>&lt;strong&gt;&lt;span style="font-size: large;"&gt;П&lt;/span&gt;&lt;/strong&gt;еренёс наконец-то код загрузки MD2 на Direct3D 11.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_xBQ2qj-7DXM/TVJxlx1MMvI/AAAAAAAAAbA/drWypaxmuBk/s1600/tank.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" h5="true" height="320" src="http://3.bp.blogspot.com/_xBQ2qj-7DXM/TVJxlx1MMvI/AAAAAAAAAbA/drWypaxmuBk/s320/tank.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_xBQ2qj-7DXM/TVJxln1yomI/AAAAAAAAAa8/z0tVnARsk00/s1600/bitch.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" h5="true" height="320" src="http://4.bp.blogspot.com/_xBQ2qj-7DXM/TVJxln1yomI/AAAAAAAAAa8/z0tVnARsk00/s320/bitch.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-YLRQY9s40BE/TVUON_sQ8tI/AAAAAAAAAbE/3yd9Ct3mTF4/s1600/berserk_silhouette_gs40.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-YLRQY9s40BE/TVUON_sQ8tI/AAAAAAAAAbE/3yd9Ct3mTF4/s320/berserk_silhouette_gs40.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Т. к. формат очень старый и в своём первоначальном виде плохо подходит для Direct3D 11, было решено написать конвертер, который брал бы исходные данные и перерабатывал их таким образом, чтобы можно было легко загружать их и оперировать ими на GPU. Для простоты формат я назвал U(nified)MD2.&lt;br /&gt;&lt;br /&gt;Во-первых, вершины всех фреймов в формате ubyte собраны вместе и заливаются в один буфер вершин. Для расчёта промежуточного кадра буфер вершин подключается к input slot 0 и 1, для первого слота указывается смещение для текущего кадра, а для второго - смещение для следующего за текущим кадра. Позиция вершины рассчитывается в вершинном шейдере простой интерполяцией двух атрибутов.&lt;br /&gt;&lt;br /&gt;Для геометрии модели считается adjacency и записывается вместо стандартных индексов треугольников. Такой единый индексный буфер можно использовать как для поиска силуэтов, так и для стандартного рисования модели (железо игнорирует смежные индексы, если геометрический шейдер не установлен или не нуждается в них).&lt;br /&gt;&lt;br /&gt;Данные об анимациях и их длинах также были переработаны для более удобного чтения (нет необходимости в парсинге).&lt;br /&gt;&lt;br /&gt;Сложнее всего было решить, как поступить с текстурными координатами. Из-за швов (seams) в MD2 моделях существуют вершины, которые имеют одинаковую позицию, но разные текстурные координаты, и использовать один индексный буфер в таком случае невозможно. Графические ускорители никогда не поддерживали несколько индексных буферов (по очевидным причинам - сложность pre- и post-TnL кэшей увеличивается), поэтому простых решений два: индексировать на CPU или размножать вершины с разными текстурными координатами. Т. к. модели в Quake II геометрически очень просты, формировать буфер на CPU легко, но это не интересно. Размножение вершин возможно и обычно так и поступают в стандартных моделях, но в данном случае используется key frame анимация с множеством копий одних и тех же вершин, и дублирование станет многократным - решение получается некрасивым.&lt;br /&gt;&lt;br /&gt;Наиболее правильный подход в данном случае - размножить uv координаты так, чтобы на каждый треугольник приходилось по три uv координаты (т. к. текстурные координаты общие для всех кадров, их увеличение несущественно). Теперь в геометрическом шейдере можно использовать семантику SV_PrimitiveID для индексации буфера текстурных координат, который подключается как shader resource:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Buffer&lt;float2&gt; g_buffer : register(t0);&lt;br /&gt;uint pid: SV_PrimitiveID;&lt;br /&gt;...&lt;br /&gt;float2 tex = g_buffer.Load(pid * 3 + i);&lt;/float2&gt;&lt;/blockquote&gt;&lt;br /&gt;где i - номер вершины треугольника.&lt;/div&gt;&lt;br /&gt;Внедрение простого геометрического шейдера в современных GPU не приводит к существенному падению производительности, поэтому можно смело использовать такой подход. Впрочем, в случае с MD2 это скорее просто спортивный приём :)&lt;br /&gt;&lt;br /&gt;И последнее: в MD2 текстурные координаты хранятся в формате ushort (значения делятся на высоту и ширину скина, получается float), но конвертер преобразует их в half.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-4902551190768430472?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/4902551190768430472/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/02/md2-direct3d-11.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4902551190768430472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4902551190768430472'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/02/md2-direct3d-11.html' title='MD2 Converter'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_xBQ2qj-7DXM/TVJxlx1MMvI/AAAAAAAAAbA/drWypaxmuBk/s72-c/tank.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7124624417903474696</id><published>2011-02-05T12:44:00.000+02:00</published><updated>2011-02-05T12:44:22.689+02:00</updated><title type='text'>iPod</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;К&lt;/span&gt;&lt;/b&gt;упил Apple iPod 4 Gen на 8 Гб.&lt;br /&gt;&lt;br /&gt;Нужно сказать, что гаджет замечательный - легкий, плоский, изящный. Retina Display выше всяких похвал: текст и контролы кристально четкие, растра не видно.&lt;br /&gt;&lt;br /&gt;Сначала не мог разобраться с iTunes на MacOS X, но затем с легкостью закачал свою любимую музыку, iBook и несколько PDF, посмотрел демонстрационные версии Angry Birds и Cut the Rope, еще пару программ.&lt;br /&gt;&lt;br /&gt;А купил я под для изучения английского. Его задача - бухтеть мне на ухо английскую речь в течении дня, и так, думаю, где-то полгода. Параллельно планирую заниматься грамматикой и пополнять словарный запас, и думаю, что мой английский сдвинется с мертвой точки.&lt;br /&gt;&lt;br /&gt;Для iPod доступны бесплатные подкасты для изучающих английский, а также спец. программы (увы, платные, но посмотрим). Если кто надумает увлекаться английским, на &lt;a href="http://www.eslpod.com/"&gt;ESL Podcast&lt;/a&gt;&amp;nbsp;можно найти множество подкастов для этого занятия: интересно, что iPod отображает текст, если он записан вместе со звуком, так что можно слушать и одновременно читать диктуемый текст, если какое-то слово было не понято.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-7124624417903474696?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7124624417903474696/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/02/ipod.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7124624417903474696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7124624417903474696'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/02/ipod.html' title='iPod'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7786165230485137073</id><published>2011-02-02T13:55:00.004+02:00</published><updated>2011-02-03T09:37:44.747+02:00</updated><title type='text'>О скрипках</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_xBQ2qj-7DXM/TUlIAD1TeXI/AAAAAAAAAa0/scdwQY8kvhU/s1600/del.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="233" s5="true" src="http://2.bp.blogspot.com/_xBQ2qj-7DXM/TUlIAD1TeXI/AAAAAAAAAa0/scdwQY8kvhU/s320/del.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;П&lt;/span&gt;&lt;/strong&gt;ятнадцать лет... Пятнадцать лет я строил свои скрипки, искал новые конструкции, мучился... мучился с непослушными лаками. Мои инструменты стали красоты неслыханной!&amp;nbsp;Я поселил в них сказочный мир звуков. Я всё это хотел подарить людям, но Вы, как в турецкий плен, уводили все мои детища. Я больше никогда, никогда не слышал их голоса... Боже, за что же такое наказание?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-7786165230485137073?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7786165230485137073/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/02/blog-post_02.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7786165230485137073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7786165230485137073'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/02/blog-post_02.html' title='О скрипках'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TUlIAD1TeXI/AAAAAAAAAa0/scdwQY8kvhU/s72-c/del.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-1480196024954665528</id><published>2011-02-02T10:36:00.001+02:00</published><updated>2011-02-02T10:37:21.835+02:00</updated><title type='text'>Елизавета</title><content type='html'>&lt;strong&gt;&lt;span style="font-size: large;"&gt;В&lt;/span&gt;&lt;/strong&gt;&lt;em&gt;есёлая царица была Елисавет: Поёт и веселится, порядка только нет.&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-1480196024954665528?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/1480196024954665528/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/02/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1480196024954665528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1480196024954665528'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/02/blog-post.html' title='Елизавета'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-9194205973773428472</id><published>2011-01-24T17:08:00.000+02:00</published><updated>2011-01-24T17:08:59.195+02:00</updated><title type='text'>Видеокерпич</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_xBQ2qj-7DXM/TT2Vq4HQ00I/AAAAAAAAAas/Xz1g5hJ06Ms/s1600/gainwardgeforcegtx5803gbphantom03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" s5="true" src="http://1.bp.blogspot.com/_xBQ2qj-7DXM/TT2Vq4HQ00I/AAAAAAAAAas/Xz1g5hJ06Ms/s320/gainwardgeforcegtx5803gbphantom03.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Это Gainward GTX 580 Phantom. Страшно? И мне тоже...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-9194205973773428472?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/9194205973773428472/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/01/blog-post_1434.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/9194205973773428472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/9194205973773428472'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/01/blog-post_1434.html' title='Видеокерпич'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_xBQ2qj-7DXM/TT2Vq4HQ00I/AAAAAAAAAas/Xz1g5hJ06Ms/s72-c/gainwardgeforcegtx5803gbphantom03.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7246168065881168559</id><published>2011-01-24T14:33:00.002+02:00</published><updated>2011-01-24T14:34:54.442+02:00</updated><title type='text'>Фюрер</title><content type='html'>Со Стиви беда, товарищи. Похоже, рак его всё-таки доканает... Так и помрёт посреди своей империи, своих миллиардов и посреди всех этих ебучих гаджетов, на которых он эти миллиарды заработал. С Александром Македонским всё так и случилось, кстати (только его отравили). Лишний повод задуматься, насколько легко всё превращается в прах в этом мире...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-7246168065881168559?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7246168065881168559/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/01/blog-post_24.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7246168065881168559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7246168065881168559'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/01/blog-post_24.html' title='Фюрер'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7033642777816606269</id><published>2011-01-22T16:45:00.002+02:00</published><updated>2011-01-22T16:47:12.376+02:00</updated><title type='text'>MD2 loader update</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_xBQ2qj-7DXM/TTrtUuJQFvI/AAAAAAAAAao/txCFRW4lqeM/s1600/tank.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" s5="true" src="http://2.bp.blogspot.com/_xBQ2qj-7DXM/TTrtUuJQFvI/AAAAAAAAAao/txCFRW4lqeM/s320/tank.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Осталось перенести на Direct3D 11.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-7033642777816606269?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7033642777816606269/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/01/md2-update.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7033642777816606269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7033642777816606269'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/01/md2-update.html' title='MD2 loader update'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TTrtUuJQFvI/AAAAAAAAAao/txCFRW4lqeM/s72-c/tank.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7215494301348626164</id><published>2011-01-16T18:09:00.008+02:00</published><updated>2011-01-17T15:01:47.760+02:00</updated><title type='text'>С++: отделение интерфейса от реализации</title><content type='html'>&lt;strong&gt;&lt;span style="font-size: large;"&gt;К&lt;/span&gt;&lt;/strong&gt;онцепция инкапсуляции основана на разделении того, как выглядит объект (интерфейс), и того, как он в действительности работает (реализация). Но известно, что в С++ определение класса включает в себя описание как методов, так и типов данных и переменных-членов класса. Описание членов класса в файле заголовков (.h) приводит к необходимости подключать описания и определения дополнительных типов, что увеличивает объём компилируемого кода и как следствие, компиляция замедляется. Кроме того, при каждом изменении внутренних деталей определения происходит перекомпиляция всех зависимых файлов, даже если интерфейс остался неизменным.&lt;br /&gt;&lt;br /&gt;Эту проблему можно преодолеть, если разбить класс на интерфейс для типа данных и реализацию типа данных. Возможны два варианта такого подхода: &lt;br /&gt;&lt;br /&gt;1) Интерфейс представляется в виде абстрактного класса, где все методы чисто виртуальные. Реализация представлена производным классом, который содержит реализацию всех виртуальных методов и необходимые переменные-члены класса. Конструктором объекта выступает фабрика, возвращающая указатель на абстрактный интерфейс.&lt;br /&gt;&lt;br /&gt;2) Идиома Pimpl. Интерфейс хранит указатель на непрозрачный (opaque) для клиента тип данных. Реализация типа данных и методов интерфейса размещается в .cpp файле, при этом&amp;nbsp;методы класса-интерфейса просто вызывают соответствующие методы класса-реализации. Возможен и другой вариант: opaque тип данных содержит только члены-переменные класса, с которыми работают методы интерфейса: вместо обращения this-&amp;gt;field&amp;nbsp;добавляется один уровень косвенности:&amp;nbsp;this-&amp;gt;pimpl-&amp;gt;field.&lt;br /&gt;&lt;br /&gt;Оба этих подхода имеют ряд недостатков. Использование виртуальных методов или передача вызовов классу реализации снижает эффективность программы в случае высокочастотных взаимодействий между классами, а необходимость выделять память отдельно для интерфейса и реализации замедляет&amp;nbsp;создание объектов&amp;nbsp;и повышает фрагментацию памяти. С другой стороны, дополнительный уровень косвенности замедляет доступ к данным, увеличивает объём кода и ухудшает его читаемость.&lt;br /&gt;&lt;br /&gt;Оба этих подхода могут использоваться только точечно, для некоторых классов программы, но не годятся для повсеместного использования. А между тем, хотелось бы структурировать код именно таким образом: определение класса в файле заголовков содержит только описание методов интерфейса, а переменные-члены класса и внутренние типы реализации определяются в .cpp файле.&lt;br /&gt;&lt;br /&gt;Для преодоления этой проблемы на вооружение была взята следующая идея: &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Cделать различным определение класса для разных единиц трансляции: это возможно, т. к. в С и C++ единица трансляции компилируется автономно и независимо от остальных.&lt;/blockquote&gt;&lt;br /&gt;В данном случае роль дескриптора (opaque handle) играет некий базовый класс, от которого наследуется класс-интерфейс реализации. Представим себе некий класс &lt;em&gt;CFoo,&lt;/em&gt; реализация которого должна быть скрыта, а клиенту предоставляется лишь интерфейс. Определим класс как производный от класса-дескриптора &lt;em&gt;HFoo:&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pastie.org/1466746"&gt;Declaration of CFoo&lt;/a&gt;&lt;br /&gt;(для просмотра я рекомендую тему Slush and Poppies)&lt;br /&gt;&lt;br /&gt;Напишем код клиента, который работает с интерфейсом класса &lt;em&gt;CFoo&lt;/em&gt;: &lt;br /&gt;&lt;br /&gt;&lt;a href="http://pastie.org/1466757"&gt;Client&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Мы определили дескриптор &lt;em&gt;HFoo&lt;/em&gt; как пустую структуру, после чего стало возможным правильное определение &lt;em&gt;CFoo:&lt;/em&gt; подключаем его определение и компилируем код. Всё нормально.&lt;br /&gt;&lt;br /&gt;В файле реализации мы делаем следующий трюк: определяем &lt;em&gt;HFoo&lt;/em&gt; так, как того требует реализация (например, нужны две целочисленные переменные), после этого подключаем определение:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pastie.org/1466799"&gt;Implementation of CFoo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Теперь класс CFoo имеет разные определения в файле реализации и в&amp;nbsp;коде клиента,&amp;nbsp;но это никак не мешает компиляции и сборке программы. Но работать программа не будет, при её запуске можно легко получить heap&amp;nbsp;corruption или&amp;nbsp;AV:&amp;nbsp;почему? Дело в том,&amp;nbsp;что для клиента &lt;em&gt;CFoo&lt;/em&gt; имеет, как и положено,&amp;nbsp;размер 1 байт, поскольку не содержит каких-либо членов класса. Поэтому CRT честно выделит 1 байт для экземпляра класса и вернёт указатель на него. Реализация же попытается обратиться как минимум к 2 * sizeof(int) байтам памяти, что вызовет ошибку. Решить проблему можно двумя способами: создать&amp;nbsp;фабрику или перегрузить операторы new и delete для &lt;em&gt;CFoo&lt;/em&gt;.&amp;nbsp;Главное, чтобы память выделялась в файле реализации, где &lt;em&gt;CFoo&lt;/em&gt; определяется как объект размером 8 байт. Мне больше нравится второй подход:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pastie.org/1466974"&gt;Extended definition of CFoo&lt;/a&gt;&lt;br /&gt;&lt;a href="http://pastie.org/1466887"&gt;Extended implementation of CFoo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Этот код компилируется и выполняется без ошибок как в MSC, так и в GCC (единственная сложность - неочевидное требование подключения cstddef для operator new(), &amp;nbsp;в&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; противном случае получаем ошибку&amp;nbsp;declaration of 'operator new' as non-function).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Достоинство данного подхода: никакого оверхеда по памяти и скорости выполнения. Недостаток: хак. Завтра я также постараюсь рассмотреть проблемы, возникающие при таком подходе и возможные пути их решения.&lt;br /&gt;&lt;br /&gt;До встречи!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;Н&lt;/span&gt;&lt;/strong&gt;еудобно каждый раз для нового класса прописывать собственный аллокатор, поэтому мы эту работу поручим препроцессору. Более того, неудобно каждый раз определять пустую структуру-дескриптор перед включением .h файла с классом. Назовём эту структуру &lt;em&gt;заголовком&lt;/em&gt; (header), и определим её в том же .h файле, где размещается&amp;nbsp;определение соотв. класса, а определение обложим гвардами препроцессора:&lt;br /&gt;&lt;blockquote&gt;#ifndef FOO_DECLARED&lt;br /&gt;DECLARE_HEADER(Foo)&lt;br /&gt;#endif&lt;/blockquote&gt;Макрос FOO_DECLARED описывается в файле реализации после определения "настоящего" дескриптора и перед включением заголовочного файла. Таким образом мы легко контролируем, какое именно определение дескриптора будет видно в файлах проекта. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;Теперь о вещах более приземлённых. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;Одним из недостатков подставного определения является то, что отладчик MS Visual Studio не видит переменные-члены класса во время отладки (сразу оговорюсь, что GDB в Xсode видит нормально). Досадно, но это факт: по каким-то причинам отладчик "видит" только пустую структуру-дескриптор без полей - понятно, что отладка такой программы&amp;nbsp;быстро превратится в настоящий &lt;strong&gt;кошмар&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Чтобы преодолеть это досадное неудобство, можно в теле метода объявить указатель на дескриптор и присвоить ему this:&lt;br /&gt;&lt;blockquote&gt;const HFoo *_this = this;&lt;/blockquote&gt;Ещё одно требование - HFoo должна размещаться в безымянном пространстве имён, иначе отладчик будет видеть поля структуры с переменным успехом (это зависит, похоже, от порядка сборки, а впрочем, не уверен). Если все условия выполнены, в процессе отладки можно видеть поля класса:&lt;br /&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;a href="http://2.bp.blogspot.com/_xBQ2qj-7DXM/TTQ54MnNJpI/AAAAAAAAAak/8WBcIJJ9l98/s1600/debugger.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="99" n4="true" src="http://2.bp.blogspot.com/_xBQ2qj-7DXM/TTQ54MnNJpI/AAAAAAAAAak/8WBcIJJ9l98/s320/debugger.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;em&gt;&lt;span style="font-size: x-small;"&gt;Ну я для GDB в этих триках нет необходимости&lt;/span&gt;&lt;/em&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Поручим&amp;nbsp;и эту&amp;nbsp;работу по разрастанию кода препроцессору. Соберём все вспомогательные макросы в отдельный файл заголовков:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://pastie.org/1469391"&gt;common.h&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Вот как теперь выглядят сокращённые определение и реализация CFoo:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://pastie.org/1469667"&gt;Shortened declaration of CFoo&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://pastie.org/1469683"&gt;Shortened implementation of CFoo&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Макросы BEGIN_HEADER и END_HEADER я ввёл для упрощения&amp;nbsp;определения дескриптора в безымянном пространстве имён, но, возможно, у кого-то появится решение получше.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Ну вот и всё. Дискасс из велкам :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-7215494301348626164?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7215494301348626164/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/01/blog-post_16.html#comment-form' title='Комментарии: 8'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7215494301348626164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7215494301348626164'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/01/blog-post_16.html' title='С++: отделение интерфейса от реализации'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TTQ54MnNJpI/AAAAAAAAAak/8WBcIJJ9l98/s72-c/debugger.JPG' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-5778564061577958754</id><published>2011-01-08T21:14:00.005+02:00</published><updated>2011-01-09T01:06:52.730+02:00</updated><title type='text'>MD2 loader</title><content type='html'>&lt;div class="" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;М&lt;/span&gt;&lt;/b&gt;не как программисту тяжело создавать 3D-модели, а использовать кубики и шарики уже надоело. Решил выбрать какой-нить подходящий 3D-формат, с поддержкой анимации. Т. к. с MD5 у меня всплывали проблемы с расчётом adjacency, то выбор пал на формат MD2 из игры Quake II:&amp;nbsp;формат прост и можно взять замечательные модельки прямо из игры.&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_xBQ2qj-7DXM/TSizywGiuDI/AAAAAAAAAac/ZMj9E-oGhPw/s1600/berserk.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" src="http://3.bp.blogspot.com/_xBQ2qj-7DXM/TSizywGiuDI/AAAAAAAAAac/ZMj9E-oGhPw/s320/berserk.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_xBQ2qj-7DXM/TSizzd8Fr4I/AAAAAAAAAag/rZ_QuEsMxZA/s1600/medic.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" src="http://1.bp.blogspot.com/_xBQ2qj-7DXM/TSizzd8Fr4I/AAAAAAAAAag/rZ_QuEsMxZA/s320/medic.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Недостатком формата является то, что в нём используется повершинная анимация. Все "кадры" анимации хранятся в виде набора вершин, и т. к. кадров много и вершины в каждом кадре дублируются, то размер анимации получается немаленьким: в среднем 200-300 кб (до мегабайта). Для экономии памяти вершины хранятся в формате byte, каждый кадр содержит значения scale и translate для восстановления позиций вершин в формате float.&lt;br /&gt;&lt;br /&gt;Оригинальный Quake II и всякие тулзы обычно рисуют MD2 прямо из системной памяти, делая масштабирование и интерполяцию кадров на CPU. Это было не тяжело, т. к. модели были самые настоящие low-poly (SM 5.0 и тесселятор никто ещё не юзал!). И хотя нагрузка на процессор тут минимальна, эту задачу лучше всего перенести на GPU.&lt;br /&gt;&lt;br /&gt;Вершины всех кадров я разместил в одном вершинном буфере в формате GL_UNSIGNED_BYTE. Этот буфер привязан к вершинным атрибутам 0 и 1, но для нулевого атрибута указывается смещение для текущего кадра, а для первого - смещение для следующего за текущим кадра. Таким образом не надо создавать отдельный вершинный буфер для каждого кадра. Далее в шейдер передаются параметры scale и translate для каждого из двух кадров и вес для интерполяции полученных вершин. На выходе получаем анимированную модель.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-5778564061577958754?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/5778564061577958754/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/01/md2-loader.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5778564061577958754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5778564061577958754'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/01/md2-loader.html' title='MD2 loader'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_xBQ2qj-7DXM/TSizywGiuDI/AAAAAAAAAac/ZMj9E-oGhPw/s72-c/berserk.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-8117519780676866802</id><published>2011-01-05T15:12:00.000+02:00</published><updated>2011-01-05T15:12:31.737+02:00</updated><title type='text'>DirectGL prototype is over</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Д&lt;/span&gt;&lt;/b&gt;умаю, что с DirectGL на данном этапе можно закругляться.&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Желаемые цели достигнуты: сторонние демки (включая DX SDK) компилируются, линкуются и запускаются с подставными интерфейсами. Все render states Direct3D 9 максимально близко переведены на OpenGL 2, так что приложения показывают идентичный результат.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Кстати, в Windows 7 OpenGL 1.1 без драйверов эмулируется через Direct3D (майкрософт тоже написали враппер), так я смог на ноуте без OpenGL драйверов поиграть в Quake III. Тут я подумал: что, если на чистой Windows 7 запустить D3D9-демку через мой DirectGL: вызовы будут направляться OpenGL, который является обёрткой над Direct3D! Но проводить такие эксперименты я не стал, т. к. это слишком жестоко :)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Когда я только начинал наброски враппера, было интересно, получится из этого что-нибудь, или нет: фигли, портануть весь API! Но скилл, как выяснилось, позволяет, и теперь&amp;nbsp;это становится даже скушным, т. к. растеризатор по своей природе примитивен, и сore API - тоже.&amp;nbsp;Можно выделить несколько потенциальных проблем, которые могут возникнуть при портировании (например, экзотические атрибуты в vertex decl, HLSL-шейдеры и эффекты, инстансинг), но их придётся решать уже на конкретной задаче (а Wine решает "на месте"). Пока же можно было бы наращивать какой-нить рутинный функционал вроде загрузки DXT-текстур, работы с мешами, D3DX math (сейчас через dll-прослойку все вызовы перенаправляются в стандартный D3DX) и т. д., но это monkey job, и растить в себе кодера как-то не хочется.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&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/1284103224036292113-8117519780676866802?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/8117519780676866802/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/01/directgl-prototype-is-over.html#comment-form' title='Комментарии: 8'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/8117519780676866802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/8117519780676866802'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/01/directgl-prototype-is-over.html' title='DirectGL prototype is over'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-4872434594817505237</id><published>2011-01-04T16:34:00.004+02:00</published><updated>2011-01-05T01:14:19.633+02:00</updated><title type='text'>Basic HLSL</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;П&lt;/span&gt;&lt;/b&gt;осле нескольких часов отключения функционала Direct3D 10 из DXUT-а и ещё нескольких часов возни по замене stub-овых методов на dummy (т. е. на такие, что ничего реального не делают, но возвращают валидный указатель на объект), мне удалось запустить сэмпл из&amp;nbsp;Direct3D 9&amp;nbsp;SDK - Basic HLSL.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&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://3.bp.blogspot.com/_xBQ2qj-7DXM/TSOpjKqxuII/AAAAAAAAAaY/KDMcKJkCN2w/s1600/basic_hlsl.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="312" src="http://3.bp.blogspot.com/_xBQ2qj-7DXM/TSOpjKqxuII/AAAAAAAAAaY/KDMcKJkCN2w/s400/basic_hlsl.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Один из багов, из-за которого жирдяй DXUT отказывался стартовать, был в методе&amp;nbsp;&lt;i&gt;IDirect3D::GetDeviceCaps&lt;/i&gt;. Я реализовал его только частично, но выяснилось, что DXUT проверяет поле PixelShaderVersion структуры D3DCAPS9, которое я не заполнил. После исправления бага всё пошло как по-маслу. Теперь почти весь DXUT 9 реально работает с ложными интерфейсами Direct3D. Я отключил код, который загружает D3DX Effects и рисует через них интерфейс DXUT-a, и отключил ещё несколько функций загрузки, а в остальном "всё по-честному". В результате рисуется очищенное окно и текст :)&lt;br /&gt;&lt;br /&gt;Т. к. почти все демки из DXSDK используют эффекты при рендеринге, увидеть их картинку "из-под" OpenGL вряд ли получится, но зато возня с демками поможет вылизать остальной функционал DirectGL и подготовить его для портирования реального проекта (надеюсь, хоть там эффектов не будет).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-4872434594817505237?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/4872434594817505237/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/01/basic-hlsl.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4872434594817505237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4872434594817505237'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/01/basic-hlsl.html' title='Basic HLSL'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_xBQ2qj-7DXM/TSOpjKqxuII/AAAAAAAAAaY/KDMcKJkCN2w/s72-c/basic_hlsl.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-2582979223575388191</id><published>2011-01-02T01:20:00.004+02:00</published><updated>2011-01-05T14:31:04.206+02:00</updated><title type='text'>Новый Год</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;В&lt;/span&gt;&lt;/b&gt; лесу родилась ёлочка&lt;br /&gt;В квартире - умерла :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-2582979223575388191?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/2582979223575388191/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2011/01/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2582979223575388191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2582979223575388191'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2011/01/blog-post.html' title='Новый Год'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-7582612568599044657</id><published>2010-12-31T12:11:00.001+02:00</published><updated>2011-01-05T14:30:40.009+02:00</updated><title type='text'>Ходорковский</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;М&lt;/span&gt;&lt;/b&gt;-да... На пляже бабу мне не тра..ать :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-7582612568599044657?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/7582612568599044657/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2010/12/blog-post_31.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7582612568599044657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/7582612568599044657'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2010/12/blog-post_31.html' title='Ходорковский'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-6254020288649247547</id><published>2010-12-25T20:06:00.000+02:00</published><updated>2010-12-25T20:06:19.134+02:00</updated><title type='text'>Сдали бету</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;С&lt;/span&gt;&lt;/b&gt;овсем забыл написать: мы сдали бету!&lt;br /&gt;Теперь надо мастер :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-6254020288649247547?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/6254020288649247547/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2010/12/blog-post_25.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/6254020288649247547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/6254020288649247547'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2010/12/blog-post_25.html' title='Сдали бету'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-1799915614400475943</id><published>2010-12-24T11:24:00.002+02:00</published><updated>2010-12-25T19:11:51.159+02:00</updated><title type='text'>DirectGL progress</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Е&lt;/span&gt;&lt;/b&gt;щё несколько демок прибыло:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_xBQ2qj-7DXM/TRRh5pPAAfI/AAAAAAAAAYo/5r27KbGhn2c/s1600/attribs.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/_xBQ2qj-7DXM/TRRh5pPAAfI/AAAAAAAAAYo/5r27KbGhn2c/s320/attribs.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_xBQ2qj-7DXM/TRRh5yENBFI/AAAAAAAAAYs/0La6HLhUPro/s1600/lmvb.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/_xBQ2qj-7DXM/TRRh5yENBFI/AAAAAAAAAYs/0La6HLhUPro/s320/lmvb.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Интересное затруднение возникло с mesh subsets, т. к. я не понимаю, каким точно образом attribute buffer управляет сабсетами меша. Чтобы добиться схожей функциональности, я выделил ограниченное кол-во индексных буферов для предполагаемых сабсетов (скажем, 8). Я просто обхожу attribute buffer и формирую индексные буферы сабсетов из главного индексного буфера. Новый индексный буфер выделяется только тогда, когда встречен соответствующий индекс в attribute буфере, поэтому расход памяти пока приемлемый. Можно и дальше развивать эту идею, но всё-таки интересно, как данный подход на самом деле реализован у Microsoft.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_xBQ2qj-7DXM/TRRh6TtdusI/AAAAAAAAAYw/7wk1ppz6YrE/s1600/mvp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/_xBQ2qj-7DXM/TRRh6TtdusI/AAAAAAAAAYw/7wk1ppz6YrE/s320/mvp.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;С демкой multiple viewports я наткнулся на интересное различие между Direct3D 9 и OpenGL: в первом операция очистки ограничена границами вьюпорта, а в последнем - нет, т. е. чистится всё. Побороть различие удалось установкой scissor теста.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_xBQ2qj-7DXM/TRYlyipW--I/AAAAAAAAAY4/hapMXYsBEGM/s1600/texaddr.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/_xBQ2qj-7DXM/TRYlyipW--I/AAAAAAAAAY4/hapMXYsBEGM/s320/texaddr.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_xBQ2qj-7DXM/TRYly5Wq7vI/AAAAAAAAAY8/ryiwbbBj4YA/s1600/bsp.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/_xBQ2qj-7DXM/TRYly5Wq7vI/AAAAAAAAAY8/ryiwbbBj4YA/s320/bsp.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-1799915614400475943?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/1799915614400475943/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2010/12/mesh-subsets.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1799915614400475943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1799915614400475943'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2010/12/mesh-subsets.html' title='DirectGL progress'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_xBQ2qj-7DXM/TRRh5pPAAfI/AAAAAAAAAYo/5r27KbGhn2c/s72-c/attribs.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-5264357924000213618</id><published>2010-12-20T13:12:00.003+02:00</published><updated>2010-12-20T13:27:20.419+02:00</updated><title type='text'>DirectGL progress</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;П&lt;/span&gt;&lt;/b&gt;орт ещё одной демки: occlusion query&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_xBQ2qj-7DXM/TQ84m0V0zvI/AAAAAAAAAYY/-gFBDIFcIZc/s1600/oq.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/_xBQ2qj-7DXM/TQ84m0V0zvI/AAAAAAAAAYY/-gFBDIFcIZc/s320/oq.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Изначально я планировал портировать только ядро Direct3D 9, но желание перенести некоторые демки на OpenGL стало столь велико, что я засучил рукава и принялся писать реализацию интерфейса ID3DXMesh и обвязку для него, т. е. D3DXCreateBox(), D3DXCreateSphere() и т. д. Спортирую только самое необходимое, а Wine мне поможет. Кстати, в последнем отсутствует функция D3DXCreateTeapot(), поэтому я думаю просто сделать дамп меша Direct3D в текстовый файл и потом подключить его как .h.&lt;br /&gt;&lt;br /&gt;Да, когда-то мы API просто изучали, а теперь мы их портируем :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-5264357924000213618?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/5264357924000213618/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2010/12/directgl-progress_20.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5264357924000213618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5264357924000213618'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2010/12/directgl-progress_20.html' title='DirectGL progress'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TQ84m0V0zvI/AAAAAAAAAYY/-gFBDIFcIZc/s72-c/oq.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-2305229376728874621</id><published>2010-12-16T17:24:00.004+02:00</published><updated>2010-12-20T13:04:58.204+02:00</updated><title type='text'>DirectGL progress</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;С&lt;/span&gt;&lt;/b&gt;портировал ещё несколько демок, включая одну из DX SDK:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_xBQ2qj-7DXM/TQot3VuTl7I/AAAAAAAAAYE/C8u-8q1DJV8/s1600/displacement.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/_xBQ2qj-7DXM/TQot3VuTl7I/AAAAAAAAAYE/C8u-8q1DJV8/s320/displacement.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_xBQ2qj-7DXM/TQot39sF_gI/AAAAAAAAAYI/0KgPGlWCAck/s1600/sprite.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/_xBQ2qj-7DXM/TQot39sF_gI/AAAAAAAAAYI/0KgPGlWCAck/s320/sprite.JPG" width="320" /&gt;&lt;/a&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;a href="http://4.bp.blogspot.com/_xBQ2qj-7DXM/TQ84BdoHWDI/AAAAAAAAAYU/8NtcG1BWL8w/s1600/depth_bias.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/_xBQ2qj-7DXM/TQ84BdoHWDI/AAAAAAAAAYU/8NtcG1BWL8w/s320/depth_bias.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_xBQ2qj-7DXM/TQot4MOS1dI/AAAAAAAAAYM/f7nzOKCaosA/s1600/subimage.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/_xBQ2qj-7DXM/TQot4MOS1dI/AAAAAAAAAYM/f7nzOKCaosA/s320/subimage.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_xBQ2qj-7DXM/TQot5brjV9I/AAAAAAAAAYQ/LjMPCYAJVDo/s1600/terrain.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_xBQ2qj-7DXM/TQot5brjV9I/AAAAAAAAAYQ/LjMPCYAJVDo/s320/terrain.JPG" width="320" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_xBQ2qj-7DXM/TQot29gkyiI/AAAAAAAAAYA/7QAlyLMpFF8/s1600/tut03.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_xBQ2qj-7DXM/TQot29gkyiI/AAAAAAAAAYA/7QAlyLMpFF8/s1600/tut03.bmp" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Все демки работают идентично Direct3D 9, за исключением той, что искривляет геометрию флага в вершинном шейдере: в D3D fixed-function pixel processing дружит с vertex shader, а в OpenGL - нет, по крайней мере в современных драйверах, поэтому изображение чёрное (я вывел в wireframe). Демка с жёлтым прямоугольником внутри синего - это мой собственный unit-test методов IDirect3DTexture9::LockRect и UnlockRect c RGBA8 форматом.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-2305229376728874621?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/2305229376728874621/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2010/12/directgl-progress.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2305229376728874621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/2305229376728874621'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2010/12/directgl-progress.html' title='DirectGL progress'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_xBQ2qj-7DXM/TQot3VuTl7I/AAAAAAAAAYE/C8u-8q1DJV8/s72-c/displacement.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-1959758694254428850</id><published>2010-12-15T13:31:00.000+02:00</published><updated>2010-12-15T13:31:17.768+02:00</updated><title type='text'>На моей Луне</title><content type='html'>&lt;object height="250" width="400"&gt;&lt;param name="movie" value="http://www.youtube.com/v/1r1epkvCmTU?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/1r1epkvCmTU?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="250"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-1959758694254428850?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/1959758694254428850/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2010/12/blog-post_15.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1959758694254428850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/1959758694254428850'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2010/12/blog-post_15.html' title='На моей Луне'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-6690818362750651724</id><published>2010-12-12T20:15:00.001+02:00</published><updated>2010-12-12T20:20:46.176+02:00</updated><title type='text'>Пальто</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;З&lt;/span&gt;&lt;/b&gt;абыл написать, что пальто из зелёного вельвета я всё-таки сшил.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Выглядит оно здорово, но меня не устроили пропорции: широковато в плечах, в талии не такое зауженное, как хотелось бы, да оказалось, что рукава должны быть по-длиннее, референс диктует правила :) Перешивать не хочу, т. к. его и так уже перекраивали по моей просьбе. Придётся поднакопить деньжат и попытаться ещё раз, с нуля. Думаю, во второй раз всё пойдёт проще, т. к. есть готовый образец и точно ясно, что нужно исправить.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_xBQ2qj-7DXM/TQUPvXocKfI/AAAAAAAAAX8/3R4em2MHHzM/s1600/surt.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_xBQ2qj-7DXM/TQUPvXocKfI/AAAAAAAAAX8/3R4em2MHHzM/s400/surt.jpg" width="300" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Счастлив тот, кто сшил себе&lt;/div&gt;&lt;div style="text-align: center;"&gt;В Гамбурге штанишки.&lt;/div&gt;&lt;div style="text-align: center;"&gt;Благодарен он судьбе&lt;/div&gt;&lt;div style="text-align: center;"&gt;За свои делишки.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-6690818362750651724?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/6690818362750651724/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2010/12/blog-post_12.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/6690818362750651724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/6690818362750651724'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2010/12/blog-post_12.html' title='Пальто'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TQUPvXocKfI/AAAAAAAAAX8/3R4em2MHHzM/s72-c/surt.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-4167395384300145122</id><published>2010-12-09T11:15:00.002+02:00</published><updated>2010-12-12T16:54:18.336+02:00</updated><title type='text'>3DMark 11</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;П&lt;/span&gt;&lt;/b&gt;огонял бесплатную версию бенчмарка на iMac-е с HD 5750.&lt;br /&gt;&lt;br /&gt;Тормозит (и сильно), при том что настройки в бесплатной версии - низкие, соответственно и качество... Чувствуется, что ребята создали задел "на будущее", т. к. на однопроцессорной ПЕЧи бенчмарк нормально работать не способен. На странице результатов&amp;nbsp;&lt;a href="http://3dmark.com/search"&gt;http://3dmark.com/search&lt;/a&gt;&amp;nbsp;можно увидеть, что нормальный fps достижим на системе из трёх ПЕЧей 480 и разогнанном Intel Core i7.&lt;br /&gt;&lt;br /&gt;Просмотрел сейчас настройки Performance пакета и ошалел: паршивое разрешение 1280x720 без мультисемплинга и с трилинейной фильтрацией... И это еле ползает на топовых видеокартах! Пиздец.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-4167395384300145122?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/4167395384300145122/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2010/12/3dmark-11.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4167395384300145122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4167395384300145122'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2010/12/3dmark-11.html' title='3DMark 11'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-3060939998354272926</id><published>2010-12-05T20:15:00.005+02:00</published><updated>2010-12-12T19:52:19.905+02:00</updated><title type='text'>DirectGL: linking and loading</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;В&lt;/b&gt;&lt;/span&gt;зял Direct3D 9 версию нашего проекта. Поменял файлы заголовков d3d на свои, подменил сдкейные lib-ы на зависимость от directgl, подпилил некоторые зависимости D3DX... И вся эта махина стартанула!!!&lt;br /&gt;&lt;br /&gt;Начали трейситься вызовы, создался девайс Direct3D, swap chain, наперечислялись форматы и видеорежимы. Пошла загрузка уровня: создались вершинные декларации (кхм, как BLENDINDICES портировать?), 2D-текстуры, вершинные и индексные буферы, шейдеры (для них я пока сделал заглушку). В итоге упало на попытке чего-то отрисовать :)&lt;br /&gt;&lt;br /&gt;Но большего пока и не надо! Как здорово обмануть проект и подсунуть ему фейковую обёртку, которая даже что-то делает. Теперь можно неспеша дебажиться и наращивать требуемый функционал :)&lt;br /&gt;&lt;br /&gt;Update&lt;br /&gt;&lt;br /&gt;Заставил загружаться в память игровой уровень. Это на самом деле просто, т. к. все ресурсы, которыми оперирует растеризатор, складываются из VB/IB, DXT-текстур, рендер таргетов и шейдеров (роль последних выполняет заглушка).&lt;br /&gt;&lt;br /&gt;Интересно, что при заполнении текстуры через LockRect() во флагах обычно указывается 0, что означает, что мы можем как читать, так и писать по указателю. Чтобы только читать, можно указать флаг&amp;nbsp;D3DLOCK_READONLY, но для заполнения нужно что-то вроде WRITEONLY. Можно было бы использовать usage D3DUSAGE_WRITEONLY при создании текстуры, но насколько я понял, этот флаг применяется только к (вершинному) буферу. В общем, для первого (и обычно единственного) lock-а приходится копировать данные из текстуры в PBO, а затем мапить буфер. Я рещил, что можно избежать этого шага, если хранить флажок bDirtyMip=true для текстуры, и на первом lock-e не копировать данные, а просто делать discard пиксельного буфера. После UnlockRect() флажок выставляется в false.&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/1284103224036292113-3060939998354272926?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/3060939998354272926/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2010/12/directgl-linking.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/3060939998354272926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/3060939998354272926'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2010/12/directgl-linking.html' title='DirectGL: linking and loading'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-5166704219978110936</id><published>2010-12-05T18:08:00.002+02:00</published><updated>2010-12-05T18:09:02.951+02:00</updated><title type='text'>Нецензурщина</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;К&lt;/b&gt;&lt;/span&gt;аюсь, грешен.&lt;br /&gt;&lt;br /&gt;Применил в коде &lt;b&gt;goto&lt;/b&gt;, для удаления ресурсов при возникновении ошибки. Знаю, что это почти как мат, но без него придётся либо многократно дублировать код удаления, либо использовать исключения. Первое чревато, а второе не разрешено.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-5166704219978110936?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/5166704219978110936/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2010/12/blog-post.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5166704219978110936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5166704219978110936'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2010/12/blog-post.html' title='Нецензурщина'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-625850462497791465</id><published>2010-11-24T19:24:00.003+02:00</published><updated>2010-11-29T12:45:19.932+02:00</updated><title type='text'>Корпоратив</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;Н&lt;/b&gt;&lt;/span&gt;едавно ели вкусный торт, приуроченный к годовому корпоративчику:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_xBQ2qj-7DXM/TO1KRSUfESI/AAAAAAAAAXw/4gwE8hVUugE/s1600/ubis0ft.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/_xBQ2qj-7DXM/TO1KRSUfESI/AAAAAAAAAXw/4gwE8hVUugE/s400/ubis0ft.jpg" width="300" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-625850462497791465?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/625850462497791465/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2010/11/blog-post_24.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/625850462497791465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/625850462497791465'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2010/11/blog-post_24.html' title='Корпоратив'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_xBQ2qj-7DXM/TO1KRSUfESI/AAAAAAAAAXw/4gwE8hVUugE/s72-c/ubis0ft.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-5982178638155953828</id><published>2010-11-22T18:09:00.002+02:00</published><updated>2010-11-29T16:26:45.397+02:00</updated><title type='text'>DX9 game port</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;В&lt;/span&gt;&lt;/b&gt;от и обещанный порт маленькой DX-игры:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_xBQ2qj-7DXM/TOqTFmvVY1I/AAAAAAAAAXs/5VP1IGvG9QU/s1600/dx_game.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="318" src="http://4.bp.blogspot.com/_xBQ2qj-7DXM/TOqTFmvVY1I/AAAAAAAAAXs/5VP1IGvG9QU/s400/dx_game.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Она использует минимум фич рендера, понадобилось реализовать только интерфейс ID3DXSprite. Его реализацию я нагло выдрал из Wine, сверяясь с описанием в DirectX SDK. Не реализован lockable back buffer, в который рисуются звёзды и выхлопы двигателя корабля, т. к. в OpenGL отсутствуют lockable buffers. Позже, думаю, для развлечения можно будет использовать pixel buffer object, но это полумеры, да и в крупных проектах не используется (разве что для редактора).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Также сделал наброски pure device, в виде наследника основного device. В pure device отсутствуют проверки на возможные ошибки в time-critical частях кода, чем сейчас изобилует основой device.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;P. S. Wine штука интересная, время от времени я буду сверяться с ним в случае затруднений при портировании.&lt;br /&gt;&lt;br /&gt;Update&lt;br /&gt;&lt;br /&gt;Реализовал lockable back buffer. Для этого пришлось написать класс swap chain-а и усложнить логику создания render target - теперь он может быть текстурой, если lockable, и рендербуфером, если нет (а если задан мультисемплинг - только им). На ATI опять отгрёб проблемы, на этот раз с PBO - первый lock/unlock работает только первые три кадра, затем текстура не обновляется. Повторный даёт результат, поэтому я пока вставил затычку с пустым первым lock/unlock. На GeForce этой проблемы, как и ожидалось, нет.&lt;br /&gt;&lt;br /&gt;Также заработал мультисемплинг и переход в fullscreen режим.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-5982178638155953828?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/5982178638155953828/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2010/11/dx9-game-port.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5982178638155953828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/5982178638155953828'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2010/11/dx9-game-port.html' title='DX9 game port'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_xBQ2qj-7DXM/TOqTFmvVY1I/AAAAAAAAAXs/5VP1IGvG9QU/s72-c/dx_game.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-4680367227657006198</id><published>2010-11-18T19:46:00.003+02:00</published><updated>2010-11-19T19:51:08.281+02:00</updated><title type='text'>DirectGL progress</title><content type='html'>&lt;strong&gt;&lt;span style="font-size: large;"&gt;С&lt;/span&gt;&lt;/strong&gt;портировал ещё несколько демок. С ростом codebase это становится всё проще и проще.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_xBQ2qj-7DXM/TOVlZ9l2k8I/AAAAAAAAAXg/EfUK0k0iCmI/s1600/rtt.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" ox="true" src="http://2.bp.blogspot.com/_xBQ2qj-7DXM/TOVlZ9l2k8I/AAAAAAAAAXg/EfUK0k0iCmI/s320/rtt.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_xBQ2qj-7DXM/TOVlawhXlkI/AAAAAAAAAXk/RXWWc2XzLQQ/s1600/psprites.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" ox="true" src="http://1.bp.blogspot.com/_xBQ2qj-7DXM/TOVlawhXlkI/AAAAAAAAAXk/RXWWc2XzLQQ/s320/psprites.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_xBQ2qj-7DXM/TOVlbngVMGI/AAAAAAAAAXo/QP2syWjYNH4/s1600/sub.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" ox="true" src="http://4.bp.blogspot.com/_xBQ2qj-7DXM/TOVlbngVMGI/AAAAAAAAAXo/QP2syWjYNH4/s320/sub.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Следующий шаг - портирование на OpenGL небольшой DX9-игры с codesampler.com. Также я взял на вооружение исходники Wine, интересно посмотреть, как они реализовали некоторый функционал.&lt;br /&gt;&lt;br /&gt;Затем&amp;nbsp;в качестве&amp;nbsp;пробы пера - компоновка с игровым проектом, над которым мы работаем сейчас. Попробуем хотя бы собраться, а дальше - попытка инициализация device, переход в fullscreen, создание ресурсов. Этого будет достаточно, чтобы признать задумку годной к использованию в следующем проекте.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-4680367227657006198?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/4680367227657006198/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2010/11/directgl-progress_18.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4680367227657006198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4680367227657006198'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2010/11/directgl-progress_18.html' title='DirectGL progress'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TOVlZ9l2k8I/AAAAAAAAAXg/EfUK0k0iCmI/s72-c/rtt.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-8647721910746870860</id><published>2010-11-13T12:28:00.005+02:00</published><updated>2010-12-03T10:33:41.690+02:00</updated><title type='text'>DirectGL progress</title><content type='html'>&lt;strong&gt;&lt;span style="font-size: large;"&gt;С&lt;/span&gt;&lt;/strong&gt;портировал ещё одну демку, которая показывает принцип фильтрации MIP-уровней видеокартой:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_xBQ2qj-7DXM/TN5mZdiE2eI/AAAAAAAAAXc/4sNpF7CAxvQ/s1600/mipmapping.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://4.bp.blogspot.com/_xBQ2qj-7DXM/TN5mZdiE2eI/AAAAAAAAAXc/4sNpF7CAxvQ/s320/mipmapping.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;На codesampler.com есть OpenGL аналог этой D3D9-демки. Там mip-уровни загружаются через glTexImage2D(). Мне необходимо было спортировать функцию D3DXLoadSurfaceFromSurface(), которая, как я подозреваю, вызывает внутри ::StretchRect(). Этот API может нести на себе расширение GL_EXT_framebuffer_blit, которое я и использовал при портировании. Но что-то не заладилось у меня на ноутбуке: нулевые MIP-уровни source текстур не хотели блититься в подходящие MIP-уровни dest текстуры. Вернее, blit шёл всегда в нулевой MIP, как будто бы параметер level игнорируется. Я долго провозился с кодом, но так ничего толкового и не придумал.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Сегодня решил для пробы проверить на стационарном PC с GTX 260 - и всё заработало как надо. Это опять глючит GlukoGL, теперь на ATI :(.&lt;br /&gt;&lt;br /&gt;Update&lt;br /&gt;&lt;br /&gt;Нашёл причину бага на ATI: нужно включить mipmap фильтрацию для текстуры, если хотим блитить в mip-уровень больше 0. Маразм.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-8647721910746870860?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/8647721910746870860/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2010/11/directgl-progress_13.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/8647721910746870860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/8647721910746870860'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2010/11/directgl-progress_13.html' title='DirectGL progress'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_xBQ2qj-7DXM/TN5mZdiE2eI/AAAAAAAAAXc/4sNpF7CAxvQ/s72-c/mipmapping.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1284103224036292113.post-4459559106393188914</id><published>2010-11-10T10:31:00.005+02:00</published><updated>2010-11-18T19:47:40.510+02:00</updated><title type='text'>Atonement</title><content type='html'>&lt;strong&gt;&lt;span style="font-size: large;"&gt;В&lt;/span&gt;&lt;/strong&gt;чера посмотрел этот фильм.&lt;br /&gt;&lt;br /&gt;Удивительно, как я его пропустил и не посмотрел раньше. Это фильм о 13-летней девочке, которая из-за своей глупости и ревности не могла (или не хотела) отличить похоть от любви, а пошлость от страсти, и этим разрушила счастье двух молодых людей. Когда девочка стала 18-летней девушкой, она осознала, что натворила, но ничего исправить уже было нельзя. Она дожила до глубокой старости, неся эту боль внутри и не имея возможности избавиться от неё...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1284103224036292113-4459559106393188914?l=joescg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joescg.blogspot.com/feeds/4459559106393188914/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://joescg.blogspot.com/2010/11/atonement.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4459559106393188914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1284103224036292113/posts/default/4459559106393188914'/><link rel='alternate' type='text/html' href='http://joescg.blogspot.com/2010/11/atonement.html' title='Atonement'/><author><name>Victor Coda</name><uri>http://www.blogger.com/profile/03503860952738621508</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_xBQ2qj-7DXM/TFW9jlOkucI/AAAAAAAAATw/TFwU32S37Xw/S220/Image025.jpg'/></author><thr:total>0</thr:total></entry></feed>
