Surface Texture Program Shadow
Sentinel subclass: distinct cache key for the shadow-aware GLSL variant of SurfaceTextureProgram. No GLSL or method overrides of its own - the parent's GLSL is the single source of truth, the #define SHADOWS_ENABLED flipped on by the constructor argument selects the shadow-aware compilation.
Properties
Indicates the approximate size of the OpenGL resources referenced by this GPU program.
Frame stamp of the last ShadowState whose uniforms were uploaded into this program. GL uniforms are program-state and persist across draw calls, so once a program has been loaded with the current frame's cascades it doesn't need to be loaded again until the cascades change. Implementations declare this as a plain var field, default -1L.
Functions
Uploads the first count batch slots packed by setBatchTexture.
Disables shadow sampling. Receivers' fragments fall through to a fixed 1.0 visibility.
Enables shadow sampling and uploads the cascade matrices, split depths, texel sizes, light direction and fade distance from state. Cascade sampler bindings (GL_TEXTURE1..4) are baked in at program init time; the caller is responsible for binding the matching cascade depth textures to those units before invoking this method — applyShadowReceiverUniforms does both in lockstep.
Forwards to ShadowReceiverUniforms.loadTerrainRelief; a no-op on the no-shadow variant.
Sets the tile-local -> world translation for the next draw call. Per-tile because each terrain tile uses its own local frame; loaded each iteration of the tile loop. Drawables only call this when earth.worldwind.draw.DrawContext.shadowState is non-null, so the call doesn't happen on no-shadow frames at all.
Frees any resources associated with this instance. After this method returns the rendering resource is invalid, and any associated GL object is deleted.
Packs batch slot k from the texture's coordinate transform and the terrain/texture sectors: the tile-local -> image scale+translation and the texture's coverage rectangle in tile-local coordinates. texCoordMatrix must be axis-aligned affine (scale + translation, e.g. a vertical flip); rotation and shear terms are ignored.