Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π“Ρ€Π°Ρ„ΠΈΠΊΠ° для Windows срСдствами DirectDrawΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 5

Автор Бтэн Π’Ρ€ΡƒΡ…ΠΈΠ»ΡŒΠΎ

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ DirectDraw позволяСт Ρ‚ΠΎΡ‡Π½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ возмоТности ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΈ Π½Π° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅. Ѐункция GetCaps() ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π²Π° экзСмпляра структуры DDCAPS. ΠŸΠ΅Ρ€Π²Π°Ρ структура ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ возмоТности ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ нСпосрСдствСнно Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚ΠΎΠΉ, Π° вторая β€” Ρ‡Ρ‚ΠΎ доступно посрСдством ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ эмуляции. Ѐункция GetCaps() ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π»ΠΈ Π½ΡƒΠΆΠ½Ρ‹Π΅ возмоТности.

DirectDraw автоматичСски ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ, Ссли ΠΎΠ½Π° имССтся, ΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² случаС нСобходимости ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΡƒΡŽ ΡΠΌΡƒΠ»ΡΡ†ΠΈΡŽ. НСудачСй Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π²Ρ‹Π·ΠΎΠ²Ρ‹ лишь Ρ‚Π΅Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½ΠΈ Π½Π° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΌ, Π½ΠΈ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅.

Π‘ΠžΠ’Π•Π’

DirectX Viewer

Π’ DirectX SDK Π²Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° DXVIEW, которая сообщаСт ΠΎ возмоТностях всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² DirectX, Π² Ρ‚ΠΎΠΌ числС ΠΈ DirectDraw. На Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² информация ΠΎ DirectDraw отобраТаСтся Π² Π΄Π²ΡƒΡ… катСгориях: Primary Display Driver ΠΈ Hardware Emulation Layer. ΠŸΠ΅Ρ€Π²Π°Ρ катСгория сообщаСт ΠΎ возмоТностях Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… видСосрСдств. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ пСрСчислСны возмоТности, эмулируСмыС DirectDraw ΠΏΡ€ΠΈ отсутствии Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ. На ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… с двумя ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌΠΈ DirectDraw, DXVIEW Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ свСдСния ΠΎ способностях ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ….

Ѐункция SetCooperativeLevel()

Ѐункция SetCooperativeLevel() опрСдСляСт ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ β€” ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ контроля Π½Π°Π΄ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚ΠΎΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ прилоТСния. НапримСр, Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ (normal) ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ смоТСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌ ΠΈΠ»ΠΈ Π·Π°Π΄Π°Ρ‚ΡŒ содСрТимоС всСй систСмной ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹. ΠœΠΎΠ½ΠΎΠΏΠΎΠ»ΡŒΠ½Ρ‹ΠΉ (exclusive) ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ допускаСт ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌΠΎΠ² ΠΈ прСдоставляСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΠΏΠ°Π»ΠΈΡ‚Ρ€ΠΎΠΉ. НСзависимо ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ уровня Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ SetCooperativeLevel().

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌΠ°ΠΌΠΈ

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ DirectDraw содСрТит Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌΠ°ΠΌΠΈ:

β€’ EnumDisplayModes()

β€’ GetDisplayMode()

β€’ RestoreDisplayMode()

β€’ SetDisplayMode()

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ EnumDisplayModes() ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ DirectDraw список доступных Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌΠΎΠ². По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ EnumDisplayModes() пСрСчисляСт всС Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌΡ‹, Π½ΠΎ ΠΏΠΎ описаниям ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· списка Ρ€Π΅ΠΆΠΈΠΌΡ‹, Π½Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ для вас интСрСса. Ѐункция EnumDisplayModes() Π½Π΅ обязана ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ это ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌΠΎΠ². На Ρ€Ρ‹Π½ΠΊΠ΅ сущСствуСт ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство видСоустройств, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ своими возмоТностями ΠΈ ограничСниями. НС стоит ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ любого ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌΠ°, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ принятого ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Windows Ρ€Π΅ΠΆΠΈΠΌΠ° 640Γ—480Γ—8.

