Megosztás a következőn keresztül:


Felületek átfordítása (Direct3D 9)

A Direct3D-alkalmazások általában egy animált sorozatot jelenítenek meg az animáció kereteinek háttérpufferekben való létrehozásával és sorozatban való bemutatásával. A háttérpufferek swap láncokba vannak rendezve. A swap chain egy sor puffer, amely egymás után lapozza a képernyőt. Ezzel egy jelenetet jeleníthet meg a memóriában, majd a renderelés befejezésekor a képernyőre fordíthatja a jelenetet. Ez elkerüli a szakadásnak nevezett jelenséget, és zökkenőmentesebb animációt tesz lehetővé.

A Direct3D-ben létrehozott összes eszköz legalább egy felcserélési lánccal rendelkezik. Az első Direct3D-eszköz inicializálásakor be kell állítania a D3DPRESENT_PARAMETERSBackBufferCount tagját, amely tájékoztatja a Direct3D-t a felcserélési láncban lévő háttérpufferek számáról. Az IDirect3D9::CreateDevice hívása ezután létrehozza a Direct3D-eszközt és a megfelelő felcserélési láncot.

Ha IDirect3DDevice9::Present használja a felület flip művelet igénylésére, a rendszer felcseréli az első puffer és a háttérpufferek felületi memóriájának mutatóit. A tükrözés olyan mutatóváltással történik, amelyet a megjelenítő eszköz a memória hivatkozására használ, nem pedig a felületi memória másolásával. Ha egy tükrözési lánc egy előtérpuffert és egynél több hátsó puffert tartalmaz, a mutatók körkörös mintában lesznek átváltva, ahogyan az az alábbi ábrán látható.

fordító lánc diagramja egy első pufferrel és két hátsó pufferrel

További felcserélési láncokat hozhat létre egy eszközhöz az IDirect3DDevice9::CreateAdditionalSwapChainmeghívásával. Az alkalmazások nézetenként egy felcserélési láncot hozhatnak létre, és az egyes felcserélési láncokat egy adott ablakhoz társíthatják. Az alkalmazás képeket jelenít meg az egyes felcserélési láncok háttérpuffereiben, majd egyenként jeleníti meg őket. Az IDirect3DDevice9::CreateAdditionalSwapChain által két paraméter egy D3DPRESENT_PARAMETERS struktúrára mutató mutató, a mutató címe pedig egy IDirect3DSwapChain9 interfészre mutat. Ezután IDirect3DSwapChain9::Present használatával megjelenítheti a következő háttérpuffer tartalmát az első pufferben. Vegye figyelembe, hogy egy eszköz csak egy teljes képernyős felcserélési lánccal rendelkezhet.

Egy adott háttérpufferhez az IDirect3DDevice9::GetBackBuffer vagy IDirect3DSwapChain9::GetBackBuffer metódusok meghívásával férhet hozzá, amely egy mutatót ad vissza egy IDirect3DSurface9 felületre, amely a visszaadott visszapufferfelületet jelöli. Vegye figyelembe, hogy a metódus meghívása növeli az IDirect3Device9 felület belső hivatkozásainak számát, ezért mindenképpen hívja meg IUnknown, ha ezzel a felülettel végzett, vagy memóriavesztést fog kapni.

Ne feledje, hogy a Direct3D úgy tükrözi a felületeket, hogy felcseréli a felületi memória mutatóit a felcserélési láncon belül, nem pedig maguk a felületek felcserélésével. Ez azt jelenti, hogy mindig arra a háttérpufferre fog renderelni, amelyik következőként jelenik meg.

Fontos megjegyezni, hogy különbséget kell tenni a megjelenítőadapter-illesztőprogram által végrehajtott "átfordító művelet" és a D3DSWAPEFFECT_FLIP használatával létrehozott swap láncra alkalmazott "Present" művelet között.

A "flip" kifejezés hagyományosan egy olyan műveletet jelöl, amely megváltoztatja a videomemória-címek tartományát, amelyet a kijelzőadapter használ a kimeneti jel létrehozásához, ezzel előidézve, hogy egy korábban rejtett háttérpuffer tartalma jelenjen meg. A Direct3D 9-ben a kifejezést gyakran általánosabban használják egy háttérpuffer bemutatására a D3DSWAPEFFECT_FLIP felcserélési effektussal létrehozott bármely felcserélési láncban.

Bár az ilyen "jelenlegi" műveletek szinte mindig tükrözési műveletekkel vannak implementálva, amikor a felcserélési lánc teljes képernyős, ezek szükségszerűen másolási műveletekkel vannak implementálva, amikor a felcserélési lánc ablakba kerül. Ezenkívül a kijelzőadapter-illesztő tükrözéssel implementálhatja a Jelen műveleteket a teljes képernyős felcserélési láncokon a D3DSWAPEFFECT_DISCARD és a D3DSWAPEFFECT_COPY alapján.

A fenti tárgyalás a D3DSWAPEFFECT_FLIP segítségével létrehozott teljes képernyős swaplánc általánosan használt esetére vonatkozik.

Az ablakos és teljes képernyős csere láncok különböző cserélési hatásainak általánosabb tárgyalását lásd: D3DSWAPEFFECT.

Direct3D-felületek