Предотвращение мерцания: различия между версиями
Cool-T (обсуждение | вклад) (→Применение) | Cool-T (обсуждение | вклад) | ||
(не показаны 3 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Перед началом вывода графики необходимо чтобы у нас был [[AHI#Контекст устройства|контекст устройства]] ('''dCtx'''), на которое будем выводить графику и две [[AHI#Поверхности|поверхности]] - экранная поверхность ('''sDisp''') и внеэкранная поверхность ('''sDraw'''). Если у нас их нет - смотрим [[AHI#Инициализация|здесь]] как их получить. | Перед началом вывода графики необходимо чтобы у нас был [[AHI#Контекст устройства|контекст устройства]] ('''dCtx'''), на которое будем выводить графику и две [[AHI#Поверхности|поверхности]] - экранная поверхность ('''sDisp''') и внеэкранная поверхность ('''sDraw'''). Если у нас их нет - смотрим [[AHI#Инициализация|здесь]] как их получить. | ||
Строка 29: | Строка 21: | ||
// Установим цвет кисти. Этим цветом будут выводиться наши графические примитивы | // Установим цвет кисти. Этим цветом будут выводиться наши графические примитивы | ||
− | AhiDrawBrushFgColorSet( | + | AhiDrawBrushFgColorSet(dCtx, ATI_565RGB(0,0,255)); // Ярко-синий |
// Зададим прямоугольник на экране, который будет залит нашим цветом | // Зададим прямоугольник на экране, который будет залит нашим цветом | ||
Строка 38: | Строка 30: | ||
// Нарисуем прямоугольник rect | // Нарисуем прямоугольник rect | ||
− | AhiDrawSpans( dCtx, &rect, 1, 0); | + | AhiDrawSpans(dCtx, &rect, 1, 0); |
</pre> | </pre> | ||
</li> | </li> | ||
Строка 45: | Строка 37: | ||
Графика выведена в память, но теперь её нужно вывести на экран. Для этого мы выставляем растровую операцию в <tt>'''AHIROP_SRCCOPY'''</tt>, устанавливаем поверхность-источник в '''sDraw''' (там у нас находится то, что мы уже вывели), а поверхность-приёмник в '''sDisp''' (экранная поверхность) и копируем изображение с помощью функции [[AhiDrawBitBlt]]: | Графика выведена в память, но теперь её нужно вывести на экран. Для этого мы выставляем растровую операцию в <tt>'''AHIROP_SRCCOPY'''</tt>, устанавливаем поверхность-источник в '''sDraw''' (там у нас находится то, что мы уже вывели), а поверхность-приёмник в '''sDisp''' (экранная поверхность) и копируем изображение с помощью функции [[AhiDrawBitBlt]]: | ||
<pre> | <pre> | ||
+ | // Левый верхний угол поверхности рисования | ||
+ | AHIPOINT_T zpoint = {0, 0}; | ||
+ | // Область вывода на поверхность экрана | ||
+ | AHIRECT_T zrect = {0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT}; | ||
+ | |||
// Устанавливаем растровую операцию | // Устанавливаем растровую операцию | ||
− | AhiDrawRopSet( | + | AhiDrawRopSet(dCtx, AHIROP3(AHIROP_SRCCOPY)); |
// Устанавливаем поверхность-источник | // Устанавливаем поверхность-источник | ||
− | AhiDrawSurfSrcSet( | + | AhiDrawSurfSrcSet(dCtx, sDraw, 0); |
// Устанавливаем поверхность-приёмник | // Устанавливаем поверхность-приёмник | ||
− | AhiDrawSurfDstSet( | + | AhiDrawSurfDstSet(dCtx, sDisp, 0); |
// Копируем изображение | // Копируем изображение | ||
− | AhiDrawBitBlt( | + | AhiDrawBitBlt(dCtx, &zrect, &zpoint); |
</pre> | </pre> | ||
</li> | </li> | ||
Строка 65: | Строка 62: | ||
== См. также == | == См. также == | ||
+ | * [[AHI]] - драйвер для чипов ATI | ||
* [[LdrDisplayCbkReg]] - функция для создания callback'ов для рисования поверх [[UIS]] | * [[LdrDisplayCbkReg]] - функция для создания callback'ов для рисования поверх [[UIS]] | ||
* [[LdrDisplayCbkUnReg]] - функция для удаления callback'ов, созданных с помощью [[LdrDisplayCbkReg]] | * [[LdrDisplayCbkUnReg]] - функция для удаления callback'ов, созданных с помощью [[LdrDisplayCbkReg]] | ||
[[Категория:Эльфостроение]] | [[Категория:Эльфостроение]] |
Текущая версия на 15:07, 11 июня 2010
Перед началом вывода графики необходимо чтобы у нас был контекст устройства (dCtx), на которое будем выводить графику и две поверхности - экранная поверхность (sDisp) и внеэкранная поверхность (sDraw). Если у нас их нет - смотрим здесь как их получить.
Итак, графика инициализирована. Можем приступать к работе.
- Перед выводом графики мы меняем поверхность, на которой будем рисовать
По-умолчанию этой поверхностью является экранная поверхность. Но для наших целей она не подходит. Переключаем поверхность с помощью функции AhiDrawSurfDstSet:AhiDrawSurfDstSet(dCtx, sDraw, 0);
- Собственно, выводим графику
Выводим графику. Не забываем устанавливать растровую операцию и цвет кисти:// Вспомогательная переменная для указания области экрана 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);
- Переносим изображение из поверхности в видеопамяти на экран
Графика выведена в память, но теперь её нужно вывести на экран. Для этого мы выставляем растровую операцию в AHIROP_SRCCOPY, устанавливаем поверхность-источник в sDraw (там у нас находится то, что мы уже вывели), а поверхность-приёмник в sDisp (экранная поверхность) и копируем изображение с помощью функции AhiDrawBitBlt:// Левый верхний угол поверхности рисования 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);
Изображение получено на экране.
См. также
- AHI - драйвер для чипов ATI
- LdrDisplayCbkReg - функция для создания callback'ов для рисования поверх UIS
- LdrDisplayCbkUnReg - функция для удаления callback'ов, созданных с помощью LdrDisplayCbkReg