Программирование игр для Windows. Советы профессионала


ТЕХНИКА ОПТИМИЗАЦИИ - часть 23


// выводя сразу по два пикселя

line_offset = ( (у<<7) + (у<<5) ); // у*160, поскольку в линии 160 слов

// вычислить цвет в середине

middle_word = ((color<<8) | color);

// левая граница

video_buffer_w[line_offset + (x1>>1)]= first_word;

// середина линии

for (index=(x1>>1)+l, index<(x2>>l); index++)

video_buffer_w[line_offset+index] = middle_word;

// правая граница video_buffer_w[line_offset+(х2>>1)] = last_word;

}

В начале работы функция проверяет, находятся ли конечные точки на границе байта (BYTE)? Основываясь на результатах проверки, функция создает два слова (WORD): одно будет началом линии, а другое ~ концом. В зависимости от результатов начального теста эти два слова содержат либо один, либо два байта, представляющих цвет. Затем функция изображает линию. Это выполняется следующим образом:

§          Пишется первый WORD, соответствующий левой границе;

§          Создается цикл FOR, который предназначен для записи в WORD середины линии;

§          Пишется WORD, соответствующий правой границе линии.

Хотя эта функция почти в два раза длиннее, чем первоначальная Н_Line, она почти в два раза быстрее.

(Существуют, правда, небольшие накладные расходы при вычислении границы). Чтобы сделать ее еще быстрее, я мог бы переписать часть, которая изображает середину на встроенном ассемблере, но я думаю, что вы и сами сделаете это в качестве легкого упражнения.

ИТОГ

Мы узнали множество полезных вещей, и даже если вы никогда не начнете писать игры, определенно станете более умелым программистом, поскольку приобрели новые навыки. У вас появилось несколько мощных методов оптимизации. Только не думайте, что лучше этих методов не бывает или что предложенные способы оптимизации годятся на все случаи жизни.

Наше длинное путешествие в мир оптимизации подошло к концу, и я хочу закончить его приглашением в следующую, девятнадцатую главу, где мы, наконец, на примере игры Warlock применим все, чему уже научились.Итак, до следующей главы.


 




Начало  Назад  Вперед



Книжный магазин