void Splat(FluidPoint point)
 {
     splatProgram.SetTexture("_Target", velocity_dfbo.GetReadFBO());
     splatProgram.SetFloat("_aspectRatio", screen_w / screen_h);
     splatProgram.SetColor("_point", new Color(point.x / screen_w, point.y / screen_h, 0f));
     splatProgram.SetColor("_color", new Color(point.dx, point.dy, 1.0f));
     splatProgram.SetFloat("_radius", splat_radius / 100.0f);
     splatProgram.Blit(velocity_dfbo.GetWriteFBO(), velocity_dfbo.GetWriteFBO(), blendOption);
     velocity_dfbo.Swap();
     splatProgram.SetTexture("_Target", density_dfbo.GetReadFBO());
     splatProgram.SetColor("_color", point.color);
     splatProgram.Blit(density_dfbo.GetWriteFBO(), density_dfbo.GetWriteFBO(), blendOption);
     density_dfbo.Swap();
 }
 DoubleFBO ResizeDoubleFBO(DoubleFBO target, int w, int h, int d, RenderTextureFormat format, FilterMode filterMode)
 {
     target.SetReadFBO(ResizeFBO(target.GetReadFBO(), w, h, 0, format, filterMode));
     target.SetWriteFBO(CreateFBO(w, h, 0, format, filterMode));
     return(target);
 }