Ѐункция SetDisplayMode() Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌ. ВСрсия SetDisplay Mode() ΠΈΠ· интСрфСйса DirectDraw2 позволяСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ частоту смСны ΠΊΠ°Π΄Ρ€ΠΎΠ². Π­Ρ‚ΠΈΠΌ ΠΎΠ½Π° отличаСтся ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· интСрфСйса DirectDraw, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ пиксСлСй. Ѐункция SetDisplayMode() присутствуСт Π² любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌΠΎΠ².

Ѐункция RestoreDisplayMode() восстанавливаСт Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅ΠΆΠΈΠΌ, Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Π²ΡˆΠΈΠΉ Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° SetDisplayMode(). ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ SetDisplayMode() ΠΈ RestoreDisplayMode() Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SetCooperativeLevel().

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с повСрхностями

Помимо Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CreateSurface() интСрфСйс DirectDraw содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с повСрхностями:

β€’ DuplicateSurface()

β€’ EnumSurfaces()

β€’ FlipToGDISurface()

β€’ GetGDISurface()

β€’ GetAvailableVidMem()

β€’ Compact()

Ѐункция DuplicateSurface() создаСт копию ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ повСрхности. Она ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ интСрфСйс повСрхности, Π½ΠΎ Π½Π΅ Π΅Π΅ содСрТимоС. Копия повСрхности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, поэтому модификация содСрТимого памяти ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ измСнСнию изобраТСния, прСдставлСнного ΠΎΠ±Π΅ΠΈΠΌΠΈ повСрхностями.

Ѐункция EnumSurfaces() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° всСх повСрхностСй, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΡ… Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ. Если ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, составляСтся список всСх ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… повСрхностСй.

Ѐункция FlipToGDISurface() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ прилоТСния, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ страниц, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ восстановлСниС ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΉ повСрхности. ВспомнитС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ страниц происходит ΠΏΠΎΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… повСрхностСй. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ, Π½Π΅ восстановив исходной повСрхности, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠΉ Π½Π° экранС. Если это ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Windows Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡƒΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ. Π’Π°ΠΊΠΎΠΉ ситуации ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ FlipToGDISurface().

Ѐункция GetGDISurface() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ GDI. Π’Π΅ΡΡŒ графичСский Π²Ρ‹Π²ΠΎΠ΄ Windows осущСствляСтся ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ GDI. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ситуации, ΠΊΠΎΠ³Π΄Π° эта функция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, являСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° копирования экрана, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ DirectDraw ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для копирования ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ части Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ стола.

Ѐункция GetAvailableVidMem() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ объСм Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ доступной видСопамяти. Π­Ρ‚Π° функция присутствуСт Π² интСрфСйсС DirectDraw2, Π½ΠΎ отсутствуСт Π² DirectDraw. Π‘ Π΅Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, сколько повСрхностСй вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ смоТСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π² видСопамяти.

Ѐункция Compact() Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² DirectX, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΎΠ½Π° обСспСчит ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π΄Π΅Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ видСопамяти. Если вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ постоянно создаСт ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ повСрхности, находящиСся Π² видСопамяти, дСфрагмСнтация ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ°Π»ΠΎ мСста.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с частотой смСны ΠΊΠ°Π΄Ρ€ΠΎΠ²

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ DirectDraw содСрТит Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, относящихся Π½Π΅ ΠΊ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Π΅, Π° ΠΊ устройству отобраТСния (ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Ρƒ):

β€’ GetMonitorFrequency()

β€’ GetScanLine()

β€’ GetVerticalBlankStatus()

β€’ WaitForVerticalBlank()

Говоря ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ, эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ относятся ΠΊ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ смСны ΠΊΠ°Π΄Ρ€ΠΎΠ² Π½Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π΅. Π‘ ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ€Ρ†Π°Π½ΠΈΠ΅ΠΌ ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ слСдуСт ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π΅ всСми комбинациями Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΎΠ².

