Escribo un sombreador de fragmentos para WebGL (GLSL ES 1.0) utilizando la última versión de Chrome (y Firefox), y escribí un algoritmo iterativo.Evitar desenrollar bucles en el sombreador de fragmentos
Entonces, en primer lugar, descubrí que la duración del ciclo es bastante restringida (el documento dice que debe ser adivinable en tiempo de compilación, lo que significa que debe ser constante o muy cercano).
Además, tengo que escribir un (for
, ya que es el único que debe se aplica con arreglo a la norma) bucle que es potencialmente mucho tiempo, pero que rompe casi todas las veces antes del final.
Ahora, me he dado cuenta de que si configuro un número máximo más alto, la compilación y el enlace del sombreador toman mucho más tiempo. Entonces, a menos que esté equivocado, el compilador desenrolla el lazo.
No estoy seguro de si se puede hacer algo, pero he intentado algunas cosas y el compilador también parece tener funciones en línea, incluso cuando se le llaman en bucles.
No creo que sea normal que un sombreador tarde un minuto en compilarse para un centenar de iteraciones de un bucle. ¿O estoy haciendo lo incorrecto? ¿Hay cientos de iteraciones en un fragmentador de fragmentos demasiado para una GPU? Porque parece funcionar bien una vez que se ha compilado.
WebGL generalmente solo entrega el sombreador al compilador en su biblioteca OpenGL, entonces, ¿qué hace y cuánto tiempo lleva depende de su tarjeta de video y controlador ... –