.RU

2.2DirectX - Объект разработки программа на платформе Microsoft. Net framework


2.2DirectX 2.2.1.История
Изначально нацеленный на разработку видеоигр, DirectX стал популярен и в других областях разработки программного обеспечения. К примеру, DirectX, наряду с OpenGL, получил очень широкое распространение в инженерном/математическом ПО.

В 1994 году Microsoft была практически готова выпустить следующую версию Windows — Windows 95. Главным фактором, определяющим, насколько популярна будет новая ОС, являлся набор программ, которые можно будет запускать под её управлением. В Microsoft пришли к выводу, что, пока разработчики видят DOS более подходящей для написания игровых приложений, коммерческий успех новой ОС весьма сомнителен.

DOS позволяла разработчику получить прямой доступ к видеокарте, клавиатуре/мыши/джойстику и прочим частям системы, в то время как Windows 95, с её защищённой моделью памяти, предоставляла более стандартизованный, но в то же время весьма ограниченный доступ к устройствам. Microsoft нуждалась в новом способе дать разработчику всё, что ему необходимо.

Первый релиз DirectX был выпущен в сентябре 1995 года, под названием «Windows Game SDK».

Ещё до появления DirectX, Microsoft включила OpenGL в ОС Windows NT. Direct3D позиционировался как замена OpenGL в игровой сфере. Отсюда берёт своё начало «священная война» между сторонниками кросс-платформенной OpenGL и доступной лишь в Windows Direct3D. Так или иначе, остальные части DirectX очень часто комбинируются с OpenGL в компьютерных играх, так как OpenGL как таковой не подразумевает функциональность уровня DirectX (например, доступ к клавиатуре/джойстику/мыши, поддержка звука, игры по сети и т. д.).

DirectX является базой для Xbox API. Xbox API схож с DirectX 8.1, но обновление версии, как и на других консолях того времени, невозможно.

В 2002 году Microsoft выпустила DirectX 9 с улучшенной и расширенной поддержкой шейдеров. С 2002 года DirectX неоднократно обновлялся. В августе 2004 года в DirectX была добавлена поддержка шейдеров версии 3.0 (DirectX 9.0c).

В апреле 2005 интерфейс DirectShow был перемещён в Microsoft Platform SDK.
^ 2.2.2. DirectX API
Практически все части DirectX API представляют собой наборы COM-совместимых объектов.


В целом, DirectX подразделяется на:
^ 2.2.3.Интерфейсы DirectDraw и DirectDraw2
В первоначальном варианте библиотеки DirectX (еще в те времена, когда она называлась Game SDK) вся основная функциональность DirectDraw была сосредоточена в интерфейсе DirectDraw. Позднее, с выходом DirectX 2, рабочий интерфейс был усовершенствован. В соответствии со спецификацией СОМ интерфейс DirectDraw не изменился, а для работы с новыми возможностями использовался новый интерфейс DirectDraw2.

Следует заметить, что интерфейс DirectDraw2 представляет собой расширение DirectDraw. Он предоставляет все возможности интерфейса DirectDraw, а также ряд дополнительных. При работе с DirectX версий 2 и выше можно выбирать между интерфейсом DirectDraw и DirectDraw2. Поскольку DirectDraw2 делает все то же, что и DirectDraw, а также многое другое, вряд ли можно найти какие-то доводы в пользу работы с DirectDraw. Кроме того, Microsoft выступает против хаотичного, непоследовательного использования этих интерфейсов. По этим причинам во всех программах, приведенных в книге, будет использован интерфейс DirectDraw2.

Ниже перечислены все функции интерфейсов DirectDraw и DirectDraw2 (в алфавитном порядке):

Compact ()

CreateCIpper()

CreatePalette()

CreateSurface()

DuplicateSurface()

EnumDisplayModes()

EnumSurfaces()

FlipToGDISurface()

GetAvailableVidMem()

GetCaps()

GetDisplayMode()

GetFourCCCodes()

GetGDISurface()

GetMonitorFrequency()

GetScanLine()

GetVerticalBlankStatus()

RestoreDisplayMode()

SetCooperativeLevel()

SetDisplayMode()

WaitForVerticalBlank()

Далее рассмотрены важные для реализации приложения функции интерфейса DirectDraw. Обратим внимание на то, что в оставшейся части этой главы термин интерфейс DirectDraw относится как к интерфейсу DirectDraw, так и к DirectDraw2. Уточнения будут приведены лишь в тех случаях, когда функция отличается в двух интерфейсах.
^ 2.2.3.1Функции создания интерфейсов
Интерфейс DirectDraw представляет саму библиотеку DirectDraw. Этот интерфейс является главным в том отношении, что в нем создаются экземпляры всех остальных интерфейсов DirectDraw. Интерфейс DirectDraw содержит три функции, предназначенные для создания экземпляров интерфейсов:

