<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Записки &#187; OpenGL</title>
	<atom:link href="http://blog.nsws.ru/tag/opengl/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.nsws.ru</link>
	<description>Мысли о разработке</description>
	<lastBuildDate>Fri, 26 Aug 2011 07:55:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>С Новым Годом</title>
		<link>http://blog.nsws.ru/s-novym-godom.html</link>
		<comments>http://blog.nsws.ru/s-novym-godom.html#comments</comments>
		<pubDate>Tue, 29 Dec 2009 19:26:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MagicEngine]]></category>
		<category><![CDATA[NYP]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Новости]]></category>
		<category><![CDATA[Проекты]]></category>

		<guid isPermaLink="false">http://blog.nsws.ru/?p=153</guid>
		<description><![CDATA[Вот опять заканчивается один год и начинается новый и, как обычно в это время, я предлагаю вашему вниманию NYP2010.

Всех с Новым  Годом!]]></description>
			<content:encoded><![CDATA[<p>Вот опять заканчивается один год и начинается новый и, как обычно в это время, я предлагаю вашему вниманию NYP2010.</p>
<p>Всех с Новым  Годом!<span id="more-153"></span>Версия NYP, вышедшая в этом году, знаменательна тем, что это мой первый опыт в использовании 3D графики. Новогоднее поздравление базируется на двух движках. Один &#8211; это уже известный вам 2D движок MagicEngine, а второй &#8211; это новинка, 3D движок, который писался с мая текущего года и вот наконец вышло первое приложение, базирующееся на нем. Движок достаточно требователен к ресурсам, т.к. изначально писался ориентируясь на стандарт OpenGL 3.1, а значит отсекались все видеокарты ниже 8-й серии от Nvidia.</p>
<h2>Системные требования</h2>
<p>Для запуска NYP2010 вам потребуется компьютер, удовлетворяющий следующим системным требованиям:</p>
<ul>
<li>Не менее 100 Мб свободной оперативной памяти</li>
<li>Не менее 100 Мб свободных на жестком диске</li>
<li>Видеокарта не хуже NVidia GeForce 6600</li>
<li>Звуковая карта (опционально)</li>
</ul>
<h2>Известные проблемы</h2>
<p>Известно что даже ATI версия NYP2010 не работает на ATI Radeon X1250 других видеокарт данного  производителя у меня нет, поэтому проверить на совместимость неудалось.</p>
<h2>Ссылки</h2>
<ul>
<li><a href="http://blog.nsws.ru/wp-upload/nyp2010-nvidia.exe">Базовая версия(19.7Мб)</a></li>
<li><a href="http://blog.nsws.ru/wp-upload/nyp2010-ati.exe">Версия для пользователей видеокарт ATI(19.7Мб)</a></li>
<li><a href="http://blog.nsws.ru/wp-upload/nyp2010.tar.bz2">Исходные коды (для пользователей Linux)(14.2Мб)</a></li>
</ul>
<h2>Инструкция по сборке</h2>
<p>Для сборки вам потребуются следующие пакеты: glfw, glew, sdl_mixer</p>
<ul>
<li>Распаковать (tar -xjf nyp2010.tar.bz2)</li>
<li>Перейти в каталог nyp2010</li>
<li>make -f Makefile.cvs</li>
<li>./configure</li>
<li>make</li>
<li>cd src/drv</li>
<li>./link.sh</li>
<li>cd ..</li>
<li>набрать ./nyp2010 и помолиться</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.nsws.ru/s-novym-godom.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Использование сжатия текстур в OpenGL</title>
		<link>http://blog.nsws.ru/ispolzovanie-szhatiya-tekstur-v-opengl.html</link>
		<comments>http://blog.nsws.ru/ispolzovanie-szhatiya-tekstur-v-opengl.html#comments</comments>
		<pubDate>Thu, 02 Jul 2009 10:25:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Новости]]></category>

		<guid isPermaLink="false">http://blog.nsws.ru/?p=83</guid>
		<description><![CDATA[Как следствие можно седелать вывод что если у вас есть текстура, которая не теряет в качестве при использовании DXT сжатия, либо теряет его в приемлемых масштабах - то можно получить хороший прирост производительности, использовав DXT сжатие.]]></description>
			<content:encoded><![CDATA[<p>Как известно любые текстуры можно разделить на две категории &#8211; сжатые и несжатые. Сжатые соответственно делятся на два типа сжатия &#8211; looseless и lossy (без потери качества и с потерей качества соответственно.</p>
<p>В современных видео картах есть поддержка нескольких форматов lossy сжатия текстур. Наиболее распростаненный из них &#8211; это формат сжатия DXTn.</p>
<p><span id="more-83"></span></p>
<h2>Немного подробностей.</h2>
<p>Алгоритм сжатия DXT был разработан компанией S3 Graphics, Ltd для видеокарты Savage3D.</p>
<p>Данный алгоритм обладает рядом удобных свойств для его использования в видео картах:</p>
<ul>
<li>Алгоритм обеспечивает фиксированную степень сжатия для любой исходной картинки (8:1 для DXT1 и 4:1 для DXT2-5)</li>
<li>Алгоритм является блочным, он оперирует с блоками 4*4 пикселя исходной картники</li>
</ul>
<p>Даный стандарт описывает только алгоритм распаковки, что позволяет реализовать алгоритм сжатия, который будет подходить для конкретных нужд.</p>
<p>Алгоритмы DXT1-5 отличаются только тем, как в них обрабатывается прозрачность. Обычно для изображений с прозрачностью рекомендуется использовать сжатие DXT5. Сжатие DXT1 не поддерживает прозрачность, либо позволяет задать пиксели с абсолютной прозрачностью</p>
<h2>Сжатие текстур.</h2>
<p>Для сжатия текстур можно использовать либо сторонные утилиты, такие как NVTexTools, либо использовать сжатие сресдствами OpenGL.</p>
<p>Несмотря на то что сжатие текстур средствами OpenGL возможно выполнять во время загрузки делать это не рекомендуется, потомучто процесс сжатия достаточно долог.</p>
<h3>Сжатие средствами OpenGL.</h3>
<p>Для сжатия средствами OpenGL потребуется примерно такой кусок кода:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//Создаем текстуру.  </span>
GLuint texid<span style="color: #339933;">;</span>  
glGenTextures<span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>texid <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
glBindTexture<span style="color: #009900;">&#40;</span>GL_TEXTURE_2D<span style="color: #339933;">,</span> texid<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
glTexImage2D<span style="color: #009900;">&#40;</span>GL_TEXTURE_2D<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> GL_COMPRESSED_RGB_S3TC_DXT1_EXT<span style="color: #339933;">,</span> width<span style="color: #339933;">,</span> height<span style="color: #339933;">,</span> 
<span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> GL_RGB<span style="color: #339933;">,</span> GL_UNSIGNED_BYTE<span style="color: #339933;">,</span> source_texture<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
&nbsp;
<span style="color: #666666; font-style: italic;">//Проверим - смогли ли мы сжать текстуру  </span>
<span style="color: #993333;">int</span> compressed<span style="color: #339933;">;</span>  
glGetTexLevelParameteriv<span style="color: #009900;">&#40;</span>GL_TEXTURE_2D<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> GL_TEXTURE_COMPRESSED_ARB<span style="color: #339933;">,</span> 
<span style="color: #339933;">&amp;</span>compressed<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>compressed <span style="color: #339933;">!=</span> GL_TRUE<span style="color: #009900;">&#41;</span>  
<span style="color: #009900;">&#123;</span>     
 <span style="color: #666666; font-style: italic;">//Сжать текстуру не удалось      </span>
<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span>   
&nbsp;
<span style="color: #666666; font-style: italic;">//Теперь осталось только вытащить текстур и сохранить ее.  </span>
int32_t compressed_size<span style="color: #339933;">;</span>  
glGetTexLevelParameteriv<span style="color: #009900;">&#40;</span>GL_TEXTURE_2D<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> GL_TEXTURE_COMPRESSED_IMAGE_SIZE<span style="color: #339933;">,</span> 
<span style="color: #339933;">&amp;</span>compressed_size<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #993333;">char</span><span style="color: #339933;">*</span> compressed_texture <span style="color: #339933;">=</span> new <span style="color: #993333;">char</span><span style="color: #009900;">&#91;</span>compressed_size<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>  
glGetCompressedTexImage<span style="color: #009900;">&#40;</span>GL_TEXTURE_2D<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> img<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>После сжатия стоит сохранить результирующий формат сжатия, размеры текстуры.</p>
<h3>Загрузка сжатой текстуры.</h3>
<p>Для работы со сжатыми текстурами в OpenGL предусмотрена дополнительная функция: glCompressedTexImage . Справку по ее параметрам вы сможете получить в документации на OpenGL а я приведу пример использвания ее для загрузки сжатой текстуры:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">glGenTextures<span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>_tex_id_ <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
glBindTexture <span style="color: #009900;">&#40;</span> GL_TEXTURE_2D<span style="color: #339933;">,</span> _tex_id_ <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
glCompressedTexImage2D <span style="color: #009900;">&#40;</span> GL_TEXTURE_2D<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> GL_TEXTURE_COMPRESSED_ARB<span style="color: #339933;">,</span> width<span style="color: #339933;">,</span> height<span style="color: #339933;">,</span> 
<span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> texture_size<span style="color: #339933;">,</span> texture_pointer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Надо отметить что для текстур DXTn размер не может быть меньше чем 4*4 пикселя.</p>
<h2>Тестирование скорости рендеринга с DXTn</h2>
<p>Реализовав поддержку сжатых текстур мне захотелось узнать какой прирост производительности дает их использование. Найти аналогичную информацию, на стадии анализа необходимости реализации данной поддержки, я не смог.</p>
<p>Для тестирования использовалась RGB текстура размером 1024*1024. Она была сохранена в нескольких форматах: RGB8, RGB5, R3_G3_B2. Для каждой текстуры проводилось 2 замера:  в ситуации когда объект (модель с 7к полигонами) занимает меньше 10% экрана и в ситуации когда объект занимает около 50% экрана.</p>
<p>Рассчет FPS производился раз в 10000 кадров. Среднее выходное значение округлялось до 100.</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td rowspan="2" width="128" valign="top"><strong>Формат текстуры</strong></td>
<td colspan="2" width="134" valign="top"><strong>10% заполнение</strong></td>
<td colspan="2" width="134" valign="top"><strong>50% заполнение</strong></td>
</tr>
<tr>
<td width="54" valign="top"><strong>FPS</strong></td>
<td width="79" valign="top"><strong>%</strong></td>
<td width="49" valign="top"><strong&gt;FPS</strong></td>
<td width="84" valign="top"><strong>%</strong></td>
</tr>
<tr>
<td width="128" valign="top">DXT1</td>
<td width="54" valign="top">5000</td>
<td width="79" valign="top"></td>
<td width="49" valign="top">4100</td>
<td width="84" valign="top"></td>
</tr>
<tr>
<td width="128" valign="top">RGB8</td>
<td width="54" valign="top">5000</td>
<td width="79" valign="top">0</td>
<td width="49" valign="top">3400</td>
<td width="84" valign="top">-17%</td>
</tr>
<tr>
<td width="128" valign="top">RGB4</td>
<td width="54" valign="top">5000</td>
<td width="79" valign="top">0</td>
<td width="49" valign="top">3900</td>
<td width="84" valign="top">-4.8%</td>
</tr>
<tr>
<td width="128" valign="top">R3_G3_B2</td>
<td width="54" valign="top">5000</td>
<td width="79" valign="top">0</td>
<td width="49" valign="top">4100</td>
<td width="84" valign="top">0</td>
</tr>
</tbody>
</table>
<p>Как следствие можно седелать вывод что если у вас есть текстура, которая не теряет в качестве при использовании DXT сжатия, либо теряет его в приемлемых масштабах &#8211; то можно получить хороший прирост производительности, использовав DXT сжатие.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nsws.ru/ispolzovanie-szhatiya-tekstur-v-opengl.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

