Стэн Трухильо - Графика для Windows средствами DirectDraw

Тут можно читать онлайн Стэн Трухильо - Графика для Windows средствами DirectDraw - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Графика для Windows средствами DirectDraw
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.88/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Стэн Трухильо - Графика для Windows средствами DirectDraw краткое содержание

Графика для Windows средствами DirectDraw - описание и краткое содержание, автор Стэн Трухильо, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Графика для Windows средствами DirectDraw - читать онлайн бесплатно полную версию (весь текст целиком)

Графика для Windows средствами DirectDraw - читать книгу онлайн бесплатно, автор Стэн Трухильо
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Обработка пользовательского ввода

При запуске программы Switch текст в нижней части меню подсказывает, какие клавиши управляют работой приложения. Клавиши со стрелками изменяют текущий выделенный видеорежим, клавиша Enterактивизирует его (если он не является текущим), а клавиша Escapeзавершает работу программы. Все эти клавиши обрабатываются функцией OnKeyDown(), создаваемой ClassWizard. Ее код приведен в листинге 4.5.

Листинг 4.5. Функция SwitchWin::OnKeyDown()

void SwitchWin::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {

int newindex;

int nmodes=GetNumDisplayModes();

if (nmodes>maxmodes) nmodes=maxmodes;

int rows=nmodes/menucols;

if (nmodes%menucols) rows++;

switch (nChar) {

case VK_ESCAPE:

PostMessage(WM_CLOSE);

break;

case VK_UP:

newindex=selectmode-1;

if (newindex>=0) {

selectmode=newindex;

UpdateMenuSurface();

}

break;

case VK_DOWN:

newindex=selectmode+1;

if (newindex

selectmode=newindex;

UpdateMenuSurface();

}

break;

case VK_LEFT:

newindex=selectmode-rows;

if (newindex>=0) {

selectmode=newindex;

UpdateMenuSurface();

}

break;

case VK_RIGHT:

newindex=selectmode+rows;

if (newindex

selectmode=newindex;

UpdateMenuSurface();

}

break;

case VK_RETURN:

if (selectmode != GetCurDisplayMode()) {

ActivateDisplayMode(selectmode);

x=y=0;

}

break;

case 'S':

SaveSurface(primsurf, "switch.bmp");

break;

case 'M':

SaveSurface(menusurf, "menusurf.bmp");

break;

case 'F':

SaveSurface(fpssurf, "fpssurf.bmp");

break;

case 'T':

SaveSurface(bmpsurf, "trisurf.bmp");

break;

default:

DirectDrawWin::OnKeyDown(nChar, nRepCnt, nFlags);

}

}

Обработка нажатых клавиш происходит в различных секциях оператора switch. Клавиша Escape(код виртуальной клавиши VK_ESCAPE) приводит к посылке сообщения WM_CLOSEи последующему завершению приложения. При нажатии клавиш со стрелками изменяется индекс текущего видеорежима и вызывается функция UpdateMenuSurface(), которая перерисовывает menusurfв соответствии с произведенными изменениями. При нажатии клавиши Enter( VK_RETURN) вызывается функция ActivateDisplayMode(), которой в качестве аргумента передается индекс режима (при условии, что выбран видеорежим, отличный от текущего). Все остальные клавиши, нажатые пользователем, обрабатываются функцией OnKeyDown()базового класса.

Восстановление поверхностей

Программа Switch почти готова. Она инициализируется, переключает видеорежимы и обрабатывает пользовательский ввод. Но окончательный вид программа примет лишь после того, как мы организуем в ней восстановление потерянных поверхностей. Класс DirectDrawWinобнаруживает потерю поверхностей и автоматически восстанавливает первичную поверхность со вторичным буфером; после этого вызывается функция RestoreSurfaces(), в которой должны восстанавливаться вспомогательные поверхности приложения. В программе Switch функция RestoreSurfaces()реализована так:

