GLSL: definizione di PI come '3.14159265 ...' o semplicemente come 'radians (180)'

3

Vedo un sacco di codice shader su Internet dove PI è semplicemente definito come un decimale approssimativo vicino alla parte superiore del codice. In generale, provo a lasciare che i computer si occupino di fare matematica per me invece di approssimare i valori con le costanti (ad esempio ( 1./3. ) invece di 0.333 )

Pi sembra una di quelle cose che sarebbe più semplice usare solo funzioni intrinseche come radians() per.

Ho sentito che creare e distruggere variabili può essere costoso nel mondo degli shader, e sono curioso di sapere quali potrebbero essere i compromessi per usare radians(180) inline nel codice anziché

#define PI 3.1415926538

in alto e poi PI in linea.

Grazie!

    
posta florian 09.08.2016 - 22:51
fonte

1 risposta

2

I risultati definiscono fondamentalmente la stessa cosa di digitare il valore completo in ogni luogo, per tutte le preoccupazioni del compilatore. Molto economico e senza costi di runtime.

Quando usi la funzione radianti, nel migliore dei casi il compilatore di shader riconoscerà la possibile ottimizzazione e la sostituirà con il valore reale in fase di compilazione (che fondamentalmente avrà come risultato l'utilizzo della definizione). Nel peggiore dei casi, il risultato sarà il calcolo del valore su ciascuna occorrenza in fase di esecuzione.

Nel caso di glsl è un po 'complicato fare supposizioni su ciò che farà il compilatore dato che in genere non si sa quale compilatore si sta puntando quando si scrive il codice. Inoltre, non è facile prevedere quale costo di runtime utilizzare radians () ti porterà senza benchmarking effettivo per ogni gpu.

Questo è probabilmente il motivo per cui la maggior parte delle volte viene scelta l'opzione più sicura, la definizione. Questo garantirà il risultato ottimale.

    
risposta data 14.08.2016 - 22:45
fonte

Leggi altre domande sui tag