CreateClipper()

CreatePalette()

CreateSurface()

Функция CreateClipper создает экземпляры интерфейса DirectDrawClipper. Объекты отсечения (clipper) используются не всеми приложениями DirectDraw, так что в некоторых программах эта функция может отсутствовать.

Функция CreatePalette создает экземпляры интерфейса DirectDrawPalette. Палитры, как и интерфейс DirectDrawClipper, используются не всеми приложениями DirectDraw. Например, приложению, работающему только с 16-битными видеорежимами, палитра не понадобится. Тем не менее приложение, работающее в 8-битном видеорежиме, должно создать хотя бы один экземпляр DirectDrawPalette.

Экземпляры интерфейса DirectDrawSurface создаются функцией CreateSurface. Поверхности обязательно присутствуют в любом приложении DirectDraw, работающем с графическими данными, поэтому данная функция используется очень часто.

Экземпляры самого интерфейса DirectDraw создаются функцией DirectDraw Create(), DirectDrawCreate() — одна из немногих самостоятельных функций DirectDraw, не принадлежащих никакому СОМ-интерфейсу.

Функция GetCaps() инициализирует два экземпляра структуры DDCAPS. Первая структура показывает, какие возможности поддерживаются непосредственно видеокартой, а вторая — что доступно посредством программной эмуляции. Функция GetCaps() помогает определить, поддерживаются ли нужные возможности.

DirectDraw автоматически использует аппаратную поддержку, если она имеется, и по умолчанию в случае необходимости переключается на программную эмуляцию. Неудачей заканчиваются вызовы лишь тех функций, которые не поддерживаются ни на аппаратном, ни на программном уровне.
^ 2.2.3.2DirectX Viewer
В DirectX SDK входит программа DXVIEW, которая сообщает о возможностях всех компонентов DirectX, в том числе и DirectDraw. На большинстве компьютеров информация о DirectDraw отображается в двух категориях: Primary Display Driver и Hardware Emulation Layer. Первая категория сообщает о возможностях аппаратных видеосредств. Во второй перечислены возможности, эмулируемые DirectDraw при отсутствии аппаратной поддержки. На компьютерах с двумя и более видеокартами, поддерживаемыми DirectDraw, DXVIEW выводит сведения о способностях каждой из них.

Функция SetCooperativeLevelО определяет уровень кооперации — степень контроля над видеокартой, необходимую для данного приложения. Например, нормальный (normal) уровень кооперации означает, что приложение не сможет изменить текущий видеорежим или задать содержимое всей системной палитры. Монопольный (exclusive) уровень допускает переключение видеорежимов и предоставляет приложению полный контроль над палитрой. Независимо от выбранного уровня вам необходимо вызвать SetCooperativeLevel().
^ 2.2.3.3Функции для работы с видеорежимами
Интерфейс DirectDraw содержит четыре функции для работы с видеорежимами:

С помощью функции EnumDisplayModes() можно получить от DirectDraw список доступных видеорежимов. По умолчанию EnumDisplayModes() перечисляет все видеорежимы, но по описаниям можно исключить из списка режимы, не представляющие интереса. На рынке существует огромное количество видеоустройств, каждое из которых обладает своими возможностями и ограничениями. Не стоит полагаться на автоматическую поддержку любого конкретного видеорежима, за исключением принятого по умолчанию в Windows режима 640х480х8.

Функция GetDisplayMode() получает сведения о текущем видеорежиме. Она заполняет структуру DDSURFACEDESC информацией о горизонтальном и вертикальном разрешениях, глубине и формате пикселей текущего видеорежима. Ту же информацию можно получить и другими способами (например, по описанию первичной поверхности), поэтому эта функция встречается не во всех программах.

Функция SetDisplayMode() активизирует заданный видеорежим. Версия SetDisplay Mode() из интерфейса DirectDraw2 позволяет дополнительно задать частоту смены кадров. Этим она отличается от функции из интерфейса DirectDraw, в которой можно задать только горизонтальное и вертикальное разрешения и глубину пикселей. Функция SetDisp1ayMode() присутствует в любой программе, осуществляющей переключение видеорежимов.

Функция RestoreDisplayMode() восстанавливает видеорежим, действовавший до вызова SetDisplayMode(). Перед вызовом функций SetDisplayMode() и RestoreDisplayMode() необходимо предварительно установить монопольный уровень кооперации вызовом функции SetCooperativeLevel ().


^ 2.2.3.4Функции для работы с поверхностями
Помимо функции CreateSurface() интерфейс DirectDraw содержит следующие функции для работы с поверхностями:

Функция DuplicateSurface() создает копию существующей поверхности. Она копирует только интерфейс поверхности, но не ее содержимое. Копия поверхности использует ту же область памяти, поэтому модификация содержимого памяти приведет к изменению изображения, представленного обеими поверхностями.

