Вход/Регистрация
Графика для Windows средствами DirectDraw
вернуться

Трухильо Стэн

Шрифт:

Рис. А.9. Окно Additional DLLs

Отладочные сообщения DirectX

Вероятно, вы уже заметили, что при запуске приложений DirectX в окне вывода отладчика Visual C++ появляются диагностические сообщения. По умолчанию отладочные версии компонентов DirectX сообщают таким образом о важных внутренних событиях — например, об ошибках. Типичное окно вывода для приложения DirectDraw изображено на рис. А.10.

СОВЕТ

Прислушивайтесь к крикам DirectX

При установке runtime-части DirectX на рабочий компьютер возникает искушение установить окончательные версии DLL вместо отладочных (во время инсталляции вам предлагается выбрать нужный вариант). Не поддавайтесь соблазну и не устанавливайте окончательные версии! Да, они действительно работают чуть быстрее, и именно с ними будут работать пользователи вашего приложения, но при этом вы лишитесь отладочного вывода. Если во время работы над программой возникнут проблемы, вы так и не узнаете, что же DirectX пытается вам сказать.

Рис. А.10. Типичное окно вывода в отладчике

Возможно, вы не знаете, что детальность этих сообщений тоже можно изменять. В каждой из библиотек DirectDraw, Direct3D и DirectSound можно выбрать пять разных уровней отладочных сообщений. Чтобы настроить уровень отладочных сообщений, выберите значок DirectX в Control Panel и перейдите на вкладку нужного компонента DirectX. Диалоговое окно DirectX Properties с выбранной вкладкой DirectDraw изображено на рис. А.11.

Рис. А.11. Окно DirectX Properties (запускается из Control Panel)

Для библиотеки DirectDraw нажмите кнопку Advanced Settings — откроется окно DirectDraw Advanced Settings. Нужный уровень отладочных сообщений устанавливается с помощью слайдера Debug Level. Окно DirectDraw Advanced Settings изображено на рис. А.12.

Рис. А.12. Окно DirectDraw Advanced Settings

При максимальном уровне отладки каждое приложение DirectDraw, запущенное в отладчике, выдает весьма обширный и подробный протокол. Вывод протокола снижает быстродействие программы, так что максимальный уровень не стоит держать включенным постоянно. С другой стороны, он сильно помогает в затяжной борьбе с DirectDraw. Чтобы показать, насколько подробная информация выдается при максимальном уровне отладки, я приведу отладочный протокол для небольшого полноэкранного приложения DirectDraw. Обратите внимание на то, что листинг раскрывает некоторые внутренние тонкости работы DirectDraw. Подробный отладочный протокол приведен в листинге А.1.

Листинг А.1. Подробный отладочный протокол DirectDraw

DDraw:====> ENTER: DLLMAIN(baaa12c0): Process Attach: fff00c89, tid=fff04bf1

DDraw:Thunk connects

DDraw:Signalling DDHELP that a new process has connected

DDraw:====> EXIT: DLLMAIN(baaa12c0): Process Attach: fff00c89

DDraw:createDC(R3D)

DDraw:Enumerating GUID aba52f41-f744-11cf-b4-52-00-00-1d-1b-41-26

DDraw: Driver Name = R3D

DDraw: Description = Righteous 3D DirectX II Driver

DDraw:DeleteDC 0x179e

DDraw:createDC(mm3dfx)

DDraw:Enumerating GUID 3a0cfd01-9320-11cf-ac-a1-00-a0-24-13-c2-e2

DDraw: Driver Name = mm3dfx

DDraw: Description = 3Dfx Interactive DirectX Driver

DDraw:DeleteDC 0x179e

DDraw:Only one Display device in the current system.

DDraw:DirectDrawCreate entered

DDraw: GUID *:00000000, LPLPDD:0064f870, pUnkOuter:00000000

DDraw:Registry already scanned, not doing it again

DDraw:full name = C:\SAMPLE\DEBUG\SAMPLE.EXE

DDraw:name = SAMPLE.EXE

DDraw:DirectDrawCreate: pid = fff00c89

DDraw:Reading Registry

DDraw: ModeXOnly: 0

DDraw: EmulationOnly: 0

DDraw: ShowFrameRate: 0

DDraw: EnablePrintScreen: 0

DDraw: DisableMMX: 0

DDraw: DisableWiderSurfaces:0

DDraw: DisableNoSysLock:0

DDraw: ForceNoSysLock:0

DDraw:Signalling DDHELP to create a new DC

DDraw:createDC(display)

DDraw:DIRECTDRAW driver is wrong version, got 0x5250, expected 0x0100

DDraw:getDisplayMode:

DDraw: bpp=8, refresh=0

DDraw: dwHeight=600, dwWidth=800

DDraw: lStride=0

DDraw:Driver says nummodes=9

DDraw:Enum Display Settings says nummodes=9

DDraw:dwModeIndex = 1

DDraw:Masks for current mode are: 00000000 00000000 00000000

DDraw:DirectDrawObjectCreate: oldpdd == 00000000, reset=0

DDraw:DIRECTDRAW object passed in = 00000000

DDraw:oldpdd == 00000000, reset=0

  • Читать дальше
  • 1
  • ...
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: