DrawableTileGaussian

Colour-pass drawable for one 3D Tiles Gaussian-splat tile. Holds references to the tile's per-attribute GPU buffers (centres / scales / rotations / rgba) + a static back-to-front index buffer computed once at upload time, and dispatches a single glDrawElements(GL_POINTS) per tile.

The static sort is computed against the tile bounding sphere centre, not the live camera — good enough for tiles roughly viewed from a consistent direction, fast to upload (no per-frame mutation), but produces some visible overlap artifacts when the camera orbits around the tile.

Implements ShadowCaster like DrawableTilePoints: emits one-pixel GL_POINTS into the cascade depth texture when shadowMode.castsShadows. The colour pass does not apply incoming shadows — splats are usually self-shadowed already, the bookkeeping cost outweighs the fidelity gain.

Types

Link copied to clipboard
object Companion

Properties

Link copied to clipboard
Link copied to clipboard

Live GPU buffer references resolved fresh from the RR cache at enqueue time. Matches the drawable-enqueue resolution pattern used by DrawableTileMesh / Path / Polygon / OSM Buildings — keeping the refs on the drawable instead of on GaussianContent means a cache eviction between frames surfaces as a null slot here (skipping the draw) rather than a stale BufferObject.id bind on a content-cached ref.

Link copied to clipboard
Link copied to clipboard

Focal length in pixels = viewportHeight / (2 * tan(fov / 2)). Caller sets at enqueue time from rc.viewport.height + rc.camera.fieldOfView.

Link copied to clipboard

Unique pick-ID RGBA emitted by the pick-mode fragment shader on the splat core. Set on pick frames in enqueueGaussianDrawable alongside the matching offerPickedObject.

Link copied to clipboard
Link copied to clipboard
open override val shadowCasterCenter: Vec3?

World-space bounding sphere center used to skip cascades whose AABB doesn't intersect this caster. Default null opts out of culling — the caster is dispatched into every cascade. Implementations populate this from their shape's boundingBox.center to gain per-cascade culling.

Link copied to clipboard
open override val shadowCasterRadius: Double

World-space bounding sphere radius. Only consulted when shadowCasterCenter is non-null.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

Global splat-size multiplier piped into the shader's per-splat sizing. Defaults to 1.

Link copied to clipboard

Functions

Link copied to clipboard
open override fun draw(dc: DrawContext)
Link copied to clipboard
open override fun drawShadowDepth(dc: DrawContext, shadow: DrawableShadow)

Cascade depth-pass dispatch. Mirrors DrawableTilePoints.drawShadowDepth: binds the centers VBO + a single position attribute, issues GL_POINTS into the cascade depth texture. One pixel per splat → the receiver's PCF softens them into ground halos.

Link copied to clipboard
open override fun recycle()
Link copied to clipboard
fun setWorldBounds(center: Vec3, radius: Double)