rework to use SurfaceTextures where available