Двойная буферизация Перед началом вывода графики необходимо чтобы у нас был [[AHI#Контекст устройства|контекст устройства]] ({{lang'''dCtx'''), на которое будем выводить графику и две [[AHI#Поверхности|поверхности]] -enэкранная поверхность ('''sDisp''') и внеэкранная поверхность ('''sDraw'''). Если у нас их нет - смотрим [[AHI#Инициализация|Double Buffering}}) — метод вывода графики на экран через драйвер, который применяется для предотвращения эффекта "мерцания"здесь]] как их получить.
== Описание ==Итак, графика инициализирована. Можем приступать к работе.
При использовании метода "двойной буферизации"<ol><li>'''Перед выводом графики мы меняем поверхность, изображение сначала выводится во вторичный буфер (в данном случае на которой будем рисовать'''<br>По-умолчанию этой поверхностью является экранная поверхность. Но для наших целей она не подходит. Переключаем поверхность с помощью функции [[AHI#Поверхности|поверхность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; // Нарисуем прямоугольник rectAhiDrawSpans(dCtx, &rect, 1, 0);</pre></li> <li>'''Переносим изображение из поверхности в видеопамяти на экран'''<br>Графика выведена в память, но теперь её нужно вывести на экран. Для этого мы выставляем растровую операцию в <tt>'''AHIROP_SRCCOPY'''</tt>, устанавливаем поверхность-источник в '''sDraw''' (там у нас находится то, что мы уже вывели), а затем проецируется из поверхность-приёмник в '''sDisp''' (экранная поверхность) и копируем изображение с помощью функции [[Видеопамять|видеопамятиAhiDrawBitBlt]] :<pre>// Левый верхний угол поверхности рисованияAHIPOINT_T zpoint = {0, 0};// Область вывода на поверхность экранаAHIRECT_T zrect = {0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT}; // Устанавливаем растровую операциюAhiDrawRopSet(dCtx, AHIROP3(AHIROP_SRCCOPY)); // Устанавливаем поверхность-источникAhiDrawSurfSrcSet(dCtx, sDraw, 0); // Устанавливаем поверхность-приёмникAhiDrawSurfDstSet(dCtx, sDisp, 0); // Копируем изображениеAhiDrawBitBlt(dCtx, &zrect, &zpoint);</pre></li> </ol> Изображение получено на дисплейэкране. == См.также == * [[AHI]] - драйвер для чипов ATI* [[LdrDisplayCbkReg]] - функция для создания callback'ов для рисования поверх [[UIS]]* [[LdrDisplayCbkUnReg]] - функция для удаления callback'ов, созданных с помощью [[LdrDisplayCbkReg]] [[Категория:Эльфостроение]]