9.5. Запись в буферы
Работая с современной графической системой, программист может записывать данные в промежуточные буферы и считывать данные из них. Но на выполнение этих операций оказывают влияние два фактора, которые заставляют выполнять их не так, как обычные операции чтения/записи в память. Надо сказать, что потребность в таких операциях на уровне отдельных пикселей возникает довольно редко в прикладной графической программе. Как правило, требуется считывать или записывать целый блок пикселей (или битов). Например, при заливке внутренней области многоугольника единой процедурой формируется целая строка растра. Чтобы вывести на экран изображение точечного символа, его образ переносится в небольшой блок пикселей. При очистке экрана нужно единой процедурой записать нули во все ячейки буфера кадра. Следовательно, необходимо располагать как программными, так и аппаратными средствами выполнения таких групповых операций над блоками пикселей, как правило, - прямоугольными, причем эти средства должны обеспечивать максимальную скорость выполнения операций. Такие операции даже обозначаются специальным термином "пересылка битового блока" (bit-block transfer, или bitblt}). Иногда можно встретить и термин растровые операции (raster operations, или raster-ops).
Предположим, что возникла необходимость перенести блок пикселей размером пхт из одного буфера в другой. Первый буфер в такой операции - буфер-источник (source buffer), а второй- буфер-приемник (destination buffer). На рис. 9.19 схематически представлен процесс передачи битового блока, причем в роли буфера-приемника в этой операции выступает буфер кадра. В программе операция пересылки битового блока выглядит примерно так:
write_block(source, n, m, x, у, destination, u, v);
9.5. Запись в буферы
В этом операторе source и destination - адреса буферов, тип - размеры блока. В результате выполнения оператора блок с размерами nxm , начальный элемент (точка) которого имеет параметры (х, у), будет перемешен из буфера-источника source в буфер-приемник