21
Технологии создания Технологии создания многоплатформенного многоплатформенного игрового движка игрового движка Максим Максим Строев Строев

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

  • Upload
    faye

  • View
    64

  • Download
    1

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Технологии создания многоплатформенного игрового движка

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

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

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

Page 2: Технологии создания многоплатформенного игрового движка

2КРИ 2004

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

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

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

Page 3: Технологии создания многоплатформенного игрового движка

3КРИ 2004

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

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

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

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

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

Page 4: Технологии создания многоплатформенного игрового движка

4КРИ 2004

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

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

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

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

Page 5: Технологии создания многоплатформенного игрового движка

5КРИ 2004

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

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

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

Page 6: Технологии создания многоплатформенного игрового движка

6КРИ 2004

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

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

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

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

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

Page 7: Технологии создания многоплатформенного игрового движка

7КРИ 2004

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

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

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

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

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

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

Page 8: Технологии создания многоплатформенного игрового движка

8КРИ 2004

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

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

Page 9: Технологии создания многоплатформенного игрового движка

9КРИ 2004

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

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

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

Page 10: Технологии создания многоплатформенного игрового движка

10КРИ 2004

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

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

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

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

Page 11: Технологии создания многоплатформенного игрового движка

11КРИ 2004

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

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

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

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

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

Page 12: Технологии создания многоплатформенного игрового движка

12КРИ 2004

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

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

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

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

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

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

Page 13: Технологии создания многоплатформенного игрового движка

13КРИ 2004

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

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

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

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

Page 14: Технологии создания многоплатформенного игрового движка

14КРИ 2004

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

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

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

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

Page 15: Технологии создания многоплатформенного игрового движка

15КРИ 2004

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

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

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

Page 16: Технологии создания многоплатформенного игрового движка

16КРИ 2004

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

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

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

Page 17: Технологии создания многоплатформенного игрового движка

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;

Page 18: Технологии создания многоплатформенного игрового движка

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}

Page 19: Технологии создания многоплатформенного игрового движка

19КРИ 2004

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

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

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

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

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

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

Page 20: Технологии создания многоплатформенного игрового движка

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) { … }

};

Page 21: Технологии создания многоплатформенного игрового движка

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;