code: public void update(int width, int height, float[] data)
              throws IllegalArgumentException
      {
          if ((width <= 0) || (height <= 0) ||
              (data == null) || (data.length < height * width * mFloatsPerPixel))
          {
              throw new IllegalArgumentException();
          }
          NativeFloatImage.update(getNative(), width, height, 0, data);
      }
docs: Copy new data to an existing float-point texture.
  
  Creating a new {@link GVRFloatImage} is pretty cheap, but it's still
  not a totally trivial operation: it does involve some memory management
  and some GL hardware handshaking. Reusing the texture reduces this
  overhead (primarily by delaying garbage collection). Do be aware that
  updating a texture will affect any and all {@linkplain GVRMaterial
  materials} (and/or post effects that use the texture!
  
  @param width
  Texture width, in pixels
  @param height
  Texture height, in pixels
  @param data
  A linear array of float pairs.
  @return {@code true} if the updateGPU succeeded, and {@code false} if it
  failed. Updating a texture requires that the new data parameter
  has the exact same {@code width} and {@code height} and pixel
  format as the original data.
  @throws IllegalArgumentException
  If {@code width} or {@code height} is {@literal <= 0,} or if
  {@code data} is {@code null}, or if
  {@code data.length < height * width * 2}