Texturen met meerdere elementen (Direct3D 9)
Traditionele patronen worden beschouwd als patronen met één element. Met patronen met meerdere elementen kunnen toepassingen tegelijkertijd schrijven naar meerdere elementen van een bitmappatroon vanuit de pixel-shader. Het resultaat in de volgende renderingspas is dat een toepassing een of meer elementen kan gebruiken als een patroon met één element, dat wil gezegd, als invoer voor de pixel-shader. Deze aanvullende elementen kunnen worden beschouwd als een tijdelijk archief voor tussenliggende resultaten die later door de toepassing worden gebruikt.
De eerste generatie hardware die deze functie beschikbaar maakt, heeft de volgende beperkingen:
- Alle patronen met meerdere elementen worden automatisch toegewezen. Deze beperking wordt aangepakt door dit te behandelen als een nieuw type oppervlakindeling met meerdere RGBA-kanalen die zijn interleaved.
- Alle elementen van het patroon van meerdere elementen kunnen dezelfde bitdiepte hebben. Deze beperking wordt uitgedrukt in de naam van de nieuwe surface-indelingen.
- Een patroon met meerdere elementen kan niet het primaire/weer te geven element zijn. Met andere woorden, deze mag alleen buiten het scherm staan. Deze beperking wordt uitgedrukt in de opsomming oppervlakte-indeling.
- Geen dithering, alfatest, fogging, blending, raster-op of maskering is toegestaan. Er wordt geen verwerking van de arcering na pixel uitgevoerd, behalve de z-test en het stenciltest.
- Het patroon kan geen mipmap zijn. Het maken van de mip-keten mislukt.
- Hetzelfde element kan niet worden ingesteld als een bitmappatroon op hetzelfde moment dat het een renderdoel is. Verschillende elementen van hetzelfde patroonoppervlak met meerdere elementen kunnen echter tegelijkertijd patronen zijn en doelen weergeven.
- Er wordt geen antialiasing ondersteund.
- Patronen met meerdere elementen kunnen niet worden gefilterd wanneer ze worden gebruikt als patroon. Deze beperking kan worden geverifieerd met CheckDeviceFormat.
- Patronenoppervlakken met meerdere elementen kunnen niet worden vergrendeld.
- Meer dan één patroonoppervlak met meerdere elementen kan tegelijkertijd worden gebruikt door elk element toe te wijzen aan verschillende fasen, net als bij normale patronen.
- Het patroonoppervlak met meerdere elementen ondersteunt de conversie van gamma van 2.2 tot 1,0 tijdens een leesbewerking, net als bij andere patroonindelingen.
- Sommige implementaties passen het schrijfmasker voor uitvoer (D3DRS_COLORWRITEENABLE) niet toe. Degenen die onafhankelijke schrijfmaskers voor kleur kunnen hebben. Dit wordt uitgedrukt met behulp van een nieuwe mogelijkheidsbit. Het aantal beschikbare onafhankelijke kleurenschrijfmaskers is gelijk aan het maximum aantal elementen waarvan het apparaat geschikt is.
- Wist alle elementen van het patroon met meerdere elementen dat is ingesteld als het renderdoel.
Het gebruik van patronen met meerdere elementen volgt deze stappen:
- Toepassingen ontdekken ondersteuning voor deze functie door te controleren op de beschikbaarheid van patroonindelingen met meerdere elementen.
- De toepassing maakt deze oppervlakken door CreateTexture-aan te roepen.
- De toepassing stelt het oppervlak in als een renderdoel met behulp van de SetRenderTarget aanroep. De pixel-shader biedt uitvoer aan de oppervlakken met behulp van de mov - ps instructie.
- SetTexture- wordt aangeroepen om een patroonoppervlak met meerdere elementen in te stellen op een bepaalde fase. Net als bij andere patronen mag hetzelfde oppervlak in één keer worden ingesteld op meerdere fasen.
- SetSamplerState wordt aangeroepen om D3DSAMP_ELEMENTINDEX in te stellen op het juiste elementnummer in het patroon met meerdere elementen waaruit de samplermonsters afkomstig zijn. De standaardwaarde voor deze status is 0, wat betekent dat patronen van niet-meerdere elementen werken. Als u deze status instelt op een ongepast getal, resulteert dit in een niet-gedefinieerd gedrag: als het patroon met meerdere elementen slechts twee elementen breed is, maar de sampler bijvoorbeeld wordt gevraagd om een steekproef uit het vierde element te nemen.
API-ondersteuning
Hier volgt een samenvatting van de API-elementen die ondersteuning bieden voor patronen met meerdere elementen:
De D3DFMT_MULTI2_ARGB8 oppervlakte-indeling geeft de interleaved aard van de indeling aan.
De status van de D3DSAMP_ELEMENTINDEX sampler geeft aan welke elementindex moet worden gebruikt.
De volgende renderstatussen ondersteunen patronen met meerdere elementen:
- D3DRS_COLORWRITEENABLE1
- D3DRS_COLORWRITEENABLE2
- D3DRS_COLORWRITEENABLE3
D3DRS_COLORWRITEENABLE is van toepassing op het renderdoel (of element) nul.
De vlag D3DPMISCCAPS_INDEPENDENTWRITEMASKS geeft aan dat het apparaat onafhankelijke schrijfmaskers ondersteunt voor patronen met meerdere elementen of meerdere renderdoelen.
Verwante onderwerpen