Meerdere koppen (Direct3D 9)
Multihead-kaarten zijn kaarten met een gemeenschappelijke framebuffer en accelerator, onafhankelijke digitaal-naar-analoge conversieprogramma's (DAC's) en monitoruitvoer. Dergelijke apparaten kunnen veel meer bruikbare ondersteuning voor meerdere beeldschermen bieden dan een vergelijkbaar aantal heterogene beeldschermadapters.
Kaarten met meerdere koppen worden in de API weergegeven als een apparaat op één API-niveau waarmee verschillende wisselketens op volledig scherm kunnen worden aangestuurd. Daarom worden alle resources gedeeld met alle hoofden en heeft elk hoofd precies dezelfde mogelijkheden. Elke kop kan worden ingesteld op onafhankelijke weergavemodi. U kunt afzonderlijke aanroepen gebruiken om IDirect3DSwapChain9::P resent om elk hoofd te vernieuwen. U kunt ook één aanroep gebruiken voor het IDirect3DDevice9::P resent om elk hoofd opeenvolgend te vernieuwen.
Notitie
Het vernieuwen van elk hoofd gebeurt niet tegelijk met één aanroep naar IDirect3DDevice9::P resent. Huidige statistieken in Direct3D 9Ex kunnen de D3DPRESENTSTATS structuur gebruiken om de vernieuwingen dicht bij elkaar te houden om de gevolgen van het scheuren over meerdere koppen van adapters te beperken. Zie Direct3D 9Ex Improvementsvoor meer informatie over het synchroniseren van frames van Direct3D 9Ex-modeltoepassingen.
Elke wisselketen voor een multihead-apparaat moet volledig scherm zijn. Wanneer een apparaat de modus met meerdere koppen heeft opgegeven, moet het volledig scherm blijven. Voor de overgang terug naar de venstermodus is de vernietiging van het apparaat vereist (met uitzondering van de normale bewerking Alt+TAB-to-minimaliseerbewerking).
De oude methode voor het delen van videogeheugen tussen de hoofden en het behandelen van elk hoofd als een volledig onafhankelijke accelerator is nog steeds een algemeen gebruiksscenario. Dit voorstel vervangt dit mechanisme niet, tenzij de toepassing specifiek is gecodeerd om te functioneren in de modus Direct3D 9 multihead.
Stuurprogramma's krijgen voldoende kennis om te schakelen tussen de twee bedieningsmodi.
Eén hoofd wordt het hoofdhoofd genoemd en alle andere hoofden op dezelfde kaart worden ondergeschikte hoofden genoemd. Als meer dan één multihead-adapter aanwezig is in een systeem, worden de master en de onderliggende elementen van één multihead-adapter een groep genoemd. Groepen worden aangeduid door de adapterordinaal van hun hoofdhoofd.
De D3DCAPS9 structuur is bijgewerkt om de volgende nieuwe hardwarelimieten beschikbaar te maken.
UINT NumberOfAdaptersInGroup;
UINT MasterAdapterOrdinal;
UINT AdapterOrdinalInGroup;
- NumberOfAdaptersInGroup is 1 voor conventionele adapters en groter dan 1 voor de hoofdadapter van een kaart met meerdere koppen. De waarde is 0 voor een onderliggende adapter van een kaart met meerdere koppen. Elke kaart kan maximaal één master hebben, maar kan veel ondergeschikten hebben.
- MasterAdapterOrdinal geeft aan welk apparaat de master is voor deze ondergeschikte.
- AdapterOrdinalInGroup geeft de volgorde aan waarin naar hoofden wordt verwezen door de API. De hoofdadapter heeft altijd AdapterOrdinalInGroup 0. Deze waarden komen niet overeen met de adapterordinals die worden doorgegeven aan de IDirect3D9-methoden, maar zijn alleen van toepassing op koppen binnen een groep.
Met deze definitie kunnen kaarten met meerdere koppen meerdere adapters blijven presenteren alsof ze onafhankelijke kaarten waren, net zoals in DirectX 8.
Als u een apparaat met meerdere koppen wilt maken, geeft u de gedragsvlag op D3DCREATE_ADAPTERGROUP_DEVICE in IDirect3D9::CreateDevice. De presentatieparameters (een matrix van D3DPRESENT_PARAMETERS) moeten NumberOfAdaptersInGroup-elementen bevatten. De runtime wijst elk element toe aan elk hoofd in de numerieke volgorde AdapterOrdinalInGroup. Wanneer D3DCREATE_ADAPTERGROUP_DEVICE is ingesteld, moet elke presentatieparameter het volgende hebben:
- Het vensterlid dat is ingesteld op FALSE (met andere woorden, volledig scherm).
- Dezelfde waarde voor het lid EnableAutoDepthStencil van D3DPRESENT_PARAMETERS.
Als EnableAutoDepthStencil bovendien is TRUE, moet elk van de volgende velden dezelfde waarde hebben voor elke D3DPRESENT_PARAMETERS:
- AutoDepthStencilFormat
- BackBufferWidth
- BackBufferHeight
- BackBufferFormat
Als DAC is ingesteld, zijn aanvullende aanroepen naar IDirect3DDevice9::CreateAdditionalSwapChain ongeldig.
Als het apparaat is gemaakt met de DAC, verwacht IDirect3DDevice9::Reset een matrix van D3DPRESENT_PARAMETERS.
Elke D3DPRESENT_PARAMETERS structuur die wordt doorgegeven aan IDirect3DDevice9::Reset moet volledig scherm zijn. Als u wilt teruggaan naar de venstermodus, moet de toepassing het apparaat vernietigen en een niet-multihead-apparaat opnieuw maken in de venstermodus.
Hier volgt een basisgebruiksscenario:
1. Create multihead device
2. For each swap chain of device:
3. Call GetBackBuffer for the i-th swapchain
4. Call SetRenderTarget
5. Call DrawPrimitive
6. Optionally call swapchain::Present (or wait until
all swap chains are drawn and present outside of loop)
7. End the for loop
8. Optionally present all swap chains with device::Present
Zie IDirect3D9::CreateDevice en IDirect3DDevice9::GetNumberOfSwapChainsvoor meer informatie.
Verwante onderwerpen