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 man mano che 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 rossi, verdi e blu di una superficie vengono mappati ai livelli effettivi visualizzati dal sistema. Impostando i livelli di gamma, è possibile che lo schermo dell'utente flash colori - rosso quando il carattere dell'utente viene eseguito, verde quando il carattere seleziona un nuovo elemento e così via - senza copiare nuove immagini nel buffer del frame per ottenere l'effetto. In alternativa, è possibile modificare i livelli di colore per applicare una distorsione del colore alle immagini nel buffer posteriore.

C'è 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 viene finestrata. La rampa gamma ha effetto 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 della 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 esegue il mapping del livello di un determinato componente di colore, rosso, verde, blu, per tutti i pixel nel buffer del frame a nuovi livelli ricevuti dall'applicazione livello dati per la visualizzazione. Il remapping viene eseguito tramite tre tabelle di ricerca, una per ogni componente di colore.

Ecco come funziona: Direct3D accetta un pixel dal buffer del frame 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), in cui 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 fotogramma, modificando così i colori finali per tutti i pixel sullo schermo.

È utile visualizzare i valori della rampa visualizzandoli, come illustrato nei due grafici seguenti. Il grafico a sinistra mostra una rampa che non modifica i colori. Il grafico destro mostra una rampa che impone un pregiudizio negativo al componente del colore a cui viene applicato.

grafici dei valori di rampa gamma

Gli elementi della matrice per il grafico a sinistra contengono valori identici al relativo indice- 0 nell'elemento a indice 0 e 65535 all'indice 255. Questo tipo di rampa è il valore predefinito, perché non modifica i valori di input prima che vengano visualizzati. Il grafico destro fornisce una maggiore variazione; la sua rampa contiene valori compresi tra 0 nel primo elemento e 32768 nell'ultimo elemento, con valori che variano uniformemente tra. L'effetto è che il componente colore che usa questa rampa viene visualizzato disattivato sulla visualizzazione. Non è limitato all'uso di grafici lineari; se l'applicazione può assegnare mapping arbitrario, se necessario. È anche possibile impostare le voci su tutti gli zero per rimuovere completamente un componente di colore dalla visualizzazione.

Impostazione e recupero di livelli di rampa gamma

I livelli di rampa gamma sono tabelle di ricerca che Direct3D usa per eseguire il mapping dei componenti del colore del buffer del frame a nuovi livelli che verranno visualizzati. È possibile impostare e recuperare i livelli di rampa per la superficie primaria chiamando i metodi SetGammaRamp e 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 elementi 256 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 D3DGAMMARAMP che verrà riempito con la rampa 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 di frequente. L'impostazione di una rampa gamma calibrata fornisce un valore gamma coerente e assoluto per l'utente, indipendentemente dalla scheda di visualizzazione e dal monitoraggio.

Non tutti i sistemi supportano la calibrazione gamma. Per determinare se la calibrazione gamma è supportata, chiamare GetDeviceCaps ed esaminare il membro Caps2 della struttura D3DCAPS9 associata dopo che il metodo restituisce. Se il flag di funzionalità D3DCAPS2_CANCALIBRATEGAMMA è presente, 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à completa ed esclusiva. Ogni volta che l'applicazione cambia in modalità normale, i livelli di rampa vengono messi a parte, prendendo effetto di nuovo quando l'applicazione ripristina la modalità a schermo intero.

Se il dispositivo non supporta le rampe gamma nella modalità di presentazione corrente della catena di scambio (schermo intero o finestrato), non viene restituito alcun valore di errore. Le applicazioni possono controllare i bit di D3DCAPS2_FULLSCREENGAMMA e D3DCAPS2_CANCALIBRATEGAMMA nel membro Caps2 del tipo D3DCAPS9 per determinare le funzionalità del dispositivo e se è installato un calibratore.

Superfici Direct3D