46
правокИзменения
Нет описания правки
При использовании метода "двойной буферизации", графика сначала выводится во вторичный буфер (в данном случае на [[AHI#Поверхности|поверхность]]), а затем первичный буфер подменяется на вторичный.
== Применение ==
Перед началом вывода графики необходимо чтобы у нас был [[AHI#Контекст устройства|контекст устройства]] ('''dCtx'''), на которое будем выводить графику и две [[AHI#Поверхности|поверхности]] - экранная поверхность ('''sDisp''') и внеэкранная поверхность ('''sDraw'''). Если у нас их нет - смотрим [[AHI#Инициализация|здесь]] как их получить. Как только их получили, мы сохраняем их в дополнительные переменные '''sRealDisp''' и '''sRealDraw''', т.к. они нам ещё понадобятся.
Итак, графика инициализирована. Можем приступать к работе.
<ol>
<li>'''Перед выводом графики мы меняем поверхность, на которой будем рисовать'''<br>
По-умолчанию этой поверхностью является экранная поверхность. Но для наших целей она не подходит. Переключаем поверхность с помощью функции [[AhiDrawSurfDstSet]]:
<pre>
AhiDrawSurfDstSet(dCtx, sDraw, 0);
</pre>
</li>
<li>'''Собственно, выводим графику'''<br>
Выводим графику. Не забываем устанавливать [[Raster Operations|растровую операцию]] и цвет кисти:
<pre>
// Вспомогательная переменная для указания области экрана
AHIRECT_T rect;
// Устанавливаем растровую операцию на применение кисти
AhiDrawRopSet(dCtx, AHIROP3(AHIROP_PATCOPY));
// Установим цвет кисти. Этим цветом будут выводиться наши графические примитивы
AhiDrawBrushFgColorSet(dCtx, ATI_565RGB(0,0,255)); // Ярко-синий
// Зададим прямоугольник на экране, который будет залит нашим цветом
rect.x1 = 0;
rect.y1 = 0;
rect.x2 = 64;
rect.y2 = 64;
// Нарисуем прямоугольник rect
AhiDrawSpans(dCtx, &rect, 1, 0);
</pre>
</li>
<li>'''Заменяем экранную поверхность'''<br>
Графика выведена во внеэкранную поверхность, но теперь её нужно вывести на экран. Для этого мы меняем местами экранную и внеэкранную поверхности и устанавливаем '''sDraw''' экранной поверхностью, а '''sDisp''' - поверхностью для рисования:
<pre>
AHISURFACE_T tSurface;
// Установка поверхности для рисования
AhiDrawSurfDstSet(dCtx, sDisp, 0);
// Установка экранной поверхности
AhiDispSurfSet(dCtx, sDraw, 0);
// Изображение получено на экране
// Меняем поверхности местами
tSurface = sDisp;
sDisp = sDraw;
sDraw = tSurface;
</pre>
</li>
</ol>
На данный момент статья ещё не написана до конца. Если вам необходим пример предотвращения мерцания при выводе графики на дисплей, вы можете перейти по этой ссылке: [[Предотвращение мерцания]]