2010-08-22 32 views
5

Estoy ejecutando algunos experimentos en WebGL, uno de ellos es un sombreador de fragmentos de efectos XOR. Por alguna razón, todos los operadores bit a bit están reservados en GLSL y causan un error de compilación cuando se usan. ¿Por qué son estos operadores ilegales? ¿Qué puedo usar en lugar de | ¿en este caso?GLSL: ¿por qué se reservan los operadores bit a bit? ¿Cuál es una buena alternativa al uso de operaciones bit a bit (operaciones de punto flotante que emulan bit a bit)

+0

Mencionó un efecto XOR, pero luego dijo "en lugar de' | '" (el operador OR bit a bit). ¿Querías decir "en lugar de'^'"? – LarsH

+0

Bueno, iba después del primer efecto esta esta publicación - http://mrdoob.com/blog/post/623 El autor lo llamó el efecto 'XOR', por lo que el mono ve que el mono lo hace. Su nombre podría tener más que ver con el aspecto del efecto que con el código que lo afecta. – schellsan

Respuesta

3

En la especificación GLSL 1.0, se reservaron "para uso futuro", que era la especificación 1.3. Está permitido para enteros sin signo y con signo, tanto escalares como vectoriales.

Usted debe comenzar su shader por

#version 130 
+1

Gracias, supongo que la versión 1.3 no es compatible con el webgl de Chromium, ya que recibo el error 'Número de versión no admitido por ESSL' – schellsan

+0

La mayoría de las veces, puede dar una solución xor con if(): i = 0; if (cond1) i ++; if (cond2) i ++; if (i == 1) .... – Calvin1602

+0

para XOR lógico, sí ... pero la pregunta era para * bitwise * XOR; ¿cómo solucionas eso? – LarsH

2

me encontré con este problema también, por ejemplo, tratando de ejecutar Slisesix en Shader Toy usando Chrome.

This question tiene dos respuestas que muestran las formas en que podría implementar XOR en modo bit sin operadores bit a bit. Podrían ser lentos, pero en algunos casos serían lo suficientemente rápidos. Mejor que nada.

También puede ver si + es una aproximación suficientemente cercana a XOR bit a bit, dependiendo de cuáles sean sus requisitos.

+1

Gracias! Ojalá pudiera elegir esta respuesta también. – schellsan