Функция EnumSurfaces() используется для перебора всех поверхностей, удовлетворяющих заданному критерию. Если критерий не указан, составляется список всех существующих поверхностей.

Функция FlipToGDISurface() используется перед завершением приложения, осуществляющего переключение страниц, чтобы обеспечить правильное восстановление первичной поверхности. Вспомните о том, что при переключении страниц происходит попеременное отображение двух поверхностей. Это означает, что приложение может завершиться, не восстановив исходной поверхности, отображаемой на экране. Если это произойдет, Windows будет осуществлять вывод на невидимую поверхность. Такой ситуации можно легко избежать с помощью функции FlipToGDISurface().

Функция GetGDISurface возвращает указатель на единственную поверхность, с которой работает GDI. Весь графический вывод Windows осуществляется именно на поверхность GDI. Примером ситуации, когда эта функция может оказаться полезной, является программа копирования экрана, в которой DirectDraw используется для копирования произвольной части рабочего стола.

Функция GetAvailableVidMem() возвращает объем текущей доступной видеопамяти. Эта функция присутствует в интерфейсе DirectDraw2, но отсутствует в DirectDraw. С ее помощью приложение может определить, сколько поверхностей ваше приложение сможет создать в видеопамяти.
^ 2.2.3.5Функции для работы с частотой смены кадров
Интерфейс DirectDraw содержит четыре функции, относящихся не к видеокарте, а к устройству отображения (монитору):

Говоря конкретно, эти функции относятся к механизму смены кадров на мониторе. С их помощью можно реализовать анимации с минимальным мерцанием и задержками. Тем не менее следует учесть, что эти функции поддерживаются не всеми комбинациями видеокарт и мониторов.

Функция GetMonitorFrequency() возвращает текущую частоту смены кадров монитора. Эта частота обычно измеряется в герцах (Гц). Например, частота в 60 Гц означает, что состояние экрана обновляется 60 раз в секунду.

Функция GetScanLine() возвращает номер строки развертки (горизонтального ряда пикселей), обновляемой в данный момент. Она не поддерживается некоторыми комбинациями видеокарт и мониторов. Если данная способность не поддерживается, функция возвращает код ошибки DDERR_UNSUPPORTED.

В высокопроизводительных графических приложениях обновление экрана обычно синхронизируется с процессом вертикальной развертки. Другими словами, первичную поверхность желательно обновлять в тот момент, когда монитор закончил очередное обновление экрана. В противном случае в одной части экрана будут отображаться новые данные, а в другой — старые. Подобный эффект называется расхождением (tearing). По умолчанию DirectDraw автоматически синхронизирует обновление экрана с завершением вертикальной развертки. В нестандартных ситуациях можно добиться синхронизации с помощью функций GetVerticalBlankStatus() и WaitForVerticalBlank().

