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

Презентация:



Advertisements
Похожие презентации
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Advertisements

Полиморфизм. Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Технология MVC в высоконагруженных проектах Андрей Шетухин Илья Космодемьянский.
Лекция 22. Шаблоны (часть 2) Красс Александр СПбГУ ИТМО, 2008.
Объектно-ориентированное программирование С++. Лекция 8 Карпов В.Э.
Оценка уровня безопасности Тестировщики Подтверждение свойств и качества. Рекомендации по доработке Методика проверки Определение Условий эксплуатации.
Вперёд ЯЗЫКИ ПРОГРАММИРОВАНИЯ ЦЕЛИ: ЦЕЛИ: 1. Средство для задания действий, которые должны быть выполнены машиной.(Машинный язык) 1. Средство для задания.
Методология объектно- ориентированного программирования.
Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
Применение технологии виртуальных миров при построении интерактивных обучающих систем Самарский государственный аэрокосмический университет имени академика.
Объектно-ориентированный подход в языке C#. Класс в языке C# - ссылочный тип, определенный пользователем. Для классов ЯП C# допустимо только единичное.
Разработка аппаратно-программных средств имитационного комплекса моделирования микропроцессора Выполнил: студент 515 группы МФТИ Иванов С.С Научный руководитель:
Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
Обзор операционных систем ВОУНБ им. М. Горького «Операционная система - это совокупность программ, обеспечивающих управление процессом обработки информации.
Разработка программного обеспечения для сигнальных процессоров TMS320C64xx в IDE Code Composer Studio Часть I. Основные возможности среды разработки CCS.
OpenGL и Direct3D сравнение стандартов Выполнил: Пенкин А. Группа И-204.
Нововведения в C++11 Докладывает: Сорокина Маргарита.
Лекция 9 Приведение типов. Классификация типов Типы С++ Пользовательские Встроенные (Фундаментальные) Адресные Арифтметические void Указатели Ссылки Массивы.
Высокоуровневые методы информатики и программирования Лекция 14 Интерфейсы.
Транксрипт:

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

2КРИ 2004 Темы обсуждения Классификация платформ Классификация платформ Обзор средств разработки Обзор средств разработки Обзор аппаратных особенностей Обзор аппаратных особенностей Особенности представления графических и звуковых данных Особенности представления графических и звуковых данных

3КРИ 2004 Темы обсуждения Поддержка компиляторами стандарта С++ Поддержка компиляторами стандарта С++ Правила кодирования Правила кодирования Статический и динамический полиморфизм Статический и динамический полиморфизм Применение механизма свойств (traits) при создании многоплатформенных библиотек Применение механизма свойств (traits) при создании многоплатформенных библиотек

4КРИ 2004 Классификация платформ Игровые платформы PC, Playstation, Xbox, GameCube и т.д. PC, Playstation, Xbox, GameCube и т.д. Наличие мощных аппаратных графических и звуковых подсистем Наличие мощных аппаратных графических и звуковых подсистем Наличие специализированного API для создания игр Наличие специализированного API для создания игр

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

6КРИ 2004 Обзор средств разработки GCC/EGCS Стандартизированность использования Стандартизированность использования Богатый вспомогательный инструментарий Богатый вспомогательный инструментарий Хорошая поддержка С/С++ (исключение: EGCS) Хорошая поддержка С/С++ (исключение: EGCS) Бесплатность и открытость развития Бесплатность и открытость развития Плохое тестирование и слабые оптимизационные возможности для «непопулярных» платформ Плохое тестирование и слабые оптимизационные возможности для «непопулярных» платформ

7КРИ 2004 Обзор средств разработки RedHat GNUPro Developer Tools Стабильность разработки и тестирования Стабильность разработки и тестирования Стандартизованность использования Стандартизованность использования Богатый вспомогательный инструментарий Богатый вспомогательный инструментарий Поддержка большого количества embedded систем Поддержка большого количества embedded систем Высокая стоимость тех. поддержки RedHat и обновлений Высокая стоимость тех. поддержки RedHat и обновлений

8КРИ 2004 Обзор средств разработки Metrowerks CodeWarrior Development Studio Хорошая поддержка С/С++ Хорошая поддержка С/С++ Специфическая среда разработки Специфическая среда разработки Коммерческий Коммерческий

