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


Дублирующая буферизация - часть 2


В ней мы используем дублирующий буфер только для первых 176 строк дисплея, так как остальную часть экрана будет занимать статичное, один-единственный раз созданное изображение.

Теперь, когда мы знаем, что такое дублирующий буфер и как его использовать, давайте рассмотрим некоторые примеры того,  как он создается и как он действует. Модифицируем и расширим исходные программы двухмерной графики из пятой главы, «Секреты VGA-карт», использовав вместо видеопамяти дублирующий буфер (см. Листинг 7.4). Для этого в каждой функции заменим video_buffer на double_buffer. Программа CIRCLES.С делает следующее:

§          Резервирует память под двойной буфер;

§          Рисует в нем 1000 окружностей;

§          Копирует содержимое буфера на экран за один раз.

Листинг 7.4. Программа CIRCLES.С.

// ВКЛЮЧАЕМЫЕ ФАЙЛЫ ////////////////////////////////////

#include <stdio.h>

#include <math.h>

#include <graph.h>

#include <malloc.h>

#include <memory.h>

#include <string.h>

// ОПРЕДЕЛЕНИЯ //////////////////////////////////

#define SCREEN_WIDTH      (unsigned int)320

#define SCREEN_HEIGHT     (unsigned int}200

// ГЛОБАЛЬНЫЕ

ПЕРЕМЕННЫЕ

//////////////////////////////////////

unsigned char far *video_buffer = (char far *)0xA0000000L;// указатель

на видеобуфер

unsigned char far *double_buffer = NULL;

// ФУНКЦИИ /////////////////////////////////////////////////////////////

void Init_Double_Buffer(void)

{

double_buffer=(char far *)_fmalloc(SCREEN_WIDTH*SCREEN_HEIGHT+1) ;

_fmemset(double_buffer, 0, SCREEK_WIDTH*SCREEN_HEIGHT+l) ;

} // конец Init_Double_Buffer

/////////////////////////////////////////////////////////////

void Show_Double_Buffer(char far *buffer)

{

// копирование дублирующего буфера в видеобуфер

asm {

push ds                // сохранение регистра сегмента данных

les di, video_buffer   // вывод в видеобуфер...




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



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