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

Изменения

AHI

4286 байт добавлено, 05:23, 1 апреля 2019
metadesc
AHI {{lang-en|ATI Handheld Interface}} — драйвер для чипов ATI. Присутствует в каждой прошивке для телефонов, где есть чип ATI, а это - все телефоны на базе [[LTE]] и [[LTE2]].
<metadesc>AHI - драйвер для чипов ATI. Присутствует в каждой прошивке для телефонов, где есть чип ATI, а это - все телефоны на базе LTE и LTE2.</metadesc>
== Чипы ATI ==
*:Устанавливается самим драйвером, а настраивается с помощью функции [[AhiDrawBrushSet]].
Иногда требуется создать собственную поверхность в видеопамяти, например, чтобы закешировать спрайт (вывод графики из внутренней памяти намного быстрее, чем из системной). Для этого можно использовать функции [[AhiSurfAlloc]], [[AhiSurfFree]], [[AhiSurfReuse]].
=== Координаты ===
Чтобы не углубляться в рамках этой статьи в растровые операции, ограничимся пока что простым правилом:
Для вывода растровых изображений устанавливаем <tt>AHIROP_SRCCOPY</tt>, а для рисования цветом - <tt>AHIROP_PATTERNAHIROP_PATCOPY</tt>.
Отсановимся на последнем, так как пригодится в последующем примере.
<pre>
// Устанавливаем растровую операцию на применение кисти
AhiDrawRopSet( dCtx, AHIROP3(AHIROP_PATTERNAHIROP_PATCOPY) );
</pre>
</li>
Конечно, некоторые из этих операций понадобится повторить перед вызовом определённых функций, с другими установками, но надеюсь это уже не составит для Вас проблем.
 
== Примеры ==
AhiDrawSpans( dCtx, &rect, 1, 0);
</pre>
References: [[AhiDrawBrushFgColorSetAhiDrawSpans]], [[AhiDrawSpansAhiDrawBrushFgColorSet]]
После этого мы получим на экране синий квадрат в левом верхнем углу. Не больно-то и сложно, не так ли?
=== Пример посложнее Второй пример ===
Теперь мы попытаемся решить задачу чуть посложнее, а именно - выведем какую-нибдь картинку. Код для загрузки картинок можно взять из библиотеки AHG, написанной '''tim apple''', а саму картинку нужно будет [[Подготовка графики для ATI|подготовить особым образом]].
/* Проведём инициализацию при загрузке эльфа: */
// Сюда будет загружена наша картинка. Не забудьте освободить память bitmap->.image по завершению!
AHIBITMAP_T bitmap;
rect.x1 = 0;
rect.y1 = 0;
rect.x2 = bitmap->.width;rect.y2 = bitmap->.height;
// И ещё - точку на исходной картинке. Мы выводим целиком, так что нули.
AhiDrawBitmapBlt( dCtx, &rect, &point, &bitmap, NULL, 0 );
</pre>
References: [[AhiDrawBitmapBlt]], [[AhiDrawRopSet]]
 
 
=== Третий пример ===
 
В третьем, заключительном примере мы создадим собственную поверхность, перенесём её в видеопамять и будем работать уже из неё.
Пример во многом повторяет предыдущий, но смотрите внимательнее - есть значительные отличия!
 
<pre>
/* Проведём инициализацию при загрузке эльфа: */
 
// Сюда будет загружена наша картинка. Не забудьте освободить память 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 );
</pre>
References: [[AhiDrawBitBlt]], [[AhiSurfAlloc]], [[AhiDrawSurfSrcSet]], [[AhiDrawSurfDstSet]], [[AhiDrawBitmapBlt]], [[AhiDrawRopSet]]
 
 
== Заключение ==
 
Итак, рассмотрев основные моменты работы с драйвером ATI и даже несколько конкретных примеров, у вас не должно возникнуть больших проблем с разработкой эльфов с его использованием.
Тем более, что уже существует несколько подобных эльфов, с исходным кодом которых можно ознакомиться.
 
 
'''Если эта статья вам чем-то помогла - пожалуйста, отпишитесь на форуме!''' --[[Участник:Andy51|Andy51]] 19:13, 29 августа 2009 (MSD)
----
Пока что это всё, ждите продолжения :)
--[[Участник:Andy51|Andy51]] 01:32, 26 августа 2009 (MSD)
[[Категория:Эльфостроение]]
214
правок