Разработка игр для 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.
|