9КРИ 2004 Обзор средств разработки Microsoft eMbedded Visual C++ Плохая поддержка языка С++ Плохая поддержка языка С++ Специфическая среда разработки (но: поддержка makefile) Специфическая среда разработки (но: поддержка makefile)

10КРИ 2004 Обзор аппаратных особенностей Что следует учитывать при разработке? Endianess (big-endian, little-endian) Endianess (big-endian, little-endian) Запись бинарных данных в одном endian, чтение на платформе с другим Запись бинарных данных в одном endian, чтение на платформе с другим

11КРИ 2004 Обзор аппаратных особенностей Что следует учитывать при разработке? Endianess (big-endian, little-endian) Endianess (big-endian, little-endian) Запись бинарных данных в одном endian, чтение на платформе с другим Запись бинарных данных в одном endian, чтение на платформе с другим Разрядность фундаментальных типов данных С++ Разрядность фундаментальных типов данных С++

12КРИ 2004 Обзор аппаратных особенностей Что следует учитывать при разработке? Endianess (big-endian, little-endian) Endianess (big-endian, little-endian) Запись бинарных данных в одном endian, чтение на платформе с другим Запись бинарных данных в одном endian, чтение на платформе с другим Разрядность фундаментальных типов данных С++ Разрядность фундаментальных типов данных С++ Выравнивание (alignment) Выравнивание (alignment) Требования и рекомендации Требования и рекомендации Natural alignment requirements Natural alignment requirements

13КРИ 2004 Особенности представления графических и звуковых данных Представление: внутренние внутренние внешнее внешнее Внутренние представление: «рефлексивное» представление «рефлексивное» представление внешнее описание прозрачности внешнее описание прозрачности

14КРИ 2004 Статический и динамический полиморфизм Динамический полиморфизм Механизмы наследования и виртуальных функций Механизмы наследования и виртуальных функций Тип выражения определяется во время исполнения Тип выражения определяется во время исполнения

15КРИ 2004 Статический и динамический полиморфизм Статический полиморфизм Параметризация одного типа другим Параметризация одного типа другим Реализуется на этапе компиляции Реализуется на этапе компиляции Специализация шаблонов Специализация шаблонов Почему важен? На этапе компиляции известны типы реализаций для целевой платформы.

16КРИ 2004 Механизм свойств (traits) Свойства (traits) являются множеством связанных типов и функций для применения данных типов. Как это работает?

17КРИ 2004 Механизм свойств (traits) Использование типов-тэгов для определения платформы. // File: Windows_platform.h struct win32_platform_tag { }; typedef win32_platform_tag current_platform_tag ; // File: WindowsCE_platform.h struct win32_ce_platform_tag { }; typedef win32_ce_platform_tag current_platform_tag ;

18КРИ 2004 Механизм свойств (traits) Реализация класса Mutex для нескольких платформ c применением динамического полиморфизма. struct general_mutex { virtual bool acquire() = 0; virtual bool release() = 0; }; struct windows_mutex : public general_mutex { virtual bool acquire() { … } virtual bool release() { … } }; general_mutex* create() { #if (CURRENT_PLATFORM == WIN32) return new windows_mutex; #endif }

19КРИ 2004 Механизм свойств (traits) Недостатки: Необходимость «фабрики реализаций» Необходимость «фабрики реализаций» Потеря оптимизации из-за наличия виртуальных вызовов Потеря оптимизации из-за наличия виртуальных вызовов Ограничение предоставляемых возможностей объявленным интерфейсом Ограничение предоставляемых возможностей объявленным интерфейсом Отсутствие необходимости в динамическом полиморфизме Отсутствие необходимости в динамическом полиморфизме Реализация класса Mutex для нескольких платформ c применением динамического полиморфизма.

20КРИ 2004 Механизм свойств (traits) Реализация класса Mutex для нескольких платформ c применением статического полиморфизма. template struct mutex_traits {}; // File: windows_mutex.h template struct mutex_traits { 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) Реализация класса Mutex для нескольких платформ c применением статического полиморфизма. // File: Mutex.h template 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;