Технологии создания многоплатформенного игрового...

Preview:

DESCRIPTION

Технологии создания многоплатформенного игрового движка. Максим Строев. Темы обсуждения. Классификация платформ Обзор средств разработки Обзор аппаратных особенностей Особенности представления графических и звуковых данных. Темы обсуждения. Поддержка компиляторами стандарта С++ - PowerPoint PPT Presentation

Citation preview

Технологии создания Технологии создания многоплатформенного многоплатформенного

игрового движкаигрового движка

Максим СтроевМаксим Строев

2КРИ 2004

Темы обсужденияТемы обсуждения

Классификация платформКлассификация платформ Обзор средств разработкиОбзор средств разработки Обзор аппаратных особенностейОбзор аппаратных особенностей Особенности представления Особенности представления

графических и звуковых данныхграфических и звуковых данных

3КРИ 2004

Темы обсужденияТемы обсуждения

Поддержка компиляторами Поддержка компиляторами стандарта С++стандарта С++

Правила кодированияПравила кодирования Статический и динамический Статический и динамический

полиморфизмполиморфизм Применение механизма свойств Применение механизма свойств

((traits) traits) при создании при создании многоплатформенных библиотекмногоплатформенных библиотек

4КРИ 2004

Классификация Классификация платформплатформ

Игровые платформыИгровые платформы PC, Playstation, Xbox, GameCubePC, Playstation, Xbox, GameCube и т.д. и т.д. Наличие мощных аппаратных Наличие мощных аппаратных

графических и звуковых подсистемграфических и звуковых подсистем Наличие специализированного Наличие специализированного APIAPI

для создания игрдля создания игр

5КРИ 2004

Классификация Классификация платформплатформ

Универсальные платформыУниверсальные платформы PDA (PocketPC, Palm)PDA (PocketPC, Palm) Отсутствие Отсутствие API API для создание игрдля создание игр Сложность реализации Сложность реализации

высококачественного вывода графики высококачественного вывода графики и звукаи звука

6КРИ 2004

Обзор средств Обзор средств разработкиразработки

GCC/EGCSGCC/EGCS Стандартизированность использованияСтандартизированность использования Богатый вспомогательный Богатый вспомогательный

инструментарийинструментарий Хорошая поддержка С/С++ Хорошая поддержка С/С++

(исключение: (исключение: EGCS)EGCS) Бесплатность и открытость развитияБесплатность и открытость развития Плохое тестирование и слабые Плохое тестирование и слабые

оптимизационные возможности для оптимизационные возможности для «непопулярных» платформ«непопулярных» платформ

7КРИ 2004

Обзор средств Обзор средств разработкиразработки

RedHat GNUPro RedHat GNUPro Developer ToolsDeveloper Tools Стабильность разработки и Стабильность разработки и

тестированиятестирования Стандартизованность использованияСтандартизованность использования Богатый вспомогательный Богатый вспомогательный

инструментарийинструментарий Поддержка большого количества Поддержка большого количества

embedded embedded системсистем Высокая стоимость тех. поддержки Высокая стоимость тех. поддержки

RedHatRedHat и обновлений и обновлений

8КРИ 2004

Обзор средств Обзор средств разработкиразработки

Metrowerks CodeWarriorMetrowerks CodeWarrior Development StudioDevelopment Studio Хорошая поддержка С/С++Хорошая поддержка С/С++ Специфическая среда разработкиСпецифическая среда разработки КоммерческийКоммерческий

9КРИ 2004

Обзор средств Обзор средств разработкиразработки

Microsoft eMbedded Visual C++Microsoft eMbedded Visual C++ Плохая поддержка языка С++Плохая поддержка языка С++ Специфическая среда разработки (но: Специфическая среда разработки (но:

поддержка поддержка makefile)makefile)

10КРИ 2004

Обзор аппаратных Обзор аппаратных особенностейособенностей

Что следует учитывать при Что следует учитывать при разработке?разработке?

Endianess (big-endian, little-endian)Endianess (big-endian, little-endian) Запись бинарных данных в одном Запись бинарных данных в одном endianendian, ,

чтение на платформе с другимчтение на платформе с другим

11КРИ 2004

Обзор аппаратных Обзор аппаратных особенностейособенностей

Что следует учитывать при Что следует учитывать при разработке?разработке?

Endianess (big-endian, little-endian)Endianess (big-endian, little-endian) Запись бинарных данных в одном Запись бинарных данных в одном endianendian, ,

чтение на платформе с другимчтение на платформе с другим Разрядность фундаментальных типов Разрядность фундаментальных типов

данных С++данных С++

12КРИ 2004

Обзор аппаратных Обзор аппаратных особенностейособенностей

Что следует учитывать при Что следует учитывать при разработке?разработке?

