# ggWebGL 0.4.0

- Froze the experimental renderer API around structured `ggwebgl_view()`,
  `ggwebgl_selection()`, and `ggwebgl_material()` contracts.
- Extended vector layers to support 3D `z`/`zend` coordinates while preserving
  renderer-owned ids, frame/time metadata, and browser selection behavior.
- Added distinct orbit and trackball camera control paths with normalized
  rotation-based camera state.
- Upgraded mesh and surface payloads with generated normals, Lambert material
  metadata, picking ids, wireframe/culling controls, and GPU payload caching
  hooks.
- Expanded the interaction-frame benchmark artifact schema so fixed frame-rate
  performance statements require device, browser, GPU, commit, primitive-count,
  and artifact metadata.
- Added a guarded optional downstream `boids4R` animation vignette and htmlwidget
  example that render renderer-neutral swarm frames as exact-timeline point and
  vector primitives. The examples keep `boids4R` as an optional development
  ecosystem package and avoid attaching its namespace during ggWebGL tests.
- Reframed the optional `boids4R` documentation as browser-native swarm art,
  clarifying that `boids4R` owns simulation semantics while `ggWebGL` owns
  WebGL rendering and timeline interaction.
- Prepared CRAN self-containment by removing GitHub-only ecosystem packages
  from `DESCRIPTION`, gating live optional bridge vignettes behind an explicit
  development environment variable, and documenting that `XGeoRTR`, `boids4R`,
  and `shapViz3D` are optional integrations rather than installation
  requirements.

# ggWebGL 0.3.0
- Added exported ggwebgl_magnify_region() in R/magnify-region.R, with panel and 
  inset modes driven by an exact data-coordinate rectangle.
- Added experimental vector-arrow rendering through `geom_vector_webgl()` and
  `ggwebgl_layer_vectors()`, using renderer-ready shafts and triangle
  arrowheads without backend-specific semantics.
- Added experimental brush and lasso interaction modes that emit selected
  primitive ids through Shiny inputs or optional JavaScript callbacks.
- Added experimental timeline controls with frame/time filtering for primitive
  layers plus play, scrub, speed, and reset UI controls.
- Added experimental opt-in 3D camera state, 3D point/line support, indexed mesh
  payloads, `geom_mesh_webgl()`, `geom_surface_webgl()`,
  `ggwebgl_layer_mesh()`, and `ggwebgl_layer_surface()`.
- Added a renderer-generic future-work gallery and contract tests covering the
  new vector, selection, timeline, camera, mesh, and surface paths.
- Added an interaction-frame benchmark schema for frame-rate statements. Fixed
  performance numbers remain future-facing until generated benchmark artifacts
  exist for a named target machine.

# ggWebGL 0.2.0

- Promoted the package from the long-running development scaffold to the
  `0.2.0` release line.
- Added large-scene demo support: persistent point buffers for stable
  large point-cloud interaction, deterministic count-aware density splats,
  generic hover labels for point primitives, and a reproducible renderer
  gallery.
- Added generic downstream adapter helpers for renderer-ready point, line, and
  raster primitive specs, including exported `ggwebgl_layer_*()` constructors
  and `ggwebgl_spec()`.
- Added package-owned static export surfaces through `snapshot_ggwebgl()` and
  `compose_ggwebgl_figure()`, so publication-style PNG/JPEG captures and simple
  figure composition can be driven from the package API instead of ad hoc
  scripts.
- Added project evidence documentation and machine-readable evidence summaries
  for internal release validation.
- Added vignette-local figure copies for website articles that need images
  without referencing files outside pkgdown's allowed article asset paths.
- Tightened the browser-backed static export path around dedicated `chromote`
  browser ownership, lighter examples, and explicit optional dependency
  declarations for export and vignette tooling.
- Fixed pkgdown/htmlwidget layout containment by restoring the widget CSS
  dependency and adding inline canvas-stage safeguards, preventing WebGL
  canvases from stacking at the top of article pages.

# ggWebGL 0.1.0

- Expanded the core renderer beyond the initial scaffold with reusable
  showcase helpers, manual htmlwidget and Shiny smoke tests, and a stronger
  pkgdown-facing documentation surface.
- Implemented and stabilized the main point shader modes: `default`,
  `density_splat`, `trajectory_age`, and `trajectory_age_glow`.
- Added hover-based sample inspection on top of the existing pan and zoom
  interactions.
- Added texture-backed raster rendering for `geom_raster_webgl()`.
- Added fixed-scale `facet_wrap()` and `facet_grid()` support through a
  panel-aware render specification and panel-local interaction state.
- Added packaged real-data evidence examples covering raster fields, storm
  trajectories, and dense embeddings.
- Added a reproducible evaluation suite against `ggplot2` and `plotly`,
  including machine-readable metrics and benchmark figure scripts under
  `inst/benchmarks/`.
- Froze the XGeoRTR/ggWebGL renderer boundary in `RENDERER_CONTRACT.md` and
  added the first `as_ggwebgl_spec.xgeo_state()` adapter plus renderer
  contract tests.

# ggWebGL 0.0.0.9000

- Reset package metadata and top-level documentation from the copied scaffold
  to the `ggWebGL` package identity.
- Rewrote the package README, citation, and pkgdown configuration around the
  intended `ggplot2` plus WebGL rendering workflow and companion-package split.
- Removed imported carryover benchmark content from the copied package tree.
- Added the first real `ggplot_webgl()` renderer path for point and line
  layers, backed by a minimal WebGL htmlwidget.
- Added the initial showcase vignette and gallery, including dense latent-space,
  diffusion-trajectory, phase-portrait, and optimization-path examples.
- Added reusable `standard` and `high_detail` showcase presets for the gallery
  and demo surfaces.