void SwitchWin::RestoreSurfaces() {

int displaydepth=GetCurDisplayDepth();

CString filename;

if (displaydepth==8) filename="tri08.bmp";

else filename="tri24.bmp";

if (bmpsurf->IsLost()) {

bmpsurf->Restore();

LoadSurface(bmpsurf, filename);

}

if (menusurf->IsLost()) {

menusurf->Restore();

UpdateMenuSurface();

}

if (fpssurf->IsLost()) {

fpssurf->Restore();

ClearSurface(fpssurf, 0);

}

displayfps=FALSE;

framecount=0;

}

В нашем случае функция RestoreSurfaces()отвечает за восстановление всех трех вспомогательных поверхностей. Ее работа начинается с анимационной поверхности ( bmpsurf). Функция получает текущую глубину пикселей и по ней определяет, какую версию BMP-файла (палитровую или беспалитровую) следует использовать при восстановлении поверхности. Затем мы проверяем, действительно ли поверхность была потеряна.

При этом учитывается, что «потеряться» могут лишь поверхности, находящиеся в видеопамяти. Поверхности в системной памяти никогда не теряются, поэтому предварительная проверка может избавить нас от хлопот с повторной загрузкой содержимого BMP-файла и, следовательно, ускорить процесс восстановления.

Если поверхность потеряна, мы вызываем функцию Restore()интерфейса DirectDrawSurface, чтобы вернуть видеопамять в объеме, достаточном для хранения поверхности. Содержимое поверхности восстанавливается функцией LoadSurface().

Восстановление двух других поверхностей происходит несколько иначе, потому что их содержимое не является BMP-файлом. Поверхность menusurfвосстанавливается функцией Restore()с последующим вызовом функции UpdateMenuSurface(), в которой происходит стирание и перерисовка поверхности меню. При восстановлении fpssurfмы сначала вызываем Restore(), а потом стираем содержимое поверхности, потому что это содержимое после восстановления оказывается непредсказуемым. Не забывайте, поверхности чаще всего теряются из-за того, что занимаемая ими видеопамять понадобилась другому приложению.

Обратите внимание: мы не восстанавливаем значение, отображаемое на поверхности FPS. Потеря первичной поверхности и вторичного буфера означает, что последнее вычисленное значение FPS, по всей видимости, стало неверным. Наша программа было свернута или уступила фокус другому приложению; в любом случае нельзя с уверенностью сказать, насколько быстро обновляется изображение в данный момент. Вместо того чтобы выводить устаревшее значение FPS, мы очищаем поверхность и присваиваем переменной displayfpsзначение FALSE, тем самым запрещая вывод поверхности до получения новой величины FPS. Кроме того, мы обнуляем переменную framecount, чтобы перезапустить механизм вычисления FPS.

Вот и все, что касается программы Switch. Пора заняться частотой смены кадров и перейти к приложению SuperSwitch.

Частота смены кадров

В главе 1 мы узнали, что DirectDraw позволяет приложению задать не только видеорежим, но и частоту смены кадров. Однако перед тем, как писать демонстрационную программу, следует разобраться, что же такое «частота смены кадров».

Частота смены кадров представляет собой скорость обновления экрана. Например, частота в 60 Гц означает, что экран перерисовывается 60 раз в секунду. Данный показатель представляет большой интерес для программистов, работающих с DirectDraw, потому что он управляет скоростью работы приложения. Для полноэкранных приложений DirectDraw с возможностью переключения страниц это происходит автоматически, потому что функция Flip()интерфейса DirectDrawSurfaceсинхронизирует операцию переключения страниц с частотой смены кадров. Такая синхронизация определяет (или, если хотите, ограничивает) скорость, с которой приложение обновляет экран.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Стэн Трухильо читать все книги автора по порядку

Стэн Трухильо - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Графика для Windows средствами DirectDraw отзывы


Отзывы читателей о книге Графика для Windows средствами DirectDraw, автор: Стэн Трухильо. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x