Ho uno shader con un'uniforme _color e un campionatore. Ora voglio disegnare con _color SOLO se il campionatore non è stato impostato. C'è un modo per capire che siamo all'interno dello shader? (Sfortunatamente il campionatore restituisce 1,1,1,1 quando non è assegnato, il che rende impossibile il missaggio tramite alpha)Come verificare se un campionatore è nullo in glsl?
risposta
Non è possibile farlo. Il campionatore è una maniglia opaca che fa riferimento a un'unità di trama. Non sono sicuro che la specifica garantisca (1,1,1,1) quando si campiona da un'unità in cui non è legata alcuna trama o se si tratta di un comportamento non definito.
Quello che puoi fare è usare solo un'altra uniforme per passare da un campionatore all'altro o il colore uniforme, o semplicemente usare diversi shader e passare da uno all'altro. Ci sono anche le possibilità dei sottoprogrammi qui, ma non so se questo sarebbe il giusto appraoch per un problema così semplice.
Mi sono imbattuto in questa domanda cercando di risolvere un problema simile.
Dal GLSL 4,30
int textureQueryLevels(gsamplerX sampler);
è una funzione build-in. Nello spec. GLSL. p. 151 dice
Il valore zero verrà restituito se al campionatore non è associata alcuna trama o una trama incompleta.
Negli OpenGL-Forms ho trovato una voce a questa domanda che suggerisce di utilizzare
ivecY textureSize(gsamplerX sampler,int lod);
e test se la dimensione trama è maggiore di zero. Ma questo, a mio avviso, non è coperto dallo standard. Nella sezione 11.1.3.4 della specifica OpenGL si dice che
Se il livello immagine Struttura calcolato è fuori dell'intervallo [levelbase, q], i risultati sono indefiniti ...
Modifica : Ho appena provato questo metodo sul mio problema e poiché risulta che nvidia ha alcuni problemi con questa funzione, risultando in un valore diverso da zero quando non è associata alcuna trama. (Vedi nvidia bug report dal 2015)
- 1. Come verificare se JSONArray Element è nullo
- 2. Android - Come verificare se textview è nullo o non nullo
- 3. Come verificare se un int è un nullo
- 4. Come verificare se un int non è nullo o vuoto?
- 5. Come verificare se un JSONObject è nullo o inesistente
- 6. Come posso verificare se un array è nullo/vuoto?
- 7. Impossibile verificare se int è nullo
- 8. Come verificare se una stringa è nullo in python
- 9. Come verificare se NSDictionary non è nullo in Swift 2
- 10. Come verificare se il campo è nullo o vuoto mysql?
- 11. Come verificare se un'istanza di NSMutableArray è nullo o no
- 12. Come verificare se l'array è nullo o vuoto?
- 13. Come verificare se un elemento è nullo in una matrice in C?
- 14. Verificare se XElement è nullo a livello globale
- 15. Come verificare se un lettore è in EOF?
- 16. iOS non può verificare se l'oggetto è nullo
- 17. Come posso verificare se un oggetto è nullo in ruby su rails 2?
- 18. Con un contenitore IoC, un costruttore dovrebbe ancora verificare se un parametro è nullo?
- 19. Come verificare se l'oggetto è un vettore
- 20. Come verificare se un DataSet è vuoto?
- 21. Verificare se è un oggetto
- 22. Come verificare se java.lang.reflect.Type è un Enum
- 23. Verificare se un parametro è nullo o vuoto in una stored procedure
- 24. Come verificare il valore nullo in NSNumber
- 25. Come verificare se un parametro è vuoto o nullo nella stored procedure Sql Server nell'istruzione IF?
- 26. Come verificare se un oggetto è definito?
- 27. Come verificare se un DataGridViewCheckBoxCell è verificato
- 28. Come verificare se un buffer è vuoto?
- 29. Come verificare se un puntatore è valido?