Necesito escribir en el búfer de profundidad en un dispositivo Android (OpenGL ES 2.0). Dado que gl_FragDepth
no se puede escribir en OGL ES 2.0, tengo que encontrar una solución alternativa. De hecho, quiero renderizar esferas mediante el raycasting, similar a esto: http://www.sunsetlakesoftware.com/2011/05/08/enhancing-molecules-using-opengl-es-20. Sin embargo, la solución explicada en este sitio web (paso de render fuera de pantalla escribiendo la profundidad usando un glBlendEquation
especial) solo funciona en dispositivos Apple, no en Android, porque no es compatible con GL_MIN_EXT
-blending.Solución para escribir el valor del búfer de profundidad/profundidad en OpenGL ES 2.0
En mi tableta Tegra3 que fue capaz de poner en práctica este método: Android GLES20.glBlendEquation not working? (por cierto, recomiendo el uso de valores de profundidad linealizadas, dan mejores resultados!) que funciona bastante bien, pero por supuesto esto sólo está disponible en GPUs de Nvidia.
En teoría, existe la extensión GL_EXT_frag_depth
(ver Can an OpenGL ES fragment shader change the depth value of a fragment?), pero no está disponible en dispositivos Android también.
Finalmente, podría escribir el búfer de profundidad para una sola esfera (en un pase de renderizado fuera de pantalla), luego escribir el búfer de profundidad para la siguiente esfera en un segundo pase de renderización y combinar los dos en un tercer pase de renderización. Al hacerlo, tendrías 2 * n + 1 pases de renderizado para n esferas, lo que parece ser bastante ineficiente.
Así que como me estoy quedando sin ideas, mi pregunta es: ¿Puedes pensar en otra forma/solución genérica para escribir el búfer de profundidad en un dispositivo Android OpenGL ES 2.0?
¡Esto suena como una opción interesante! No es una solución tan elegante como esperaba, pero parece que no hay otra ... Probablemente la probaré. La clasificación en profundidad debe ser lo suficientemente rápida para la mayoría de las proteínas y otras moléculas más pequeñas. – kroneml