Функцию копирования можно ускорить подключением библиотеки DirectDraw и использованием метода FastBl t() этой библиотеки. При вычислении смешанного цвета можно использовать возможности одновременного выполнения операций с тремя компонентами цвета одной машинной командой. В проект включены функции обработки, в которых вычисление нескольких компонентов цвета одной машинной командой выполняется при помощи ассемблерной вставки, что еще более ускоряет работу.

Для объяснения возможности параллельного выполнения арифметических операций с кодами цвета, упакованными в один регистр, представим расчетное выражение (например, для компонента R) в следующем виде:

(R*N-R*t + fR^t)/N

или R - R t/N + /А t/N

Из него видно, что если предварительно вычислить произведения R t/N, fR t/N, все три компонента R, G, В можно хранить и вычислять в разных байтах одного регистра. Код R не превышает значения 255, поэтому для его хранения достаточно байта. В разности R- R t/N не может быть займа из старшего байта, так как R>R t/N, а после прибавления fR t/Nне возникает переноса единицы в старший байт.

Но вычислять параллельно все три выражения вида нельзя. Операцию R Step/N можно выполнять только в том случае, если коды цвета разделены в регистре пустыми байтами.

В функции Di rectBitMapAss() параллельно вычисляются красная и синяя составляющие цвета. Зеленая составляющая вычисляется отдельно. Для этого в цвете фона обнуляется область зеленого:

static COLORREF cRB - cFon&OxffOOff

В результате этих действий переменная cRB будет содержать компоненты фона fR и /В. В ассемблерной вставке указатель на текущую точку источника помещаНепосредственный доступ к графическим данным ется в регистр esi, а на точку приемника - в регистр edi. Перед выполнением цикла параллельно вычисляются выражения fR t/N, fB t/N. Для ускорения работы деление на N заменено сдвигом, как показано в листинге 17.7.

Листинг 17.7

mov eax.cRB // < fB> <fR> две составляющих фона в одном регистре еах mul t // <fB*t> <fR*t> два результата умножения в разных байтах


⇐ Предыдущая| |Следующая ⇒