Delen via


Effecten (Direct3D 9)

Met een Microsoft DirectX-effect kan de integratie van hoekpunt- en pixel-shaders met pijplijnstatus objecten weergeven. Effecten zijn de volgende logische stap bij het combineren van shaders om unieke rendervoorwaarden te produceren.

Effecten bieden ook een handige manier om shaders te schrijven voor verschillende hardwareversies. Omdat verschillende videokaarten verschillende functionaliteiten ondersteunen, kan een toepassing verschillende technieken schrijven die op verschillende apparaten worden uitgevoerd. Als de toepassing op de nieuwste en beste hardware wordt uitgevoerd, kan de toepassing op deze manier de meest geavanceerde effecttechniek uitvoeren. Aan de andere kant kunnen minder geavanceerde effecttechnieken automatisch worden gekozen om te worden uitgevoerd op minder dure of minder geschikte hardware.

Een effect kan de hoekpuntverwerking en een deel van de pixelverwerking die door de grafische pijplijn wordt uitgevoerd, vervangen. Een voorbeeld van een effect dat gebruikmaakt van een hoekpunt-shader en een pixel-shader bevindt zich in het BasicHLSL-voorbeeld. U kunt dit voorbeeld ophalen en hierover leren via de DirectX SDK. Zie Waar is de DirectX SDK?.

Zie de volgende onderwerpen voor meer informatie over effecten:

Effecten en de 3D-pijplijn

In het volgende diagram ziet u de pijplijn.

diagram van de 3d-pijplijn

De pijplijn transformeert invoergegevens in uitvoer pixels die de framebuffer vullen. De invoergegevens zijn afkomstig van objecten die bestaan uit hoekpunten in objectruimte of oppervlakken met een hogere volgorde die zijn gemaakt op basis van N-patches, rechthoekpatches en driehoekpatches. Zodra de invoergegevens zijn tessellated, voert de pijplijn hoekpuntverwerking, primitieve verwerking en pixelverwerking uit voordat de uiteindelijke pixelkleuren worden gegenereerd.

Hoekpunt- en pixelverwerking kan worden uitgevoerd door de pijplijn met vaste functies of kan worden geïmplementeerd met programmeerbare shaders. De invoergegevenssseling, primitieve verwerking en gegevensuitvoer worden beheerd door de pijplijnstatus. Dit alles kan in een effect worden geïntegreerd. Met een effect wordt de status ingesteld die bepaalt hoe de pijplijn functioneert. Effecten beheren programmeerbare shaders en vaste functiestatus.

Effecten kunnen de status opslaan en herstellen, waardoor het apparaat dezelfde status heeft als voordat het effect werd uitgevoerd. De statustypen die een effect kan beheren, zijn:

  • Arceringsstatus. Dit omvat het maken en verwijderen van shaders, het instellen van shader-constanten, het instellen van de shaderstatus en het weergeven met shaders.
  • Patroon- en samplerstatus. Dit omvat het opgeven van patroonbestanden, initialiseren van patroonfasen, het maken van sampler-objecten en het instellen van de samplerstatus.
  • Andere pijplijnstatus. Dit omvat statussen voor het instellen van transformaties, belichting, materialen en renderingopties. Dit kunnen globale of lokale variabelen zijn. De variabelen kunnen worden ingesteld door het effect zelf of door de toepassing.

Effecten bevatten meerdere renderingopties die technieken worden genoemd. Elke techniek omvat globale variabelen, pijplijnstatus, textuur en samplerstatus en shaderstatus. Eén stijl wordt geïmplementeerd in een renderingspas. Een of meer passen kunnen worden ingekapseld in een techniek. Alle passen en technieken kunnen worden gevalideerd om te zien of de effectcode wordt uitgevoerd op het hardwareapparaat.

Status opslaan en herstellen van effecten

Effecten beheren status. De woordstatus wordt hier zeer breed gebruikt, omdat deze allerlei informatie bevat die de pijplijn nodig heeft om de rendervoorwaarden op te geven. Dit omvat bijna alle functionele gebieden van de pijplijn.

Renderingopties worden beheerd door technieken en passes. Een toepassing geeft een effect weer door één actieve techniek in te stellen en een of meer slagen weer te geven. Alle weergaven in een effect worden uitgevoerd binnen een overeenkomend paar Begin en -aanroepen beëindigen. Wanneer Begin wordt aangeroepen, wordt er een statusblok gemaakt en wordt de apparaatstatus opgeslagen (tenzij u anders opgeeft). Nadat een techniek de door de toepassing opgeeft om weer te geven, wordt End- aangeroepen om de actieve techniek te beëindigen. Het effectsysteem reageert door automatisch de pijplijnstatus te herstellen die is vastgelegd in het statusblok (tenzij u ervoor kiest om deze functionaliteit voor opslaan en herstellen uit te schakelen).

Bij het programmeren van weergavereeksen met meerdere doorvoeren, die elk een eigen statusconfiguratie vereisen, kunnen effecten de huishouding verminderen die nodig is voor het bijhouden van statuswijzigingen. Zie Effect States (Direct3D 9)voor meer informatie over de statussen die door effecten kunnen worden opgeslagen en hersteld.

Effecten kunnen parameters delen

Effectparameters zijn alle niet-statische variabelen die in een effect zijn gedeclareerd. Dit kan globale variabelen en aantekeningen bevatten. Effectparameters kunnen worden gedeeld tussen verschillende effecten door parameters te declareren met het gedeelde trefwoord en vervolgens het effect te maken met een effectgroep.

Gekloonde effecten gebruiken dezelfde effectgroep als het effect waaruit ze worden gekloond. Het klonen van een effect maakt een exacte kopie van een effect, waaronder globale variabelen, technieken, passeringen en aantekeningen.

Programmeerhandleiding voor Direct3D 9-