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


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


Plot_Pixel_Asm(int x,int у,int color)

{

_asm{

les di,video_buffer   // загрузить регистр es значением

// сегмента видеобуфер

 mov di,y              // поместить в di у-координату пикселя

shl di,6              // умножить на 64

mov bx,di             // сохранить результат

shl di,2              // умножить еще на 8 (итого, на 256)

add di,bx             // сложить результаты

add di,x              // прибавить х-компонент

mov al,BYTE PTR color // записать цвет в регистр аl

mov es:[di],al        // нарисовать пиксель

}

}

Ладно, покончим с этим. Ассемблерный вариант работает всего лишь на 2 процента быстрее, чем версия на Си. На то есть две причины:

§          Во-первых, компилятор Си проделывает неплохую работу, транслируя программу в машинные коды. Хотя, как вы знаете, мы можем сделать это вручную, используя ассемблер;

§          Во-вторых, когда вы используете встроенный ассемблер, он сохраняет все регистры и позже восстанавливает их. Единственный способ избавления от этого - написать внешние ассемблерные функции с использованием MASM. В данном случае это вполне допустимо, поскольку мы оптимизируем такую важную операцию как построение пикселя.

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


Оптимизация изображаемой линии

Игры типа DOOM и Wolfenstein 3-D не используют все известные техники трехмерных графических преобразований, как это делают, например, имитаторы полетов. В них применяются совершенно гениальные методы для создания трехмерных образов. Эти методы базируются на изображении большого количества линий, проходящих в одном направлении. Обычно рисуются обычно вертикальные или горизонтальные линии и только в удаленных предметах присутствуют диагональные прямые. Следовательно, мы должны научиться максимально быстро проводить горизонтальные и вертикальные линии. Сейчас мы поговорим о горизонтальных прямых.




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



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