Sto eseguendo alcuni esperimenti in WebGL, uno dei quali è uno shader di frammenti di effetto XOR. Per qualche motivo, tutti gli operatori bit a bit sono riservati in GLSL e causano un errore del compilatore quando utilizzato. Perché questi operatori sono illegali? Cosa posso usare al posto di | in questo caso?GLSL - Perché gli operatori bit a bit sono riservati? Qual è una buona alternativa all'utilizzo di operazioni bitwise (operazioni in virgola mobile che emulano bit per bit)
risposta
Nella specifica GLSL 1.0, erano riservati "per uso futuro", che era la specifica 1.3. È consentito per interi non firmati e firmati, sia scalari che vettoriali.
Si dovrebbe iniziare la Shader da
#version 130
Grazie, suppongo che la versione 1.3 non sia supportata su Webgl di Chromium, poiché sto ricevendo l'errore "Numero di versione non supportato da ESSL" – schellsan
La maggior parte delle volte è possibile risolvere xor con if(): i = 0; if (cond1) i ++; if (cond2) i ++; if (i == 1) .... – Calvin1602
per XOR logico, sì ... ma la domanda era per * bitwise * XOR; come fai a risolverlo? – LarsH
mi sono imbattuto in questo problema anche, ad esempio, cercando di eseguire Slisesix in Shader Toy utilizzando Chrome.
This question ha due risposte che mostrano i modi in cui è possibile implementare XOR bit a bit senza operatori bit a bit. Potrebbero essere lenti, ma in alcuni casi sarebbero abbastanza veloci. Meglio di niente.
Si potrebbe anche vedere se +
è un'approssimazione abbastanza vicina a XOR bit a bit, a seconda di quali sono i requisiti.
Grazie! Vorrei poter scegliere anche questa risposta. – schellsan
Hai menzionato un effetto XOR, ma poi hai detto "invece di' | '" (l'operatore OR bit a bit). Intendevi "invece di'^'"? – LarsH
Beh, stavo cercando il primo effetto di questo post - http://mrdoob.com/blog/post/623 L'autore lo ha chiamato l'effetto "XOR", quindi scimmia vedi scimmia. Il suo nome potrebbe avere più a che fare con l'aspetto dell'effetto che il codice per influenzarlo. – schellsan