46
правокИзменения
Нет описания правки
== Описание ==
При использовании метода "двойной буферизации", изображение графика сначала выводится во вторичный буфер (в данном случае на [[AHI#Поверхности|поверхность]] в [[Видеопамять|видеопамяти]]), а затем проецируется из [[Видеопамять|видеопамяти]] на дисплей. == Применение == Перед началом вывода графики необходимо чтобы у нас был [[AHI#Контекст устройства|контекст устройства]] ('''dCtx'''), на которое будем выводить графику и две [[AHI#Поверхности|поверхности]] - экранная поверхность ('''sDisp''') и внеэкранная поверхность ('''sDraw'''). Если у нас их нет - смотрим [[AHI#Инициализация|здесь]] как их получить. Итак, графика инициализирована. Можем приступать к работе. <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(devCx, ATI_565RGB(0,0,255)); // Ярко-синий // Зададим прямоугольник на экране, который будет залит нашим цветомrect.x1 = 0;rect.y1 = 0;rect.x2 = 64;rect.y2 = 64; // Нарисуем прямоугольник rectAhiDrawSpans( dCtx, &rect, 1, 0);</pre></li> <li>'''Переносим изображение из поверхности в видеопамяти на экран'''<br>Графика выведена в память, но теперь её нужно вывести на экран. Для этого мы выставляем растровую операцию в <tt>'''AHIROP_SRCCOPY'''</tt>, устанавливаем поверхность-источник в '''sDraw''' (там у нас находится то, что мы уже вывели), а поверхность-приёмник в '''sDisp''' (экранная поверхность) и копируем изображение с помощью функции [[AhiDrawBitBlt]]:<pre>// Устанавливаем растровую операциюAhiDrawRopSet(hDC, AHIROP3(AHIROP_SRCCOPY)); // Устанавливаем поверхность-источникAhiDrawSurfSrcSet(hDC, sDraw, 0); // Устанавливаем поверхность-приёмникAhiDrawSurfDstSet(hDC, sDisp, 0); // Копируем изображениеAhiDrawBitBlt(hDC, &rect, &point);</pre></li> </ol> [[Категория:Эльфостроение]]