Controlli gamma (Direct3D 9)
I controlli gamma consentono di modificare il modo in cui il sistema visualizza il contenuto della superficie, senza influire sul contenuto della superficie stessa. Si pensi a questi controlli come filtri molto semplici che Direct3D si applica ai dati mentre lascia una superficie e prima che venga eseguito il rendering sullo schermo.
I controlli gamma sono una proprietà di una catena di scambio. I controlli gamma consentono di modificare dinamicamente il modo in cui i livelli rosso, verde e blu di una superficie eseguono il mapping ai livelli effettivi visualizzati dal sistema. Impostando i livelli gamma, è possibile far lampeggiare lo schermo dell'utente , rosso quando viene girato il carattere dell'utente, verde quando il carattere preleva un nuovo elemento e così via, senza copiare nuove immagini nel buffer dei fotogrammi per ottenere l'effetto. In alternativa, è possibile modificare i livelli di colore per applicare una distorsione del colore alle immagini nel buffer nascosto.
Esiste sempre almeno una catena di scambio (la catena di scambio implicita) per ogni dispositivo perché Direct3D 9 ha una catena di scambio come proprietà del dispositivo. Poiché la rampa gamma è una proprietà della catena di scambio, la rampa gamma può essere applicata quando la catena di scambio è finestrata. La rampa gamma diventa effettiva immediatamente. Non è in attesa di un'operazione di sincronizzazione verticale.
I metodi SetGammaRamp e GetGammaRamp consentono di modificare i livelli di rampa che influiscono sui componenti di colore rosso, verde e blu dei pixel dalla superficie prima che vengano inviati al convertitore digitale-analogico (DAC) per la visualizzazione.
Livelli di rampa gamma
In Direct3D il termine gamma ramp descrive un set di valori che eseguono il mapping del livello di un determinato componente di colore , rosso, verde, blu, per tutti i pixel nel buffer dei fotogrammi a nuovi livelli ricevuti dall'applicazione livello dati per la visualizzazione. Il mapping viene eseguito tramite tre tabelle di ricerca, una per ogni componente colore.
Ecco come funziona: Direct3D accetta un pixel dal buffer dei fotogrammi e valuta i singoli componenti di colore rosso, verde e blu. Ogni componente è rappresentato da un valore compreso tra 0 e 65535. Direct3D accetta il valore originale e lo usa per indicizzare una matrice di 256 elementi (la rampa), dove ogni elemento contiene un valore che sostituisce quello originale. Direct3D esegue questo processo di ricerca e sostituzione per ogni componente di colore di ogni pixel nel buffer dei fotogrammi, modificando così i colori finali per tutti i pixel sullo schermo.
È utile visualizzare i valori di rampa visualizzandoli a grafo, come illustrato nei due grafici seguenti. Il grafico a sinistra mostra una rampa che non modifica affatto i colori. Il grafico a destra mostra una rampa che impone una distorsione negativa al componente di colore a cui viene applicata.
Gli elementi della matrice per il grafico a sinistra contengono valori identici al relativo indice, ovvero 0 nell'elemento in corrispondenza dell'indice 0 e 65535 in corrispondenza dell'indice 255. Questo tipo di rampa è l'impostazione predefinita, perché non modifica i valori di input prima che vengano visualizzati. Il grafico a destra offre una maggiore variazione; la sua rampa contiene valori compresi tra 0 nel primo elemento e 32768 nell'ultimo elemento, con valori compresi in modo uniforme tra. L'effetto è che il componente colore che usa questa rampa viene visualizzato disattivato sullo schermo. Non ci si limita all'uso di grafici lineari; se l'applicazione può assegnare mapping arbitrario, se necessario. È anche possibile impostare le voci su tutti gli zere per rimuovere completamente un componente colore dallo schermo.
Impostazione e recupero dei livelli di rampa gamma
I livelli di rampa gamma sono tabelle di ricerca effettivamente usate da Direct3D per eseguire il mapping dei componenti del colore del buffer dei fotogrammi a nuovi livelli che verranno visualizzati. È possibile impostare e recuperare i livelli di rampa per la superficie primaria chiamando i metodi diSetGammaRampe GetGammaRamp. SetGammaRamp accetta due parametri e GetGammaRamp accetta un parametro. Per SetGammaRamp, il primo parametro è D3DSGR_CALIBRATE o D3DSGR_NO_CALIBRATION. Il secondo parametro, pRamp, è un puntatore a una struttura D3DGAMMARAMP. La struttura D3DGAMMARAMP contiene tre matrici di 256 elementi di WORD, una matrice ognuna per contenere le rampe gamma rosse, verdi e blu. GetGammaRamp ha un parametro che accetta un puntatore a un tipo di D3DGAMMARAMP che verrà riempito con la gamma corrente.
È possibile includere il valore D3DSGR_CALIBRATE per il primo parametro di SetGammaRamp per richiamare il calibratore quando si impostano nuovi livelli gamma. La calibrazione delle rampe gamma comporta un sovraccarico di elaborazione e non deve essere usata frequentemente. L'impostazione di una rampa gamma calibrata fornisce un valore gamma coerente e assoluto per l'utente, indipendentemente dalla scheda di visualizzazione e dal monitor.
Non tutti i sistemi supportano la calibrazione gamma. Per determinare se la calibrazione gamma è supportata, chiamare GetDeviceCapsed esaminare il membro Caps2 della struttura di D3DCAPS9 associata dopo la restituzione del metodo. Se è presente il flag di funzionalità D3DCAPS2_CANCALIBRATEGAMMA, la calibrazione gamma è supportata.
Quando si impostano nuovi livelli di rampa, tenere presente che i livelli impostati nelle matrici vengono usati solo quando l'applicazione è in modalità a schermo intero ed esclusivo. Ogni volta che l'applicazione passa alla modalità normale, i livelli di rampa vengono messi da parte, prendendo in considerazione di nuovo quando l'applicazione ripristina la modalità schermo intero.
Se il dispositivo non supporta le rampe gamma nella modalità di presentazione corrente della catena di scambio (a schermo intero o finestra), non viene restituito alcun valore di errore. Le applicazioni possono controllare i bit di funzionalità D3DCAPS2_FULLSCREENGAMMA e D3DCAPS2_CANCALIBRATEGAMMA nel membro Caps2 del tipo di D3DCAPS9 per determinare le funzionalità del dispositivo e se è installato un calibratore.
Argomenti correlati