Statusobjecten (Direct3D 10)
In Direct3D 10 wordt de apparaatstatus gegroepeerd in statusobjecten die de kosten van statuswijzigingen aanzienlijk verlagen. Er zijn verschillende statusobjecten en elk object is ontworpen voor het initialiseren van een set statussen voor een bepaalde pijplijnfase. U kunt maximaal 4096 van elk type statusobject maken.
- Input-Layout
- Rasterizer State
- Depth-Stencil
- Blend State
- samplerstatus
- Prestatieoverwegingen
- Verwante onderwerpen
Input-Layout staat
Deze groep statussen (zie D3D10_INPUT_ELEMENT_DESC) bepaalt hoe de fase van de invoerassembly gegevens uit de invoerbuffers leest en samenvoegt voor gebruik door de hoekpunt-shader. Dit omvat status zoals het aantal elementen in de invoerbuffer en de handtekening van de invoergegevens. De fase invoerassemblyer is een nieuwe fase in de pijplijn waarvan de taak primitieven uit het geheugen naar de pijplijn moet streamen.
Zie CreateInputLayout-als u een object met de indelingsstatus wilt maken.
Rasterizerstatus
Deze groep statussen (zie D3D10_RASTERIZER_DESC) initialiseert de rasterizerfase. Dit object bevat de status, zoals vul- of selectiemodi, het inschakelen van een schaarrechthoek voor het knippen en het instellen van multisample-parameters. In deze fase worden primitieven in pixels gerasterd en worden bewerkingen uitgevoerd zoals knipsels en toewijzingsprimitief aan de viewport.
Zie CreateRasterizerStateom een rasterizerstatusobject te maken.
Depth-Stencil staat
Deze statusgroep (zie D3D10_DEPTH_STENCIL_DESC) initialiseert het dieptestencilgedeelte van de fase van de uitvoerfusie. In het bijzonder initialiseert dit object diepte- en stenciltests.
Zie CreateDepthStencilStateals u een diepte-stencilstatusobject wilt maken.
Mixstatus
Deze groep statussen (zie D3D10_BLEND_DESC) initialiseert het menggedeelte van de fase van uitvoerfusie.
Zie CreateBlendStateom een blend-state-object te maken.
Samplerstatus
Met deze groep statussen (zie D3D10_SAMPLER_DESC) wordt een sampler-object geïnitialiseerd. Een sampler-object wordt gebruikt door de shader-fasen om patronen in het geheugen te filteren.
Verschillen tussen Direct3D 9 en Direct3D 10:
- In Direct3D 10 is het sampler-object niet langer gebonden aan een specifiek patroon, maar wordt alleen beschreven hoe u filtert op basis van een gekoppelde resource.
Zie CreateSamplerStateom een sampler-statusobject te maken.
Prestatieoverwegingen
Het ontwerpen van de API voor het gebruik van statusobjecten maakt verschillende prestatievoordelen. Dit omvat het valideren van de status tijdens het maken van objecten, het in de cache opslaan van statusobjecten in hardware en het aanzienlijk verminderen van de hoeveelheid status die wordt doorgegeven tijdens een API-aanroep voor statusinstellingen (door een ingang door te geven aan het statusobject in plaats van de status).
Als u deze prestatieverbeteringen wilt bereiken, moet u uw statusobjecten maken wanneer uw toepassing wordt gestart, ruim vóór de renderlus. Statusobjecten zijn onveranderbaar, dat wil gezegd, wanneer ze zijn gemaakt, kunt u ze niet meer wijzigen. In plaats daarvan moet u ze vernietigen en opnieuw maken. Voor deze beperking kunt u maximaal 4096 van elk type statusobjecten maken. U kunt bijvoorbeeld verschillende samplerobjecten maken met verschillende combinaties van samplerstatussen. Het wijzigen van de samplerstatus wordt vervolgens uitgevoerd door de juiste Set-API aan te roepen die een ingang doorgeeft aan het object (in plaats van de samplerstatus). Dit vermindert de hoeveelheid overhead tijdens elk renderframe aanzienlijk voor het wijzigen van de status, omdat het aantal aanroepen en de hoeveelheid gegevens aanzienlijk worden verminderd.
U kunt er ook voor kiezen om het effectsysteem te gebruiken dat automatisch het efficiënt maken en vernietigen van statusobjecten voor uw toepassing beheert.
Verwante onderwerpen