Endianess (big-endian, little-endian)Endianess (big-endian, little-endian) Запись бинарных данных в одном Запись бинарных данных в одном endianendian, ,

чтение на платформе с другимчтение на платформе с другим Разрядность фундаментальных типов Разрядность фундаментальных типов

данных С++данных С++ Выравнивание (Выравнивание (alignment)alignment)

Требования и рекомендацииТребования и рекомендации NaturalNatural alignment requirements alignment requirements

13КРИ 2004

Особенности Особенности представления представления

графических и звуковых графических и звуковых данныхданныхПредставление:Представление:

внутренниевнутренние внешнеевнешнее

Внутренние представление:Внутренние представление: «рефлексивное» представление«рефлексивное» представление внешнее описание прозрачностивнешнее описание прозрачности

14КРИ 2004

Статический и Статический и динамический динамический полиморфизмполиморфизм

Динамический полиморфизмДинамический полиморфизм Механизмы наследования и Механизмы наследования и

виртуальных функцийвиртуальных функций Тип выражения определяется во Тип выражения определяется во

время исполнениявремя исполнения

15КРИ 2004

Статический и Статический и динамический динамический полиморфизмполиморфизм

Статический полиморфизмСтатический полиморфизм Параметризация одного типа другимПараметризация одного типа другим Реализуется на этапе компиляцииРеализуется на этапе компиляции Специализация шаблоновСпециализация шаблонов

Почему важен?Почему важен?На этапе компиляции известны типы На этапе компиляции известны типы реализаций для целевой платформы.реализаций для целевой платформы.

16КРИ 2004

Механизм свойств Механизм свойств ((traits)traits)

Свойства (Свойства (traitstraits) являются множеством ) являются множеством связанных типов и функций для применения связанных типов и функций для применения данных типов.данных типов.

Как это работает?Как это работает?

17КРИ 2004

Механизм свойств Механизм свойств ((traits)traits)

Использование типов-тэгов для Использование типов-тэгов для определения платформы.определения платформы.// File: Windows_platform.hstruct win32_platform_tag{};

typedef win32_platform_tag current_platform_tag;

// File: WindowsCE_platform.hstruct win32_ce_platform_tag{};

typedef win32_ce_platform_tag current_platform_tag;

18КРИ 2004

Механизм свойств Механизм свойств ((traits)traits)

Реализация класса Реализация класса MutexMutex для нескольких платформ для нескольких платформ c c применением применением динамическогодинамического полиморфизма. полиморфизма.

struct general_mutex{

virtual bool acquire() = 0 ; 0virtual bool release() = ;

};struct windows_mutex : public general_mutex{

virtualboolacquire(){ … } virtual bool release() { … }

};

general_mutex* create(){

# ( _ ==3 2 ) return new windows_mutex;

#endif}

19КРИ 2004

Механизм свойств Механизм свойств ((traits)traits)

Недостатки:Недостатки: Необходимость «фабрики реализаций»Необходимость «фабрики реализаций» Потеря оптимизации из-за наличия Потеря оптимизации из-за наличия

виртуальных вызововвиртуальных вызовов Ограничение предоставляемых Ограничение предоставляемых

возможностей объявленным возможностей объявленным интерфейсом интерфейсом

Отсутствие необходимости в Отсутствие необходимости в динамическом полиморфизме динамическом полиморфизме

Реализация класса Реализация класса MutexMutex для нескольких платформ для нескольких платформ c c применением применением динамическогодинамического полиморфизма. полиморфизма.

20КРИ 2004

Механизм свойств Механизм свойств ((traits)traits)

Реализация класса Реализация класса MutexMutex для нескольких для нескольких платформплатформ c c применением применением статическогостатического полиморфизма.полиморфизма. template <typename platform>

struct mutex_traits {};

// File: windows_mutex.h template <>

struct mutex_traits<win32_platform_tag>{

typedef HANDLE handle_type;

static handle_type invalid_value() { return NULL; }

static handle_type create() { … } static bool destroy(handle_type handle) { … } static bool acquire(handle_type handle) { … } static bool release(handle_type handle) { … }

};

21КРИ 2004

Механизм свойств Механизм свойств ((traits)traits)

Реализация класса Реализация класса MutexMutex для нескольких для нескольких платформплатформ c c применением применением статическогостатического полиморфизма.полиморфизма.// File: Mutex.h

template <typename Tr> class mutex_holder

{ typedef Tr::handle_type handle_type;

handle_type handle;public:

mutex() : handle(Tr::create()) { ASSERT (handle ! =Tr::invalid_value()); }

~ mutex() { Tr::destroy(handle); } bool acquire() { return Tr:: acquire(handle); } bool release() { return Tr:: release(handle); }

};

typedef mutex_holder< mutex_traits<current_platform_tag> > mutex;

Recommended