36-upravlenie-konfliktom-37-konflikt-v-organizacii-metodicheskie-rekomendacii-po-podgotovke-k-zachetam-ekzamenam.html
36-vidi-obyazatelstv-po-osnovaniyam-ih-vozniknoveniya-1-obshaya-harakteristika-istochnikov-grazhdanskogo-i-torgovogo.html
36-voennaya-nauka-v-rossii-zarozhdenie-formirovanie-razvitie-xvii-xviii-vv.html
36-vvod-s-klaviaturi-i-vivod-na-ekran-sostavlenie-programmi-na-yazike-programmirovaniya-otladka-i-testirovanie-programmi.html
360-abzac-v-dialogicheskom-i-monologicheskom-tekste-sovremennij-russkij-yazik.html
361-29-80-faks-044-254-55-67-mob.html
  • exchangerate.bystrickaya.ru/korporativnie-seti.html
  • writing.bystrickaya.ru/akcionernie-obshestva-trudovoj-dogovor.html
  • reading.bystrickaya.ru/metodicheskie-ukazaniya-dlya-studentov-po-izucheniyu-disciplini-opd-f-01-apparatnie-sredstva-vichislitelnoj-tehniki.html
  • kanikulyi.bystrickaya.ru/x-x-v-g-bocharova-chlen-korrespondent-rao-doktor-pedagogicheskih-nauk-professor.html
  • paragraf.bystrickaya.ru/vserossijskie-sorevnovaniya-na-prizi-a-nikitina-kalendarnij-plan-fizkulturno-massovih-i-sportivnih-meropriyatij.html
  • prepodavatel.bystrickaya.ru/tema-62-63-skd-institutov-massovoj-kommunikacii-i-obshestvennih-formirovanij.html
  • shkola.bystrickaya.ru/razvitie-stabilizacionnogo-fonda.html
  • esse.bystrickaya.ru/punkt-4-predvaritelnoj-povestki-dnya-prochie-voprosi-posleduyushaya-deyatelnost-v-kontekste-kruglogo-stola-po-problemam-izmeneniya-klimata-i-transporta.html
  • nauka.bystrickaya.ru/upravlenie-stoimostyu-kompanij.html
  • upbringing.bystrickaya.ru/metod-sochinenie-metodicheskie-materiali-i-rekomendacii-pechataetsya-po-resheniyu-metodicheskogo-soveta-moskovskogo.html
  • uchitel.bystrickaya.ru/progressive-taxation-essay-research-paper-a-discussion.html
  • studies.bystrickaya.ru/celeustremlennie-elementi-dissertaciya-na-soiskanie-uchenoj-stepeni.html
  • knigi.bystrickaya.ru/registracionnaya-karta-uchastnika-nauchnoj-konferencii.html
  • shpora.bystrickaya.ru/xi-ukreplenie-zdorovya-pitanie-vospitannikov-plan-raboti-shkoli-na-20102011-uchebnij-god.html
  • uchebnik.bystrickaya.ru/uchebno-metodicheskij-kompleks-rabochaya-uchebnaya-programma-dlya-studentov-ochnoj-formi-obucheniya-napravleniya-021300-62-kartografiya-geoinformatika.html
  • tetrad.bystrickaya.ru/vengriya-svodnie-dannie-mezhdunarodnih-meropriyatij-v-oblasti-obrazovaniya-nauki-i-innovacij-na-20-1-1-2013-gg.html
  • turn.bystrickaya.ru/p-o-r-ya-d-o-k-postanovleni-e.html
  • institut.bystrickaya.ru/tehnicheskoe-zadanie-na-postavku-literaturi-stranica-2.html
  • education.bystrickaya.ru/2metodi-formalizacii-predmetnoj-oblasti-i-modelirovanie-yu-v-kurnosov-p-yu-konotopov.html
  • student.bystrickaya.ru/3-struktura-podgotovki-specialistov-zakonodatelstvu-ustavu-i-polozheniyu.html
  • studies.bystrickaya.ru/analiz-i-optimizaciya-chislennosti-i-strukturi-rabotnikov-apparata-upravleniya-predpriyatiem.html
  • znaniya.bystrickaya.ru/rabochaya-programma-po-discipline-en-r-01-tehnicheskaya-mikrobiologiya-mnogostupenchatoj-professionalnoj-podgotovki-specialistov-po-napravleniyu-655900.html
  • bukva.bystrickaya.ru/mirovie-informacionnie-seti-osnovnie-svojstva-primeri-i-osobennosti.html
  • bukva.bystrickaya.ru/ocenka-finansovogo-sostoyaniya-predpriyatiya-na-primere-ooo-montazhnik.html
  • holiday.bystrickaya.ru/obrazovatelnaya-programma-osnovi-sociologicheskih-issledovanij-dlya-detej-ot-14-do-18-let-prodolzhitelnost-programmi-2-goda.html
  • tasks.bystrickaya.ru/4-buhgalterskij-uchet-v-sssr-rekomendovano-uchenim-sovetom.html
  • exchangerate.bystrickaya.ru/logistika-chast-11.html
  • uchit.bystrickaya.ru/tekst-lekcii-5-kurs-uchebno-metodicheskie-materiali-po-discipline-stilistika-avtor-razrabotchik.html
  • zanyatie.bystrickaya.ru/marketingovie-issledovaniya-v-interesah-prodvizheniya-produkcii-voennogo-naznacheniya-na-mirovoj-rinok-oruzhiya.html
  • testyi.bystrickaya.ru/67-ocenka-ekonomicheskoj-effektivnosti-upravlencheskih-reshenij-metodicheskie-rekomendacii-po-provedeniyu-itogovoj.html
  • thesis.bystrickaya.ru/prilozhenie-4-ispolzovani-materiali-podgotovlennie-olgoj-gnezdilovoj-i-andreem-rodionovim.html
  • uchitel.bystrickaya.ru/rabochaya-programma-po-otorinolaringologii-kod-disciplini-oto-3223-dlya-specialnosti-051302-stomatologiya.html
  • desk.bystrickaya.ru/osobennosti-imushestvennoj-grazhdansko-pravovoj-otvetstvennosti-obrazovatelnogo-uchrezhdeniya.html
  • notebook.bystrickaya.ru/klimaticheskie-usloviya-intervyu-s-semiletnim-rebenkom-iz-knigi-zhana-pyazhe-mir-v-predstavlenii-rebenka.html
  • composition.bystrickaya.ru/plani-seminarskih-zanyatij-po-discipline-sravnitelnoe-pravovedenie-v-sfere-ugolovnogo-prava-podgotovlena-docentom-kafedri-ugolovnogo-prava-i-kriminologii-kandidatom-yuridicheskih-nauk-a.html
  • © bystrickaya.ru
    Мобильный рефератник - для мобильных людей.