Ѐункция GetMonitorFrequency() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ частоту смСны ΠΊΠ°Π΄Ρ€ΠΎΠ² ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°. Π­Ρ‚Π° частота ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ измСряСтся Π² Π³Π΅Ρ€Ρ†Π°Ρ… (Π“Ρ†). НапримСр, частота Π² 60 Π“Ρ† ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ состояниС экрана обновляСтся 60 Ρ€Π°Π· Π² сСкунду.

Ѐункция GetScanLine() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ строки Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠΈ (Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ряда пиксСлСй), обновляСмой Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Она Π½Π΅ поддСрТиваСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ комбинациями Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΎΠ². Если данная ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π½Π΅ поддСрТиваСтся, функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ошибки DDERR_UNSUPPORTED.

Π’ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… графичСских прилоТСниях ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ экрана ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ синхронизируСтся с процСссом Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠΈ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΡƒΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ» ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ экрана. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π² ΠΎΠ΄Π½ΠΎΠΉ части экрана Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π½ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” старыС. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ эффСкт называСтся расхоТдСниСм (tearing). По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ DirectDraw автоматичСски синхронизируСт ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ экрана с Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠΈ. Π’ нСстандартных ситуациях ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ синхронизации с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ GetVerticalBlankStatus() ΠΈ WaitForVerticalBlank().

Ѐункция GetFourCCCodes()

Наш ΠΎΠ±Π·ΠΎΡ€ интСрфСйса DirectDraw Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ GetFourCCCodes(). Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄Ρ‹ FourCC, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚ΠΎΠΉ. ΠšΠΎΠ΄Ρ‹ FourCC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для описания YUV-повСрхностСй, Π½Π΅ относящихся ΠΊ стандарту RGB. ΠœΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ повСрхности, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ выходят Π·Π° Ρ€Π°ΠΌΠΊΠΈ этой ΠΊΠ½ΠΈΠ³ΠΈ.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ DirectDrawSurface  

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ интСрфСйсы DirectDrawSurface, ΠΊΠ°ΠΊ ΠΈ интСрфСйсы DirectDraw, Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΈΠ·-Π·Π° особСнностСй спСцификации COM. Π’ исходном Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π° с повСрхностями ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ»Π°ΡΡŒ Ρ‡Π΅Ρ€Π΅Π· интСрфСйс DirectDrawSurface. Π’ DirectX 2 появились Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности, прСдставлСнныС интСрфСйсом DirectDrawSurface2, Π° Π² DirectX 5 Π²ΠΎΠ·Π½ΠΈΠΊ интСрфСйс DirectDrawSurface3.

Π₯отя Π² этой ΠΊΠ½ΠΈΠ³Π΅ вмСсто DirectDraw ΠΏΠΎΠ²ΡΡŽΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ интСрфСйс DirectDraw2, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с повСрхностями ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ исходного интСрфСйса DirectDrawSurface, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ нововвСдСния интСрфСйсов DirectDrawSurface2 ΠΈ DirectDrawSurface3 Π½Π΅ слишком Π²Π°ΠΆΠ½Ρ‹. Π’ ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части ΠΊΠ½ΠΈΠ³ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ интСрфСйс DirectDrawSurface Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ всС Ρ‚Ρ€ΠΈ интСрфСйса, Ссли ΠΏΡ€ΠΈ этом Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ двусмыслСнности.

Π‘Π°ΠΌΡ‹ΠΉ большой ΠΈΠ· всСх интСрфСйсов DirectDraw, DirectDrawSurface, позволяСт ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΡ‚ΠΈΡ€Π°Ρ‚ΡŒ содСрТимоС повСрхности, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ ΠΎΠ±Ρ‰Π΅ΠΉ слоТности ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ 36 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, пСрСчислСнных Π½ΠΈΠΆΠ΅ (Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС):