Gamma-besturingselementen (Direct3D 9)
Met Gamma-besturingselementen kunt u wijzigen hoe het systeem de inhoud van het oppervlak weergeeft, zonder dat dit van invloed is op de inhoud van het oppervlak zelf. U kunt deze besturingselementen beschouwen als zeer eenvoudige filters die Direct3D toepast op gegevens terwijl het een oppervlak verlaat en voordat deze op het scherm wordt weergegeven.
Gamma-besturingselementen zijn een eigenschap van een wisselketen. Gamma-besturingselementen maken het mogelijk om dynamisch te wijzigen hoe de rode, groene en blauwe niveaus van een oppervlak worden toegewezen aan de werkelijke niveaus die het systeem weergeeft. Door gammaniveaus in te stellen, kunt u ervoor zorgen dat het scherm van de gebruiker kleuren knippert - rood wanneer het teken van de gebruiker wordt gemaakt, groen wanneer het teken een nieuw item ophaalt, enzovoort - zonder dat er nieuwe afbeeldingen naar de framebuffer worden gekopieerd om het effect te bereiken. U kunt ook kleurniveaus aanpassen om een kleurvooroordelen toe te passen op de afbeeldingen in de achterbuffer.
Er is altijd ten minste één wisselketen (de impliciete wisselketen) voor elk apparaat, omdat Direct3D 9 één wisselketen als eigenschap van het apparaat heeft. Omdat de gamma-ramp een eigenschap van de wisselketen is, kan de gamma-ramp worden toegepast wanneer de wisselketen wordt gevensterd. De gamma-helling wordt onmiddellijk van kracht. Er wordt niet gewacht op een verticale synchronisatiebewerking.
Met de SetGammaRamp en GetGammaRamp methoden kunt u hellingniveaus bewerken die van invloed zijn op de onderdelen van de rode, groene en blauwe kleur van pixels vanaf het oppervlak voordat ze naar de digital-to-analog converter (DAC) voor weergave worden verzonden.
Gamma-hellingniveaus
In Direct3D beschrijft de term gamma-ramp een reeks waarden die het niveau van een bepaald kleuronderdeel - rood, groen, blauw - voor alle pixels in de framebuffer toewijzen aan nieuwe niveaus die worden ontvangen door de DAC voor weergave. De hertoekenbewerking wordt uitgevoerd via drie opzoektabellen, één voor elk kleuronderdeel.
Dit werkt als volgt: Direct3D neemt een pixel uit de framebuffer en evalueert de afzonderlijke rode, groene en blauwe kleuronderdelen. Elk onderdeel wordt vertegenwoordigd door een waarde van 0 tot 65535. Direct3D neemt de oorspronkelijke waarde en gebruikt deze om een matrix met 256 elementen (de helling) te indexeren, waarbij elk element een waarde bevat die het oorspronkelijke element vervangt. Direct3D voert dit opzoek- en vervangingsproces uit voor elk kleuronderdeel van elke pixel in de framebuffer, waardoor de uiteindelijke kleuren voor alle pixels op het scherm worden gewijzigd.
Het is handig om de hellingwaarden te visualiseren door ze te grafieken, zoals wordt weergegeven in de volgende twee grafieken. In de linkergrafiek ziet u een helling die helemaal geen kleuren wijzigt. In de rechtergrafiek ziet u een helling die negatieve vooroordelen oplegt aan het kleuronderdeel waarop het wordt toegepast.
De matrixelementen voor de grafiek aan de linkerkant bevatten waarden die identiek zijn aan hun index - 0 in het element bij index 0 en 65535 bij index 255. Dit type helling is de standaardinstelling, omdat de invoerwaarden niet worden gewijzigd voordat ze worden weergegeven. De rechtergrafiek biedt meer variatie; de helling bevat waarden die variëren van 0 in het eerste element tot 32768 in het laatste element, met waarden tussen de verschillende elementen. Het effect is dat het kleuronderdeel dat deze ramp gebruikt, op het scherm gedempt wordt weergegeven. U bent niet beperkt tot het gebruik van lineaire grafieken; als uw toepassing willekeurige toewijzingen kan toewijzen, indien nodig. U kunt de vermeldingen zelfs instellen op alle nullen om een kleuronderdeel volledig uit de weergave te verwijderen.
Gamma-rampniveaus instellen en ophalen
Gamma-hellingniveaus zijn effectief opzoektabellen die Direct3D gebruikt om de onderdelen van de framebufferkleur toe te wijzen aan nieuwe niveaus die worden weergegeven. U kunt hellingniveaus voor het primaire oppervlak instellen en ophalen door de methoden SetGammaRamp en GetGammaRamp methoden aan te roepen. SetGammaRamp accepteert twee parameters en GetGammaRamp één parameter accepteert. Voor SetGammaRampis de eerste parameter D3DSGR_CALIBRATE of D3DSGR_NO_CALIBRATION. De tweede parameter, pRamp, is een aanwijzer naar een D3DGAMMARAMP structuur. De D3DGAMMARAMP structuur bevat drie 256-element matrices van WORD's, één matrix die elk de rode, groene en blauwe gamma-hellingen bevat. GetGammaRamp- heeft één parameter die een aanwijzer naar een D3DGAMMARAMP type neemt dat wordt gevuld met de huidige gamma-ramp.
U kunt de D3DSGR_CALIBRATE-waarde voor de eerste parameter van SetGammaRamp opnemen om de kalibrator aan te roepen bij het instellen van nieuwe gammaniveaus. Het kalibreren van gamma-hellingen zorgt voor enige verwerkingsoverhead en mag niet vaak worden gebruikt. Het instellen van een gekalibreerde gamma-ramp biedt een consistente en absolute gammawaarde voor de gebruiker, ongeacht de beeldschermadapter en monitor.
Niet alle systemen ondersteunen gammakalibratie. Als u wilt bepalen of gamma-kalibratie wordt ondersteund, roept u GetDeviceCaps-aan en onderzoekt u het Caps2-lid van de bijbehorende D3DCAPS9 structuur nadat de methode is geretourneerd. Als de D3DCAPS2_CANCALIBRATEGAMMA mogelijkheidsvlag aanwezig is, wordt gammakalibratie ondersteund.
Wanneer u nieuwe rampniveaus instelt, moet u er rekening mee houden dat de niveaus die u in de matrices instelt, alleen worden gebruikt wanneer uw toepassing zich in de exclusieve modus volledig scherm bevindt. Wanneer uw toepassing wordt gewijzigd in de normale modus, worden de hellingsniveaus opzij gezet en worden deze opnieuw toegepast wanneer de toepassing de modus volledig scherm weer opent.
Als het apparaat geen gamma-ramps ondersteunt in de huidige presentatiemodus van de wisselketen (volledig scherm of venster), wordt er geen foutwaarde geretourneerd. Toepassingen kunnen de D3DCAPS2_FULLSCREENGAMMA en D3DCAPS2_CANCALIBRATEGAMMA mogelijkheidsbits controleren in het Caps2-lid van het D3DCAPS9 type om de mogelijkheden van het apparaat te bepalen en of een kalibrator is geïnstalleerd.
Verwante onderwerpen