В DirectDraw форуме функций для рисования примитивов, как в WinAPI и ее библиотеке GDI. Если линии должны выводиться очень быстро, то для этого будем использовать прямой доступ к памяти. В принципе, это единственный способ нарисовать что-то на экране, не считая копирования в поверхность подготовленного изображения. Для начала определимся с переменными, которые понадобятся:
- X1, Y1, Х2, Y2 -цели числа, в которых хранятся координаты двух точек
(начало и конец линии).
- DX, DY - длина отрезка по оси X и Y. DX = Х2-X1, DY = Y2-Y1;
- IOffset - переменная для хранения указателя на точку в видеопамяти, куда будем выводить следующую точку;
- NS - переменная-счетчик, определяющий изменение редко переменной координаты. Алгоритм построен так, что сначала определяется ось, по которой изменение происходит чаще.
Например, если отрезок имеет координаты точек (0,0) и (100,10), то по горизонтали будет 100 точек, а по вертикали 10 таким образом чаще будем рисовать линию вправо, а иногда вниз. Значение переменной NS будет определять, когда нужно опуститься вниз. Прежде чем рисовать отрезок, нужно еще проверить соотношение координат. Если координата Y2 больше Y1, то следует поменять точки местами и рисовать в обратном направлении. Это необходимо, чтобы не писать код рисования снизу вверх, а только сверху вниз. Определяем положение первой точки в видеопамяти и заносим это значение в переменную iOffset. В результате, сначала умножаем координату Y1 на ширину строки (desc. LPitch), чтобы найти в видеопамяти строку Y1, а потом просто добавляем к результату координату Х1.