<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Linux Forum &mdash; Valve и Nvidia представили доклад о портировании игр под Linux]]></title>
		<link>https://linuxforum.ru/viewtopic.php?id=27659</link>
		<atom:link href="https://linuxforum.ru/extern.php?action=feed&amp;tid=27659&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Valve и Nvidia представили доклад о портировании игр под Linux».]]></description>
		<lastBuildDate>Sat, 06 Apr 2013 18:37:51 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Valve и Nvidia представили доклад о портировании игр под Linux]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=338736#p338736</link>
			<description><![CDATA[<p>С интересом прочитал, радующая информация.</p>]]></description>
			<author><![CDATA[null@example.com (AnKar)]]></author>
			<pubDate>Sat, 06 Apr 2013 18:37:51 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=338736#p338736</guid>
		</item>
		<item>
			<title><![CDATA[Valve и Nvidia представили доклад о портировании игр под Linux]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=338648#p338648</link>
			<description><![CDATA[<p>На конференции разработчиков игр (Game Developers Conference - GDC), компании Valve и Nvidia выступили с докладом, посвящённым портированию игр под Linux. Презентация с данного мероприятия <a href="https://developer.nvidia.com/sites/default/files/akamai/gamedev/docs/Porting%20Source%20to%20Linux.pdf">доступна</a> на сайте Nvidia.</p><p>Наиболее интересные моменты:</p><ul><li><p>В качестве мотивов почему следует портировать игры на Linux, упоминаются:<br /></p><ul><li><p>Открытость операционной системы Linux и экосистемы.</p></li><li><p>Довольно быстрый рост популярности Linux в качестве игровой платформы.</p></li><li><p>Логичный промежуточный шаг при портировании игр на мобильные платформы, где также доминируют стандарты семейства OpenGL</p></li><li><p>Производительность.</p></li><li><p>Под Linux официально доступен Steam.</p></li><li><p>OpenGL предоставляет доступ к возможностям оборудования, оперируя при этом сугубо возможностями оборудования, а не версиями ОС или чем-либо ещё. В частности, в Китае в данный момент все ещё очень много пользователей с ОС семейства Windows XP, которые не могут пользоваться Direct3D 10/11. Тем не менее, при использовании OpenGL будут доступны полные возможности оборудования, в том числе и в данной версии ОС. Это позволит использовать возможности современного оборудования даже указанным пользователям.</p></li><li><p>Публично доступные спецификации стандарта.</p></li><li><p>Спецификации развиваются комитетом, в котором может принять участие любая заинтересованная сторона, для этого не требуются огромные суммы денег.</p></li><li><p>OpenGL проще расширять, любой вендор может предложить свои расширения.</p></li><li><p>OpenGL очень богат по своим возможностям.</p></li></ul></li><li><p>Для управления окнами настоятельно рекомендуют использовать SDL, относительно небольшую и кроссплатформенную библиотеку на Си. SDL берет на себя все что касается работы с окнами, независимо от ОС, в том числе и на мобильных платформах. Valve пользуется данной библиотекой при портировании своих проектов, что доказывает пригодность библиотеки для достаточно требовательных применений. Кроме того, основной разработчик libsdl в настоящее время работает в Valve.</p></li><li><p>Проблемы с которыми столкнулись в Valve:<br /></p><ul><li><p>Файловые системы в unix-подобных ОС по умолчанию чувствительны к регистру имён файлов, тогда как в Windows файловые системы по умолчанию игнорируют регистр. Для игр это, как правило, не является проблемой так как игровые ресурсы обычно поставляются в платформо-нейтральных контейнерах. Тем не менее, в процессе разработки это может быть проблемой. Наиболее простым решением является перевести имена всех ресурсов в нижний регистр.</p></li><li><p>Ошибочные define&#039;ы, например предполагающие, что на Linux может быть только выделенный игровой сервер и более ничего.</p></li><li><p>Проблемы с локалью могут вызывать проблемы в функциях printf/scanf. Решение: установить локалью en_US.utf8, а локализацию предоставить самому приложению. Так как в некоторых случаях локаль en_US.utf8 в системе может отсутствовать, следует предусмотреть вывод предупреждения в данном случае.</p></li><li><p>Шрифты: рекомендуется использовать библиотеки freetype и fontconfig. Тем не менее, может потребоваться пересчёт размера шрифтов.</p></li><li><p>Использование RDTSC (прецизионный таймер, основанный на счётчике тактов современных CPU х86). Вместо него рекомендуется использовать вызов clock_gettime(CLOCK_MONOTONIC), не зависящий от архитектуры процессора.</p></li><li><p>Использование raw mouse input, когда весь ввод мыши монопольно отправляется одной программе. Это очень хорошо работает для игр, однако некоторые оконные менеджеры при этом также перенаправляют и весь клавиатурный ввод. Это, в частности, может отключить работу alt-tab или аналогичных по смыслу горячих клавиш для переключения задач, что способно вызвать неудовольствие пользователей в некоторых ситуациях.</p></li><li><p>Более шероховатая поддержка многомониторных конфигураций. Тем не менее, libsdl способна взять бОльшую часть проблем на себя.</p></li></ul></li><li><p>Инструментарий:<br /></p><ul><li><p>Steam Linux Runtime и SDK предоставляют разработчикам игр ABI, не зависящий от дистрибутива.</p></li><li><p>Компилирование и отладка:<br /></p><ul><li><p>gcc - для компилирования.</p></li><li><p>gdb - для отладки.</p></li><li><p>cgdb - интерфейс на основе curses</p></li><li><p>ldd - отслеживание зависимостей бинарного файла от библиотек (эквивалент dumpbin).</p></li><li><p>nm - предоставляет информацию о символах, используемых программой.</p></li><li><p>objdump - дизассемблер и инструмент для просмотра подробных деталей о бинарных файлах.</p></li><li><p>readelf - инструмент для получения подробной информации об ELF файлах (основной формат исполняемых файлов в Linux).</p></li><li><p>make - средство сборки проекта.</p></li></ul></li><li><p>Анализ производительности - CPU:<br /></p><ul><li><p>perf - свободный профайлер под Linux, использующий <a href="https://perf.wiki.kernel.org/index.php/Main_Page">performance counters</a> современных процессоров</p></li><li><p>vtune - инструмент от компании Intel, также существующий и в версии под Linux.</p></li><li><p>Telemetry - многие коммерческие разработчики игр уже и так используют данный инструментарий.</p></li></ul></li></ul></li><li><p>Примерное соответствие OpenGL и Direct3D:<br /></p><ul><li><p>Direct3D 9 примерно соответствует возможностям OpenGL2. Начиная с этой версии доступны шейдеры.</p></li><li><p>Direct3D 10 примерно соответствует семейству OpenGL3, появилось более актуальное API. Реализованы геометрические шейдеры.</p></li><li><p>Direct3D 11 примерно соответствует OpenGL4. Поддержка тесселяции и произвольных вычислений на шейдерах.</p></li></ul></li><li><p>Ключевые отличия Direct3D от OpenGL с точки зрения разработчика:<br /></p><ul><li><p>В OpenGL у потоков есть локальные данные, поэтому:<br /></p><ul><li><p>У потока может быть только один текущий контекст.</p></li><li><p>Контекст может являться текущим только для одного потока.</p></li><li><p>Вызовы в OpenGL из потока без текущего контекста согласно спецификации не должны иметь никакого эффекта.</p></li></ul></li><li><p>OpenGL основан на Си. Объекты передаются хэндлами.<br /></p><ul><li><p>Многие функции вообще не требуют указания хэндла и оперируют на выбранном в данный момент объекте.</p></li><li><p>Как правило хэндл имеет тип GLuint.</p></li></ul></li><li><p>OpenGL поддерживает расширения.</p></li><li><p>Несмотря на то что OpenGL довольно многословен и на первый взгляд требует больше вызовов, он показывает впечатляющую эффективность и производительность.<br />В OpenGL отсуствуют проблемы с потерей устройств.</p></li></ul></li><li><p>Расширения OpenGL:<br /></p><ul><li><p>Есть специфичные для поставщиков расширения с префиксами NV|AMD|APPLE. Тем не менее, ряд из них был реализован сразу несколькими поставщиками. Например, NV_bindless_texture.</p></li><li><p>Расширения с префиксом EXT реализуются сразу многими поставщиками. Например, EXT_separate_shader_objects</p></li><li><p>Расширения с префиксом ARB были рассмотрены и приняты комитетом развивающим стандарт. Например, ARB_multitexture.</p></li><li><p>Базовые расширения (Core extensions): базовые возможности из более поздних версий стандартов OpenGL представляются как расширения относительно прошлой версии стандарта.</p></li><li><p>Есть зависящие от специфики платформы расширения: WGL, GLX, AGL и EGL.</p></li></ul></li><li><p>Советы разработчикам:<br /></p><ul><li><p>Поиск в интернете имеет смысл делать как с префиксом GL_ или gl у соответствующего вызова так и без него.</p></li><li><p>Чтение спецификаций стандарта себя оправдывает многократно.</p></li><li><p>Если вам не нравится текущее направление развития OpenGL, присоединитесь к Khronos Group и постарайтесь оказать влияние на развитие стандарта. Лучше всего определять свое будущее самому.</p></li><li><p>Core vs Compatibility: Некоторые производители утверждают что использование core-профайлов будет быстрее чем compat-, однако по факту подтверждение данного тезиса обнаружить не удалось. Поэтому можно пользоваться тем, что проще и удобнее конкретному разработчику. * Наиболее полезные расширения OpenGL по мнению разработчиков: EXT_direct_state_access, EXT_swap_interval (и EXT_swap_control_tear), ARB_debug_output, ARB_texture_storage и ARB_sampler_objects. Кроме того отмечаются NVX_gpu_memory_info и GL_ATI_meminfo позволяющие получить информацию о использовании памяти GPU.</p></li></ul></li><li><p>Самые проблематичные места в плане производительности:<br /></p><ul><li><p>Вызов MakeCurrent очень дорогой. Следует избегать его вызова даже 1 раз на кадр.</p></li><li><p>Современные драйвера как правило используют более 1 потока. Программа по факту взаимодействует с относительно тонкой прослойкой которая может распределять работу на несколько потоков. Некоторые вызовы заставляют производить полный сброс буферов и ресинхронизацию между потоками что сильно просаживает скорость операций.</p></li><li><p>Наиболее проблемными оказались функции glGet() и glGetError() (вместо этой функции рекомендуется использовать ARB_debug_output)</p></li></ul></li></ul><p>Источник: <a href="http://www.opennet.ru/opennews/art.shtml?num=36597">http://www.opennet.ru/opennews/art.shtml?num=36597</a></p>]]></description>
			<author><![CDATA[null@example.com (Rizado)]]></author>
			<pubDate>Sat, 06 Apr 2013 06:37:53 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=338648#p338648</guid>
		</item>
	</channel>
</rss>
