На главную SpbMap

Разработка игр для Series 60 платформы.
Часть 5.7 - Графика. Аппаратное Ускорение



Series 60 Developer Platform 2.0 (Symbian OS 7.0) поддерживает не зависящее от устройства API, реализующий поддержку аппаратного ускорения 2D графики. Поддержка акселерации графики встроена в существующий Graphics API, таким образом, само приложение не знает о том, что использует ускорение.

API аппаратного ускорения представляет собой набор операций, которые выполняются либо аппаратными средствами (например, отдельным графическим процессором), либо программным способом (оптимизированные алгоритмы для работы с графикой). Приложение не знает, поддерживается ли устройством аппаратное ускорение или используется его программная реализация. Для программы это не имеет значения.

В дополнение к Графическому API, API аппаратного ускорения 2D графики реализует следующие функциональные возможности и концепции:

  • Аппаратные изображения (RHardwareBitmap). CFbsBitmap дополнен методами CreateHardwareBitmap и HardwareBitmapHandle. RHardwareBitmap реализует интерфейс для создания аппаратных изображений вашей среды.
  • Маски, прозрачность, альфа смешение и bit blit (TGopBitBltMasked, TGopBitBltTransparent, TGopBitBltAlphaBitmap, TGopBitBltAlphaChannel, TgopBitBlt.)
  • Масштабируемость (TGopScaledBitBltAlphaBitmap, TGopScaledBitBltAlphaChannel, TGopScaledBitBlt, TGopScaledBitBltMasked, TgopScaledBitBltTransparent.)
  • Эффект постепенного изменения для заданной области (TGopFadeRect, TgopFadeParams.)
  • Заполнение полигонов одним цветом или образцом. (TGopFilledPolygon, TgopFilledPolygonWithPattern.)
  • Заполнение прямоугольников одним цветом, образцом или с использованием поразрядных операций. (TGopFilledRect, TGopFilledRectWithPattern, TgopFilledRectUsingDrawMode.)

Вышеописанные операции реализуются с помощью двух классов, являющихся потомками абстрактного класса CGraphicsAccelerator.

  • CHardwareGraphicsAccelerator: Позволяет работать с RHarwareBitmap. В зависимости от устройства используются или аппаратные, или программные реализации, или смешанный вариант.
  • CSoftwareGraphicsAccelerator: Обеспечивает выполнение описанных операций неаппаратным средствам CFbsBitmap.

Каждая TGop* операция выполняется методами CGraphicsAccelerator::Operation. Вы можете выполнить либо одну операцию, либо последовательность операций, составив из список, для реализации предопределенного эффекта.

Замечание. Некоторые операции могут оказаться недоступными или доступными с ограничениями. Перед тем как их использовать, необходимо выполнить с помощью CGraphicsAccelerator::Capabilities проверку.

Ниже приведен пример операции bit blit.

void CMyGameView::MyHwBlitL(CFbsBitmap* iMySourceBitmap)
     {
     CFbsBitmap* iMyBitmap = new (ELeave) CFbsBitmap();
     CleanupStack::PushL(iMyBitmap);
     iMyBitmap->CreateHardwareBitmap(Rect().Size(), EColor64K, KUidMyGameApp);
     // Используется 16-битная палитра
     // Создаем с помощью fbsbitmap аппаратное изображение
     RHardwareBitmap iMyHwBitmap(iMyBitmap->HardwareBitmapHandle());
     // Создаем ускоритель для аппаратного изобрпжения
     CHardwareGraphicsAccelerator* iMyHwAccel =
     CHardwareGraphicsAccelerator::NewL(iMyHwBitmap);
     // Создаем bit blit операцию.
     TGopBitBlt myBlitOperation(TPoint(0, 0), // Адресат
     TAcceleratedBitmapSpec(iMySourceBitmap), // Источник
     // Область с источником
     TRect(0, 0, 40, 40) );
     // Выполняем операцию;
     // Область iMySourceBitmap копируется в iMyBitmap
     iMyHwAccel->Operation(myBlitOperation);
     CleanupStack::PopAndDestroy();
     }


Перевод: aRix.



На главную SpbMap
Hosted by uCoz