Series 60 Developer Platform 2.0 (Symbian OS 7.0) поддерживает не зависящее от устройства API, реализующий поддержку аппаратного ускорения 2D графики. Поддержка акселерации графики встроена в существующий Graphics API, таким образом, само приложение не знает о том, что использует ускорение.
API аппаратного ускорения представляет собой набор операций, которые выполняются либо аппаратными средствами (например, отдельным графическим процессором), либо программным способом (оптимизированные алгоритмы для работы с графикой). Приложение не знает, поддерживается ли устройством аппаратное ускорение или используется его программная реализация. Для программы это не имеет значения.
В дополнение к Графическому API, API аппаратного ускорения 2D графики реализует следующие функциональные возможности и концепции:
Вышеописанные операции реализуются с помощью двух классов, являющихся потомками абстрактного класса CGraphicsAccelerator.
Каждая 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