# ANGLE OpenGL Frame Capture and Replay ANGLE currently supports a limited OpenGL capture and replay framework. Limitations: * GLES capture has many unimplemented functions. * EGL capture and replay is not yet supported. * Mid-execution capture is supported with the Vulkan back-end. * Mid-execution capture has many unimplemented features. * Capture and replay is currently only tested on desktop platforms. * Binary replay is unimplemented. CPP replay is supported. ## Capturing and replaying an application To build ANGLE with capture and replay enabled update your GN args: ``` angle_with_capture_by_default = true ``` Once built with capture enabled by default, ANGLE supports capturing OpenGL ES calls to CPP replay files. To enable capture, set the `ANGLE_CAPTURE_FRAME_START` and `ANGLE_CAPTURE_FRAME_END` environment variables to define a capture frame range, or use the [capture trigger property][CaptureTrigger] on Android. By default the replay will be stored in the current working directory. The capture files will be named according to the pattern `angle_capture_context{id}_frame{n}.cpp`. Each GL Context currently has its own replay sources. ANGLE will write out data binary blobs for large Texture or Buffer contents to `angle_capture_context{id}_frame{n}.angledata`. Replay programs must be able to load data from the corresponding `angledata` files. ## Controlling Frame Capture Some simple environment variables control frame capture: * `ANGLE_CAPTURE_ENABLED`: * Set to `0` to disable capture entirely. Default is `1`. * `ANGLE_CAPTURE_COMPRESSION`: * Set to `0` to disable capture compression. Default is `1`. * `ANGLE_CAPTURE_OUT_DIR=`: * Can specify an alternate replay output directory. * Example: `ANGLE_CAPTURE_OUT_DIR=samples/capture_replay`. Default is the CWD. * `ANGLE_CAPTURE_FRAME_START=`: * Uses mid-execution capture to write "Setup" functions that starts a Context at frame `n`. * Example: `ANGLE_CAPTURE_FRAME_START=2`. Default is `0`. * `ANGLE_CAPTURE_FRAME_END=`: * Example: `ANGLE_CAPTURE_FRAME_END=4`. Default is `0` which disables capture. * `ANGLE_CAPTURE_LABEL=