applyShadowReceiverUniforms

Binds the per-frame cascade depth textures to texture units 1..4 and pushes the cascade uniforms into program — or, when no shadow state is available (no earth.worldwind.layer.shadow.ShadowLayer this frame, or pick mode, or the platform can't run the depth-texture cascade pipeline, or the caller passes applyShadow = false), calls ShadowReceiverProgram.loadShadowDisabled so the receiver shader's applyShadow branch elides the lookup. Active texture unit is restored to GL_TEXTURE0 on the way out so subsequent texture binds in the caller's draw method land on the surface texture as expected.

The applyShadow parameter lets per-shape drawables opt out (e.g. a shape with ShapeAttributes.shadowMode that doesn't receive).

Centralising this here means the per-receiver drawables (earth.worldwind.draw.DrawableMesh, earth.worldwind.draw.DrawableShape, earth.worldwind.draw.DrawableCollada, earth.worldwind.draw.DrawableSurfaceTexture, earth.worldwind.draw.DrawableSurfaceShape) drop ~30 lines of copy-pasted state-binding into a single call.