Открыть главное меню

AHI

Версия от 00:38, 23 июня 2011; 94.142.131.241 (обсуждение) (http://lifeofpis.com/#75709 alternatives to lamisil - lamisil tablet side effect http://www.corasyndicate.com/#59342 phentermine - phentermine)

AHI англ. ATI Handheld Interface — драйвер для чипов ATI. Присутствует в каждой прошивке для телефонов, где есть чип ATI, а это - все телефоны на базе LTE и LTE2.


yZfgLO <a href="http://ejdjudbgakhl.com/">ejdjudbgakhl</a>, [url=http://fevoeukacthf.com/]fevoeukacthf[/url], [link=http://mebvchxotgxg.com/]mebvchxotgxg[/link], http://hkksxkbsltie.com/

http://topsailnet.com/#39145 buy ambien - buy ambien no prescription http://www.americanindependentwriters.net/#35827 buy ativan online - buy ativan without a prescription

http://lifeofpis.com/#75709 alternatives to lamisil - lamisil tablet side effect http://www.corasyndicate.com/#59342 phentermine - phentermine

Содержание

Примеры

Наконец, уже можно что-нибудь да и нарисовать! Не будем здесь заострять внимание на таких тривиальных вещах, как размещение последующих примеров в коде и инициализация приложения. Пускай, например, рисовать мы будем в вызове по таймеру.


Первый пример

Для первого раза нарисуем цветной графический примитив.

// Вспомогательная переменная для указания области экрана
AHIRECT_T	rect;
// Установим цвет кисти. Этим цветом будут выводиться наши графические примитивы
AhiDrawBrushFgColorSet(devCx, ATI_565RGB(0,0,255)); // Ярко-синий
// Зададим прямоугольник на экране, который будет залит нашим цветом
rect.x1 = 0;
rect.y1 = 0;
rect.x2 = 64;
rect.y2 = 64;
// Нарисуем прямоугольник rect
AhiDrawSpans( dCtx, &rect, 1, 0);

References: AhiDrawSpans, AhiDrawBrushFgColorSet

После этого мы получим на экране синий квадрат в левом верхнем углу. Не больно-то и сложно, не так ли?


Второй пример

Теперь мы попытаемся решить задачу чуть посложнее, а именно - выведем какую-нибдь картинку. Код для загрузки картинок можно взять из библиотеки AHG, написанной tim apple, а саму картинку нужно будет подготовить особым образом.

/* Проведём инициализацию при загрузке эльфа: */
// Сюда будет загружена наша картинка. Не забудьте освободить память bitmap.image по завершению!
AHIBITMAP_T	bitmap;
// Загружаем картинку!
BMP_LoadFromFile(L"file://b/image.bmp", &bitmap);
/* Теперь нарисуем картинку на экране средствами ATI */
AHIPOINT_T	point;
AHIRECT_T	rect;
// Пусть мы хотим вывести картинку в левом верхнем углу, задаём область как в предыдущем примере
rect.x1	= 0;
rect.y1	= 0;
rect.x2	= bitmap.width;
rect.y2	= bitmap.height;
// И ещё - точку на исходной картинке. Мы выводим целиком, так что нули.
point.x	= 0;
point.y = 0;
// Не забываем, что в прошлый раз мы установили операцию PATCOPY, но она не подходит для вывода растра!
AhiDrawRopSet( dCtx, AHIROP3(AHIROP_SRCCOPY) );
// Осталось собственно вывести картинку!
AhiDrawBitmapBlt( dCtx, &rect, &point, &bitmap, NULL, 0 );

References: AhiDrawBitmapBlt, AhiDrawRopSet


Третий пример

В третьем, заключительном примере мы создадим собственную поверхность, перенесём её в видеопамять и будем работать уже из неё. Пример во многом повторяет предыдущий, но смотрите внимательнее - есть значительные отличия!

/* Проведём инициализацию при загрузке эльфа: */
// Сюда будет загружена наша картинка. Не забудьте освободить память bitmap.image по завершению!
AHIBITMAP_T	bitmap;
// Это - размер новой поверхности
AHIPOINT_T	size;
// Сюда мы сохраним указатель на новую поверхность
AHISURFACE_T	surface;
// Загружаем картинку!
BMP_LoadFromFile(L"file://b/image.bmp", &bitmap);
/* Создадим новую поверхность - surface, по размеру картинки*/
size.x = bitmap.width;
size.y = bitmap.height;
AhiSurfAlloc( dCtx, &surface, &size, AHIFMT_16BPP_565, 0 );
/* Перенесём картинку на нашу новую поверхность, просто нарисовав её из системной памяти */
AHIPOINT_T	point;
AHIRECT_T	rect;
// Задаём область вывода
rect.x1	= 0;
rect.y1	= 0;
rect.x2	= bitmap.width;
rect.y2	= bitmap.height;
// И точку на исходной картинке
point.x	= 0;
point.y = 0;
// Не забываем, что в прошлый раз мы установили операцию PATCOPY, но она не подходит для вывода растра!
AhiDrawRopSet( dCtx, AHIROP3(AHIROP_SRCCOPY) );
// Сейчас мы хотим вывести картинку на новую поверхность.
AhiDrawSurfDstSet( dCtx, surface, 0 );
// Так как выводить будем из системной памяти, поверхность-источник нам не важна.
// Выводим картинку
AhiDrawBitmapBlt( dCtx, &rect, &point, &bitmap, NULL, 0 );
/* Теперь мы можем работать с этой картинкой в видеопамяти */
AHIPOINT_T	point;
AHIRECT_T	rect;
// Сейчас мы хотим вывести картинку из новой поверхности на экран.
AhiDrawSurfSrcSet( dCtx, surface, 0 );
AhiDrawSurfDstSet( dCtx, sDisp, 0 );
point.x = 0;
point.y = 0;
rect.x1	= 0;
rect.y1	= 0;
rect.x2	= bitmap.width;
rect.y2	= bitmap.height;
// Для вывода из видеопамяти используется эта функция
AhiDrawBitBlt( dCtx, &rect, &point );

References: AhiDrawBitBlt, AhiSurfAlloc, AhiDrawSurfSrcSet, AhiDrawSurfDstSet, AhiDrawBitmapBlt, AhiDrawRopSet


Заключение

Итак, рассмотрев основные моменты работы с драйвером ATI и даже несколько конкретных примеров, у вас не должно возникнуть больших проблем с разработкой эльфов с его использованием. Тем более, что уже существует несколько подобных эльфов, с исходным кодом которых можно ознакомиться.


Если эта статья вам чем-то помогла - пожалуйста, отпишитесь на форуме! --Andy51 19:13, 29 августа 2009 (MSD)