wgpu

Cross-platform GPU compute and rendering via WebGPU (wgpu-native)

Files

FileDescription
.editorconfigEditor formatting configuration
.gitignoreGit ignore rules for build artifacts and dependencies
.tool-versionsasdf tool versions (Zig, Kit)
LICENSEMIT license file
README.mdThis file
c/kit_wgpu.cC FFI wrapper around wgpu-native and platform surface APIs
c/kit_wgpu.hC header for the FFI wrapper
examples/hello-compute.kitBasic storage-buffer compute example
examples/texture-invert.kitTexture upload, compute shader, download, and readback example
examples/image-sepia.kitSepia-tone compute example using texture staging
examples/sdl-clear-window.kitSDL window and WGPU surface clear example
examples/sdl-fill-rect-window.kitSurface rectangle rendering example
examples/sdl-rounded-panels-window.kitRounded panel rendering example
examples/sdl-gradient-panels-window.kitGradient rounded panel rendering example
examples/sdl-stroked-panels-window.kitStroked rounded panel rendering example
examples/sdl-batch-window.kitBatched surface drawing example
examples/sdl-draw-texture-region-window.kitTexture region drawing example
examples/sdl-draw-glyph-run-window.kitTexture-atlas glyph run drawing example
examples/sdl-offscreen-panels-window.kitOffscreen texture rendering and composition example
examples/sdl-blurred-layer-window.kitBox-blurred layer rendering example
examples/sdl-shadowed-panels-window.kitShadowed rounded panel rendering example
examples/sdl-stack-node-window.kitRetained rounded panel node tree example
kit.tomlPackage manifest with metadata, native linking, and tasks
src/main.kitPublic Kit.WGPU package facade
src/core.kitSmaller facade for core WGPU examples and parity builds
src/examples_ui.kitExample-only facade combining core and rounded-panel helpers
src/types.kitGPU error type plus buffer, texture, filter, and address constants
src/context.kitContext, surface, render-pass, drawing, and presentation APIs
src/buffer.kitGPU buffer creation, mapping, copy, and float read/write helpers
src/compute.kitWGSL shader compilation and compute dispatch helpers
src/texture.kitTexture creation, staging, upload, download, and views
src/sampler.kitTexture sampler creation and release helpers
src/glyph_atlas.kitAtlas glyph records, run measurement, and glyph drawing helpers
src/blur.kitBox blur, Gaussian blur, shadows, and retained rounded-panel helpers
src/internal/blur_types.kitInternal rounded-panel and blur record types
tests/compute.test.kitTests for compute pipeline helpers
tests/texture.test.kitTests for texture helpers
tests/image-bridge.test.kitTests for image bridge helpers
tests/surface-api.test.kitSmoke test for exported surface API symbols

Dependencies

PackageDescription
kit-imageImage loading and manipulation support for bridge tests and bulk texture workflows

Installation

kit add gitlab.com/kit-lang/packages/kit-wgpu.git

System Requirements

wgpu-native must be installed and discoverable by the compiler and dynamic linker.

PlatformCommand
macOSbrew install wgpu-native
Ubuntusudo apt install libwgpu-native-dev
Fedorasudo dnf install wgpu-native-devel

On macOS, the package links Metal, QuartzCore, and CoreGraphics. The manifest searches common Homebrew locations such as /usr/local and /opt/homebrew.

Capabilities

This is an FFI package and requires the ffi capability. Examples that create windows, surfaces, or native GPU resources should be run with FFI enabled when using a restricted capability set.

Usage

import Kit.WGPU as GPU

main = fn(-env) =>
  match GPU.init 0
    | Err e -> println "Failed to initialize GPU: ${show e}"
    | Ok ctx ->
      defer GPU.destroy ctx
      println "GPU: ${GPU.adapter-name ctx}"

      count = 8
      storage = GPU.buffer-usage-storage
      copy-src = GPU.buffer-usage-copy-src
      copy-dst = GPU.buffer-usage-copy-dst
      map-rd = GPU.buffer-usage-map-read

      input-buf = GPU.create-buffer ctx count (storage + copy-src) 1 |> Result.unwrap
      output-buf = GPU.create-buffer ctx count (storage + copy-src) 0 |> Result.unwrap
      staging-buf = GPU.create-buffer ctx count (map-rd + copy-dst) 0 |> Result.unwrap

      defer GPU.release-buffer input-buf
      defer GPU.release-buffer output-buf
      defer GPU.release-buffer staging-buf

      List.range 0 count |> List.map (fn(i) =>
        GPU.set-float input-buf i (Int.to-float (i + 1))
      )
      GPU.unmap input-buf

      wgsl = "@group(0) @binding(0) var<storage, read> input: array<f32>;\n@group(0) @binding(1) var<storage, read_write> output: array<f32>;\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) id: vec3<u32>) {\n  let i = id.x;\n  if (i < arrayLength(&input)) {\n    output[i] = input[i] * 2.0;\n  }\n}"
      shader = GPU.create-shader ctx wgsl |> Result.unwrap
      defer GPU.destroy-shader shader

      GPU.dispatch-clear
      GPU.dispatch-add input-buf
      GPU.dispatch-add output-buf
      GPU.compute ctx shader "main" 1 1 1 |> Result.unwrap

      GPU.copy-buffer ctx output-buf staging-buf count
      GPU.map-read ctx staging-buf |> Result.unwrap

      println "Results:"
      List.range 0 count |> List.map (fn(i) =>
        val = GPU.get-float staging-buf i
        println "  output[${show i}] = ${show val}"
      )

      GPU.unmap staging-buf

main

Development

Running Examples

Run examples with the interpreter:

kit run examples/hello-compute.kit

Compile examples to a native binary:

kit build examples/hello-compute.kit && ./hello-compute

The SDL examples create native windows and require the SDL package plus a working desktop GPU environment. All examples are marked @check(interactive) so parity checks buildability without trying to compare hardware-dependent runtime output.

Running Tests

Run the test suite:

kit test

Run the test suite with coverage:

kit test --coverage

Running kit dev

Run the standard development workflow (format, check, test):

kit dev

This will:

  1. Format and check source files in src/
  2. Type check examples
  3. Run tests in tests/ with coverage

Running Parity

Run interpreter/compiler parity checks for examples:

kit parity --no-spinner --failures-only

WGPU release builds can take a while because the native package facade and runtime support are compiled through Zig. The examples use src/core.kit and src/examples_ui.kit internally to keep parity builds narrower than importing the full public facade in every sample.

Generating Documentation

Generate API documentation from doc comments:

kit doc

Note: Kit sources with doc comments (##) will generate HTML documents in docs/*.html

Cleaning Build Artifacts

Remove generated files, caches, and build artifacts:

kit task clean

Note: Defined in kit.toml.

Local Installation

To install this package locally for development:

kit install

This installs the package to ~/.kit/packages/@kit/wgpu/, making it available for import as Kit.WGPU in other projects.

License

This package is released under the MIT License - see LICENSE for details.

wgpu-native is released under the Apache 2.0 / MIT License.

Exported Functions & Types

create-shader

Compile a WGSL shader module.

Parameters:

Returns:

Ptr -> NonEmptyString -> Result Ptr GPUError

destroy-shader

Destroy a shader module and release its resources.

Ptr -> Unit

dispatch-clear

Clear the dispatch entry list. Call this before adding entries for a new compute dispatch.

Unit

dispatch-add

Add a buffer to the dispatch entry list. Entries are bound in order as @binding(0), @binding(1), etc.

Ptr -> Unit

dispatch-add-storage-texture

Add a storage texture view to the dispatch entry list. Used for textures bound as read_write storage (textureStore).

Ptr -> Unit

dispatch-add-sampled-texture

Add a sampled texture view to the dispatch entry list. Used for textures bound as read-only (textureLoad/textureSample).

Ptr -> Unit

dispatch-add-sampler

Add a sampler to the dispatch entry list.

Ptr -> Unit

run

Run a compute shader.

Uses the entries previously added via dispatch-clear/dispatch-add*. Blocks until the compute operation is complete.

Parameters:

Returns:

Ptr -> Ptr -> NonEmptyString -> PositiveInt -> PositiveInt -> PositiveInt -> Result Unit GPUError

GPUError

GPU error type for typed error handling.

Variants

GPUError

AdapterNotFound

Adapter not found error variant.

Variants

AdapterNotFound

DeviceRequestFailed

Device request failed error variant.

Variants

DeviceRequestFailed

ShaderCompileError

Shader compile error variant.

Variants

ShaderCompileError

BufferError

Buffer error variant.

Variants

BufferError

ComputeError

Compute error variant.

Variants

ComputeError

TextureError

Texture error variant.

Variants

TextureError

buffer-usage-map-read

Buffer can be mapped for reading.

Int

buffer-usage-map-write

Buffer can be mapped for writing.

Int

buffer-usage-copy-src

Buffer can be used as a copy source.

Int

buffer-usage-copy-dst

Buffer can be used as a copy destination.

Int

buffer-usage-uniform

Buffer can be used as a uniform buffer.

Int

buffer-usage-storage

Buffer can be used as a storage buffer.

Int

texture-format-r8-unorm

R8Unorm texture format (1 byte per pixel, single channel).

Int

texture-format-r32-float

R32Float texture format (4 bytes per pixel, single float channel).

Int

texture-format-rgba8-unorm

RGBA8Unorm texture format (4 bytes per pixel, 8-bit RGBA).

Int

texture-format-rgba8-unorm-srgb

RGBA8UnormSrgb texture format (4 bytes per pixel, sRGB RGBA).

Int

texture-format-bgra8-unorm

BGRA8Unorm texture format (4 bytes per pixel, BGRA order).

Int

texture-format-rgba32-float

RGBA32Float texture format (16 bytes per pixel, 32-bit float RGBA).

Int

texture-usage-copy-src

Texture can be used as a copy source.

Int

texture-usage-copy-dst

Texture can be used as a copy destination.

Int

texture-usage-texture-binding

Texture can be bound as a sampled texture.

Int

texture-usage-storage-binding

Texture can be bound as a storage texture.

Int

texture-usage-render-attachment

Texture can be used as a render target attachment.

Int

filter-nearest

Nearest-neighbor filtering.

Int

filter-linear

Linear interpolation filtering.

Int

address-clamp-to-edge

Clamp texture coordinates to [0, 1].

Int

address-repeat

Repeat texture coordinates.

Int

address-mirror-repeat

Mirror and repeat texture coordinates.

Int

init

Initialize the GPU context.

NonNegativeInt -> Result Ptr GPUError

destroy

Destroy the GPU context and release all resources.

Ptr -> Unit

adapter-name

Get the name of the GPU adapter.

Ptr -> String

create-surface-metal-layer

Create a WGPU surface from a macOS CAMetalLayer pointer.

Ptr -> Ptr -> Result Ptr GPUError

release-surface

Release a previously created WGPU surface.

Ptr -> Unit

surface-preferred-texture-fmt

Query the preferred texture format for a surface. Uses the first format returned by surface capabilities.

Ptr -> Ptr -> Result Int GPUError

configure-surface

Configure a surface for rendering with default UI-friendly options. Uses render-attachment usage, FIFO present mode, and automatic alpha mode. Width and height are validated at runtime and must both be > 0.

Ptr -> Ptr -> Int -> Int -> Int -> Result Unit GPUError

acquire-surface-texture-view

Acquire a texture view for the current surface frame.

Ptr -> Result Ptr GPUError

begin-surface-batch

Begin a batched surface render pass. Subsequent rect and texture draws reuse the same render pass until present-surface.

Ptr -> Ptr -> Result Unit GPUError

begin-texture-batch

Begin a batched render pass into a render-attachment texture. Subsequent texture fill draws reuse the same render pass until finish-texture-batch.

Ptr -> Ptr -> Result Unit GPUError

finish-texture-batch

Finish a previously started batched render pass into a texture.

Ptr -> Result Unit GPUError

present-surface

Present the current surface frame.

Ptr -> Result Unit GPUError

clear-surface

Clear the current surface frame to a solid color and present it.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Result Unit GPUError

clear-texture

Clear a render-attachment texture to a solid color.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Result Unit GPUError

set-surface-scissor-rect

Set a clip rectangle on the surface for subsequent rect and texture draws. Coordinates are in surface pixels.

Ptr -> Int -> Int -> Int -> Int -> Result Unit GPUError

clear-surface-scissor-rect

Clear any clip rectangle set on the surface.

Ptr -> Unit

set-texture-scissor-rect

Set a clip rectangle on a render-attachment texture. Coordinates are in texture pixels.

Ptr -> Int -> Int -> Int -> Int -> Result Unit GPUError

clear-texture-scissor-rect

Clear any clip rectangle set on a render-attachment texture.

Ptr -> Unit

fill-surface-rect

Fill a rectangle on the current surface frame. If no frame is currently acquired, this acquires one, clears it to transparent black, draws the rectangle, and presents it. If a frame is already acquired, it draws into that frame without presenting.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-surface-rounded-rect

Fill a rounded rectangle on the current surface frame. Radius is in surface pixels.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-surface-vertical-gradient-rounded-rect

Fill a rounded rectangle with a vertical gradient on the current surface frame. Radius is in surface pixels.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

stroke-surface-rounded-rect

Stroke a rounded rectangle on the current surface frame. Stroke width and radius are in surface pixels.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-surface-corner-rounded-rect

Fill a rounded rectangle with independent corner radii on the current surface frame. Corner order is top-left, top-right, bottom-right, bottom-left.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-surface-vertical-gradient-corner-rounded-rect

Fill a rounded rectangle with a vertical gradient and independent corner radii on the current surface frame. Corner order is top-left, top-right, bottom-right, bottom-left.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

stroke-surface-corner-rounded-rect

Stroke a rounded rectangle with independent corner radii on the current surface frame. Corner order is top-left, top-right, bottom-right, bottom-left.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-texture-rect

Fill a rectangle into a render-attachment texture.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-texture-rounded-rect

Fill a rounded rectangle into a render-attachment texture.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-texture-vertical-gradient-rounded-rect

Fill a rounded rectangle with a vertical gradient into a render-attachment texture.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

stroke-texture-rounded-rect

Stroke a rounded rectangle into a render-attachment texture.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-texture-corner-rounded-rect

Fill a rounded rectangle with independent corner radii into a render-attachment texture. Corner order is top-left, top-right, bottom-right, bottom-left.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-texture-vertical-gradient-corner-rounded-rect

Fill a rounded rectangle with a vertical gradient and independent corner radii into a render-attachment texture. Corner order is top-left, top-right, bottom-right, bottom-left.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

stroke-texture-corner-rounded-rect

Stroke a rounded rectangle with independent corner radii into a render-attachment texture. Corner order is top-left, top-right, bottom-right, bottom-left.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

draw-texture-texture

Draw a source texture into a destination rectangle on a render-attachment texture.

Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Result Unit GPUError

draw-texture-texture-region

Draw a source region of a source texture into a destination rectangle on a render-attachment texture.

Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

draw-surface-texture

Draw a texture into a destination rectangle on the current surface frame. If no frame is currently acquired, this acquires one, clears it to transparent black, draws the texture, and presents it. If a frame is already acquired, it draws into that frame without presenting.

Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Result Unit GPUError

draw-surface-texture-region

Draw a region of a texture into a destination rectangle on the current surface frame. Source coordinates are in texture pixels. If no frame is currently acquired, this acquires one, clears it to transparent black, draws the texture region, and presents it. If a frame is already acquired, it draws into that frame without presenting.

Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

atlas-glyph

Construct a glyph record for a texture atlas.

Float -> Float -> Float -> Float -> Float -> {src-x: Float, src-y: Float, src-width: Float, src-height: Float, advance: Float}

draw-glyph

Draw a single atlas glyph to the current surface frame.

Ptr -> Ptr -> Ptr -> {src-x: Float, src-y: Float, src-width: Float, src-height: Float, advance: Float} -> Float -> Float -> Float -> Result Unit GPUError

measure-run-width

Measure the width of a glyph run at the given scale and letter spacing.

List {src-x: Float, src-y: Float, src-width: Float, src-height: Float, advance: Float} -> Float -> Float -> Float

draw-run

Draw a horizontal run of atlas glyphs to the current surface frame.

Ptr -> Ptr -> Ptr -> List {src-x: Float, src-y: Float, src-width: Float, src-height: Float, advance: Float} -> Float -> Float -> Float -> Float -> Result Unit GPUError

create-buffer

Create a GPU buffer for float data.

Ptr -> PositiveInt -> Int -> Int -> Result Ptr GPUError

set-float

Write a float value to a mapped buffer at the given index.

Ptr -> NonNegativeInt -> Float -> Unit

get-float

Read a float value from a mapped buffer at the given index.

Ptr -> NonNegativeInt -> Float

map-read

Map a buffer for CPU reading. Blocks until mapped.

Ptr -> Ptr -> Result Unit GPUError

unmap

Unmap a previously mapped buffer.

Ptr -> Unit

copy-buffer

Copy float data between GPU buffers.

Ptr -> Ptr -> Ptr -> PositiveInt -> Unit

release-buffer

Release a buffer and its resources.

Ptr -> Unit

create-shader

Compile a WGSL shader module.

Ptr -> NonEmptyString -> Result Ptr GPUError

destroy-shader

Destroy a shader module and release its resources.

Ptr -> Unit

dispatch-clear

Clear the dispatch entry list.

Unit

dispatch-add

Add a buffer to the dispatch entry list.

Ptr -> Unit

dispatch-add-storage-texture

Add a storage texture view to the dispatch entry list.

Ptr -> Unit

dispatch-add-sampled-texture

Add a sampled texture view to the dispatch entry list.

Ptr -> Unit

dispatch-add-sampler

Add a sampler to the dispatch entry list.

Ptr -> Unit

compute

Run a compute shader with the previously added entries.

Ptr -> Ptr -> NonEmptyString -> PositiveInt -> PositiveInt -> PositiveInt -> Result Unit GPUError

RoundedPanelStackChildren

Internal list shape for rounded panel stack children.

Variants

StackChild {RoundedPanelNode}
StackChildren {child, tail}

RoundedPanelNode

Minimal retained node tree for rounded panel UI composition.

Variants

PanelLeaf {RoundedPanelView}
SplitBranch {leading-width, spacing, sidebar, trailing}
StackBranch {spacing, is-horizontal?, children}
OverlayBranch {children}

RoundedPanelSplitPointerPhase

Split-divider pointer phases in drawable-space coordinates.

Variants

SplitPointerDown
SplitPointerMove
SplitPointerUp
SplitPointerLeave

create-box-blur-effect

Create a reusable separable box blur effect.

Ptr -> PositiveInt -> Result {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt} GPUError

create-gaussian-blur-effect

Create a reusable separable Gaussian blur effect.

Ptr -> PositiveInt -> PositiveFloat -> Result {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt} GPUError

default-panel-shadow-style

Package default shadow style for rounded desktop panels.

{radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}

default-rounded-panel-style

Package default style for rounded desktop panels.

{shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}

default-split-divider-style

Package default style for a split-divider affordance.

default-rounded-panel-split-shell-style

Package default style for a retained sidebar/detail shell.

create-panel-shadow-effect

Create a shadow effect from a style record.

Ptr -> {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float} -> Result {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt} GPUError

create-rounded-panel-shadow-effect

Create a shadow effect from a rounded panel style record.

Ptr -> {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float} -> Result {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt} GPUError

create-default-panel-shadow-effect

Create the package's default shadow effect for rounded panels.

Ptr -> Result {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt} GPUError

create-rounded-panel-layer

Create an owned offscreen layer for repeatedly rendering styled rounded panels.

Ptr -> PositiveInt -> PositiveInt -> {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float} -> Result {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt} GPUError

create-default-rounded-panel-layer

Create an owned offscreen layer using the package default panel style.

Ptr -> PositiveInt -> PositiveInt -> Result {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt} GPUError

create-rounded-panel-layer-state

Create retained state for a rounded panel layer. New state starts dirty so the first render refreshes the cached layer.

{effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt} -> {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}

create-rounded-panel-view

Create a retained rounded panel view with owned layer cache, style, and frame.

Ptr -> PositiveInt -> PositiveInt -> {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float} -> Float -> Float -> Float -> Float -> Result {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float} GPUError

create-default-rounded-panel-view

Create a retained rounded panel view using the package default style.

Ptr -> PositiveInt -> PositiveInt -> Float -> Float -> Float -> Float -> Result {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float} GPUError

create-rounded-panel-scene

Create an empty rounded panel scene.

{views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}}

create-rounded-panel-split-scene

Create a retained split scene from sidebar and detail views plus a split layout record.

{state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float} -> {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float} -> {x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float} -> {sidebar: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, detail: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, layout: {x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float}}

default-rounded-panel-column-layout

Default vertical layout for retained rounded panel views.

{x: Float, y: Float, width: Float, item-height: Float, spacing: Float}

default-rounded-panel-stack-layout

Default stack layout for retained rounded panel views.

{x: Float, y: Float, item-width: Float, item-height: Float, spacing: Float, is-horizontal?: Bool}

default-rounded-panel-split-layout

Default split layout for retained rounded panel views.

{x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float}

release-rounded-panel-layer

Release a previously created rounded panel layer.

{effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt} -> Unit

release-rounded-panel-layer-state

Release retained rounded panel layer state and its owned layer.

{layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool} -> Unit

release-rounded-panel-view

Release a retained rounded panel view and its owned layer cache.

{state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float} -> Unit

release-rounded-panel-scene

Release every retained view in a rounded panel scene.

{views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}} -> Unit

release-rounded-panel-split-scene

Release a retained split scene and both owned views.

{sidebar: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, detail: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, layout: {x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float}} -> Unit

resize-rounded-panel-layer

Replace a rounded panel layer with a newly sized/styled one. The existing layer is only released after the replacement succeeds.

Ptr -> {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt} -> PositiveInt -> PositiveInt -> {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float} -> Result {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt} GPUError

resize-default-rounded-panel-layer

Replace a rounded panel layer with a newly sized layer using the package default panel style.

Ptr -> {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt} -> PositiveInt -> PositiveInt -> Result {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt} GPUError

mark-rounded-panel-layer-dirty

Mark retained rounded panel layer state dirty.

{layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool} -> {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}

clear-rounded-panel-layer-dirty

Mark retained rounded panel layer state clean without rendering.

{layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool} -> {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}

mark-rounded-panel-view-dirty

Return a rounded panel view with its cached layer marked dirty.

{state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float} -> {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float}

rounded-panel-scene-add-view

Append a retained rounded panel view to the end of a scene.

{views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}} -> {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float} -> {views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}}

mark-rounded-panel-scene-dirty

Mark every retained rounded panel view in a scene dirty.

{views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}} -> {views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}}

mark-rounded-panel-split-scene-dirty

Mark both retained views in a split scene dirty.

{sidebar: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, detail: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, layout: {x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float}} -> {sidebar: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, detail: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, layout: {x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float}}

set-rounded-panel-split-scene-layout

Return a split scene with an updated split layout record.

{sidebar: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, detail: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, layout: {x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float}} -> {x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float} -> {sidebar: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, detail: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, layout: {x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float}}

create-rounded-panel-split-drag-state

Create retained drag state for a split-scene divider.

rounded-panel-split-drag-scene

Get the retained split scene owned by drag state.

set-rounded-panel-split-drag-scene

Replace the retained split scene owned by drag state.

style-rounded-panel-split-scene

Apply a shell style record to both retained views in a split scene.

style-rounded-panel-split-drag-state

Apply a shell style record to the split scene owned by retained drag state.

rounded-panel-node-leaf

Wrap a retained rounded panel view as a leaf node.

rounded-panel-node-split

Build a split node from two child nodes.

rounded-panel-node-stack

Build a stack node from a child list.

rounded-panel-node-overlay

Build an overlay node from a child list.

rounded-panel-node-stack-child-count

Return the number of direct stack slots represented by a stack node.

release-rounded-panel-node

Release every owned view reachable from a rounded panel node tree.

mark-rounded-panel-node-dirty

Mark every retained panel view in a node tree dirty.

has-active-rounded-panel-split-drag?

Check whether split drag state is actively dragging.

has-hover-rounded-panel-split-divider?

Check whether split drag state is currently hovering the divider.

has-rounded-panel-split-resize-cursor?

Check whether split drag state should show a resize cursor.

rounded-panel-split-scene-divider-x

Return the divider x-position for a retained split scene.

is-point-in-rounded-panel-split-scene-divider?

Check whether a point falls within a retained split scene's divider hit area.

rounded-panel-split-scene-leading-width-at-divider-x

Convert a divider x-position into a clamped leading width for a retained split scene.

begin-rounded-panel-split-drag

Start dragging a retained split-scene divider if the pointer hits its handle.

update-rounded-panel-split-drag-hover

Update retained split-divider hover state from a pointer location.

end-rounded-panel-split-drag

End an active retained split-scene divider drag.

layout-rounded-panel-scene-column

Apply a simple vertical layout to every view in a scene. This updates both retained panel frames and surface draw frames.

{x: Float, y: Float, width: Float, item-height: Float, spacing: Float} -> {views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}} -> {views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}}

layout-rounded-panel-scene-stack

Apply a simple stack layout to every view in a scene. This updates both retained panel frames and surface draw frames.

{x: Float, y: Float, item-width: Float, item-height: Float, spacing: Float, is-horizontal?: Bool} -> {views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}} -> {views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}}

resize-and-layout-rounded-panel-scene-stack

Resize each retained rounded panel view's owned layer cache to a fixed item size, then apply stack layout frames.

Ptr -> PositiveInt -> PositiveInt -> {x: Float, y: Float, item-width: Float, item-height: Float, spacing: Float, is-horizontal?: Bool} -> {views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}} -> Result {views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}} GPUError

layout-rounded-panel-scene-split

Apply a simple split layout to the first two views in a scene. Additional trailing views keep their existing frames.

{x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float} -> {views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}} -> {views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}}

resize-and-layout-rounded-panel-scene-split

Resize the first two retained rounded panel views' owned layer caches, then apply split layout frames. Additional trailing views keep their existing caches and frames.

Ptr -> PositiveInt -> PositiveInt -> PositiveInt -> PositiveInt -> {x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float} -> {views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}} -> Result {views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}} GPUError

layout-rounded-panel-split-scene

Apply the split layout owned by a retained split scene.

{sidebar: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, detail: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, layout: {x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float}} -> Result {sidebar: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, detail: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, layout: {x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float}} GPUError

resize-and-layout-rounded-panel-split-scene

Resize both owned view layer caches and apply the retained split scene's split layout.

Ptr -> PositiveInt -> PositiveInt -> PositiveInt -> PositiveInt -> {sidebar: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, detail: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, layout: {x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float}} -> Result {sidebar: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, detail: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, layout: {x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float}} GPUError

resize-and-layout-rounded-panel-split-scene-frame

Resize and layout a retained split scene from integer frame dimensions.

Ptr -> Float -> Float -> PositiveInt -> PositiveInt -> PositiveInt -> PositiveInt -> {sidebar: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, detail: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, layout: {x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float}} -> Result {sidebar: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, detail: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, layout: {x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float}} GPUError

resize-and-layout-rounded-panel-split-scene-at-divider-x

Resize and layout a retained split scene by dragging its divider to divider-x.

drag-rounded-panel-split

Drag a retained split-scene divider if drag state is active.

handle-rounded-panel-split-pointer

Apply one split-divider pointer phase in drawable-space coordinates.

draw-styled-rounded-panel-split-divider

Draw the retained split divider affordance using a divider style.

draw-rounded-panel-split-divider

Draw the retained split divider affordance using the package default style.

resize-rounded-panel-layer-state

Resize retained rounded panel layer state and mark the replacement dirty.

Ptr -> {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool} -> PositiveInt -> PositiveInt -> {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float} -> Result {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool} GPUError

resize-default-rounded-panel-layer-state

Resize retained rounded panel layer state using the package default panel style.

Ptr -> {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool} -> PositiveInt -> PositiveInt -> Result {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool} GPUError

resize-rounded-panel-view-layer

Replace a rounded panel view's owned layer cache with a newly sized layer while keeping its style and frame.

Ptr -> {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float} -> PositiveInt -> PositiveInt -> Result {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float} GPUError

set-rounded-panel-view-style

Replace a rounded panel view's style and rebuild its owned layer cache as needed.

Ptr -> {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float} -> {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float} -> Result {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float} GPUError

set-rounded-panel-view-frame

Return a rounded panel view with updated frame and its cached layer marked dirty.

{state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float} -> Float -> Float -> Float -> Float -> {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float}

set-rounded-panel-view-surface-frame

Return a rounded panel view with updated surface draw frame.

{state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float} -> Float -> Float -> Float -> Float -> {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}

rounded-panel-layer-texture

Get the sampled destination texture owned by a rounded panel layer.

{effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt} -> Ptr

rounded-panel-layer-state-texture

Get the sampled destination texture owned by retained rounded panel layer state.

{layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool} -> Ptr

rounded-panel-view-texture

Get the sampled destination texture owned by a rounded panel view.

{state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float} -> Ptr

draw-rounded-panel-view

Draw a retained rounded panel view's cached texture to a surface. Assumes the caller has already configured the surface render pass as needed.

Ptr -> Ptr -> {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float} -> Result Unit GPUError

release-box-blur-effect

Release a previously created box blur effect.

{horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt} -> Unit

apply-box-blur

Apply a separable box blur from source into destination using scratch as the intermediate texture.

Ptr -> {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt} -> Ptr -> Ptr -> Ptr -> Result Unit GPUError

apply-gaussian-blur

Apply a separable Gaussian blur from source into destination using scratch as the intermediate texture.

Ptr -> {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt} -> Ptr -> Ptr -> Ptr -> Result Unit GPUError

render-rounded-rect-shadow

Render a blurred rounded-rectangle shadow into destination using source and scratch as intermediates.

Ptr -> {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt} -> Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

render-corner-rounded-rect-shadow

Render a blurred corner-rounded shadow into destination using source and scratch as intermediates. Corner order is top-left, top-right, bottom-right, bottom-left.

Ptr -> {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt} -> Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

render-shadowed-rounded-panel

Render a shadowed rounded panel into destination using source and scratch as intermediates.

Ptr -> {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt} -> Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

render-styled-shadowed-rounded-panel

Render a shadowed rounded panel using a style record for the shadow.

Ptr -> {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt} -> {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float} -> Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

render-styled-rounded-panel

Render a rounded panel using a full style record for fill, border, and shadow.

Ptr -> {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt} -> {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float} -> Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

render-rounded-panel-layer

Render a styled rounded panel into an owned rounded panel layer.

Ptr -> {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt} -> {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float} -> Float -> Float -> Float -> Float -> Result Unit GPUError

render-default-rounded-panel-layer

Render a rounded panel into an owned rounded panel layer using the package default style.

Ptr -> {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt} -> Float -> Float -> Float -> Float -> Result Unit GPUError

render-rounded-panel-layer-if-dirty

Render retained rounded panel layer state only when it is dirty. Returns updated state marked clean on success.

Ptr -> {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool} -> {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float} -> Float -> Float -> Float -> Float -> Result {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool} GPUError

render-default-rounded-panel-layer-if-dirty

Render retained rounded panel layer state using the package default style only when it is dirty.

Ptr -> {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool} -> Float -> Float -> Float -> Float -> Result {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool} GPUError

render-rounded-panel-view-if-dirty

Render a retained rounded panel view only when its cached layer is dirty. Returns updated view state marked clean on success.

Ptr -> {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float} -> Result {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float} GPUError

render-default-rounded-panel-view-if-dirty

Render a retained rounded panel view using the package default style only when its cached layer is dirty.

Ptr -> {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float} -> Result {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float} GPUError

render-and-draw-rounded-panel-view

Render a retained rounded panel view if needed, then draw it to a surface.

Ptr -> Ptr -> {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float} -> Result {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float} GPUError

render-and-draw-default-rounded-panel-view

Render a retained rounded panel view using the package default style if needed, then draw it to a surface.

Ptr -> Ptr -> {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float} -> Result {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float} GPUError

render-and-draw-rounded-panel-scene

Render and draw each retained rounded panel view in a scene in order. Returns updated scene values with dirty flags cleared where rendering succeeded.

Ptr -> Ptr -> {views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}} -> Result {views: List {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}} GPUError

render-and-draw-rounded-panel-split-scene

Render and draw a retained split scene using its two owned views and split layout.

Ptr -> Ptr -> {sidebar: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, detail: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, layout: {x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float}} -> Result {sidebar: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, detail: {state: {layer: {effect: {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt}, source: Ptr, scratch: Ptr, destination: Ptr, width: PositiveInt, height: PositiveInt}, is-dirty?: Bool}, style: {shadow: {radius: PositiveInt, sigma: PositiveFloat, offset-x: Float, offset-y: Float, r: Float, g: Float, b: Float, a: Float}, top-left-radius: Float, top-right-radius: Float, bottom-right-radius: Float, bottom-left-radius: Float, border-width: Float, border-r: Float, border-g: Float, border-b: Float, border-a: Float, fill-top-r: Float, fill-top-g: Float, fill-top-b: Float, fill-top-a: Float, fill-bottom-r: Float, fill-bottom-g: Float, fill-bottom-b: Float, fill-bottom-a: Float}, x: Float, y: Float, width: Float, height: Float, surface-x: Float, surface-y: Float, surface-width: Float, surface-height: Float}, layout: {x: Float, y: Float, width: Float, height: Float, leading-width: Float, spacing: Float}} GPUError

render-and-draw-styled-rounded-panel-split-drag-state

Render and draw a retained split scene plus its divider affordance using a divider style.

render-and-draw-rounded-panel-split-drag-state

Render and draw a retained split scene plus its divider affordance.

resize-and-layout-rounded-panel-node-frame

Resize and layout a rounded panel node tree within an integer frame.

render-and-draw-rounded-panel-node

Render and draw a rounded panel node tree in traversal order.

render-default-shadowed-rounded-panel

Render a rounded panel into destination using the package's default shadow style.

Ptr -> {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt} -> Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

render-default-rounded-panel

Render a rounded panel using the package's default panel style.

Ptr -> {horizontal-shader: Ptr, vertical-shader: Ptr, sampler: Ptr, radius: PositiveInt} -> Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

create-texture

Create a 2D GPU texture with CPU staging buffer.

Ptr -> PositiveInt -> PositiveInt -> Int -> Int -> Result Ptr GPUError

texture-width

Get the width of a texture in pixels.

Ptr -> Int

texture-height

Get the height of a texture in pixels.

Ptr -> Int

texture-set-pixel

Set a pixel's RGBA values in the CPU staging buffer.

Ptr -> NonNegativeInt -> NonNegativeInt -> Byte -> Byte -> Byte -> Byte -> Unit

texture-get-pixel-r

Get the red channel of a pixel from the CPU staging buffer.

Ptr -> NonNegativeInt -> NonNegativeInt -> Int

texture-get-pixel-g

Get the green channel of a pixel from the CPU staging buffer.

Ptr -> NonNegativeInt -> NonNegativeInt -> Int

texture-get-pixel-b

Get the blue channel of a pixel from the CPU staging buffer.

Ptr -> NonNegativeInt -> NonNegativeInt -> Int

texture-get-pixel-a

Get the alpha channel of a pixel from the CPU staging buffer.

Ptr -> NonNegativeInt -> NonNegativeInt -> Int

texture-upload

Upload staging buffer data to the GPU texture.

Ptr -> Ptr -> Result Unit GPUError

texture-download

Download GPU texture data to the CPU staging buffer.

Ptr -> Ptr -> Result Unit GPUError

create-texture-view

Create a texture view for use in bind groups.

Ptr -> Result Ptr GPUError

release-texture

Release a texture and its staging buffer.

Ptr -> Unit

texture-copy-from-bytes

Copy raw bytes from an image data pointer into the texture staging buffer. Handles channel conversion (1ch/3ch/4ch → RGBA8) internally.

Ptr -> Ptr -> PositiveInt -> PositiveInt -> PositiveInt -> Unit

texture-copy-to-bytes

Copy texture staging buffer data to a raw byte pointer. Handles channel conversion (RGBA8 → 1ch/3ch/4ch) internally.

Ptr -> Ptr -> PositiveInt -> PositiveInt -> PositiveInt -> Unit

release-texture-view

Release a texture view.

Ptr -> Unit

create-sampler

Create a GPU sampler for texture filtering.

Ptr -> Int -> Int -> Int -> Result Ptr GPUError

release-sampler

Release a sampler and its resources.

Ptr -> Unit

RoundedPanelNode

Minimal retained node tree for rounded panel UI composition.

Variants

PanelLeaf {RoundedPanelView}
SplitBranch {RoundedPanelSplitNode}
StackBranch {RoundedPanelStackNode}
OverlayBranch {RoundedPanelOverlayNode}

RoundedPanelSplitPointerPhase

Split-divider pointer phases in drawable-space coordinates.

Variants

SplitPointerDown
SplitPointerMove
SplitPointerUp
SplitPointerLeave

default-panel-shadow-style

Package default shadow style for rounded desktop panels.

default-rounded-panel-style

Package default style for rounded desktop panels.

default-split-divider-style

Package default style for a split-divider affordance.

default-rounded-panel-split-shell-style

Package default style for a retained sidebar/detail shell.

create-box-blur-effect

Create a reusable separable box blur effect. Radius is the number of taps on each side of the center sample.

Ptr -> PositiveInt -> Result BoxBlurEffect GPUError

release-box-blur-effect

Release a previously created box blur effect.

BoxBlurEffect -> Unit

apply-box-blur

Apply a separable box blur from source into destination using scratch as the intermediate texture. scratch and destination should support both sampled and storage-texture usage.

Ptr -> BoxBlurEffect -> Ptr -> Ptr -> Ptr -> Result Unit GPUError

create-gaussian-blur-effect

Create a reusable separable Gaussian blur effect. Sigma controls the weight falloff; larger values produce softer blur.

Ptr -> PositiveInt -> PositiveFloat -> Result BoxBlurEffect GPUError

apply-gaussian-blur

Apply a separable Gaussian blur using a previously created effect.

Ptr -> BoxBlurEffect -> Ptr -> Ptr -> Ptr -> Result Unit GPUError

create-panel-shadow-effect

Create a shadow effect from a style record.

Ptr -> PanelShadowStyle -> Result BoxBlurEffect GPUError

create-rounded-panel-shadow-effect

Create a shadow effect from a rounded panel style record.

Ptr -> RoundedPanelStyle -> Result BoxBlurEffect GPUError

create-default-panel-shadow-effect

Create a default shadow effect tuned for rounded desktop panels.

Ptr -> Result BoxBlurEffect GPUError

create-rounded-panel-layer

Create an owned offscreen layer for repeatedly rendering styled rounded panels. The layer owns its blur effect and all intermediate textures.

Ptr -> PositiveInt -> PositiveInt -> RoundedPanelStyle -> Result RoundedPanelLayer GPUError

create-default-rounded-panel-layer

Create an owned offscreen layer using the package default panel style.

Ptr -> PositiveInt -> PositiveInt -> Result RoundedPanelLayer GPUError

create-rounded-panel-layer-state

Create retained state for a rounded panel layer. New state starts dirty so the first render refreshes the cached layer.

RoundedPanelLayer -> RoundedPanelLayerState

create-rounded-panel-view

Create a retained rounded panel view with owned layer cache, style, and frame.

Ptr -> PositiveInt -> PositiveInt -> RoundedPanelStyle -> Float -> Float -> Float -> Float -> Result RoundedPanelView GPUError

create-default-rounded-panel-view

Create a retained rounded panel view using the package default style.

Ptr -> PositiveInt -> PositiveInt -> Float -> Float -> Float -> Float -> Result RoundedPanelView GPUError

create-rounded-panel-scene

Create an empty rounded panel scene.

RoundedPanelScene

default-rounded-panel-column-layout

Default vertical layout for retained rounded panel views.

default-rounded-panel-stack-layout

Default stack layout for retained rounded panel views.

default-rounded-panel-split-layout

Default split layout for retained rounded panel views.

create-rounded-panel-split-scene

Create a retained split scene from sidebar and detail views plus a split layout record.

RoundedPanelView -> RoundedPanelView -> RoundedPanelSplitLayout -> RoundedPanelSplitScene

release-rounded-panel-layer

Release a previously created rounded panel layer.

RoundedPanelLayer -> Unit

release-rounded-panel-layer-state

Release retained rounded panel layer state and its owned layer.

RoundedPanelLayerState -> Unit

release-rounded-panel-view

Release a retained rounded panel view and its owned layer cache.

RoundedPanelView -> Unit

release-rounded-panel-scene

Release every retained view in a rounded panel scene.

RoundedPanelScene -> Unit

release-rounded-panel-split-scene

Release a retained split scene and both owned views.

RoundedPanelSplitScene -> Unit

resize-rounded-panel-layer

Replace a rounded panel layer with a newly sized/styled one. The existing layer is only released after the replacement succeeds.

Ptr -> RoundedPanelLayer -> PositiveInt -> PositiveInt -> RoundedPanelStyle -> Result RoundedPanelLayer GPUError

resize-default-rounded-panel-layer

Replace a rounded panel layer with a newly sized layer using the package default panel style.

Ptr -> RoundedPanelLayer -> PositiveInt -> PositiveInt -> Result RoundedPanelLayer GPUError

mark-rounded-panel-layer-dirty

Mark retained rounded panel layer state dirty.

RoundedPanelLayerState -> RoundedPanelLayerState

clear-rounded-panel-layer-dirty

Mark retained rounded panel layer state clean without rendering.

RoundedPanelLayerState -> RoundedPanelLayerState

mark-rounded-panel-view-dirty

Return a rounded panel view with its cached layer marked dirty.

RoundedPanelView -> RoundedPanelView

rounded-panel-scene-add-view

Append a retained rounded panel view to the end of a scene.

RoundedPanelScene -> RoundedPanelView -> RoundedPanelScene

mark-rounded-panel-scene-dirty

Mark every retained rounded panel view in a scene dirty.

RoundedPanelScene -> RoundedPanelScene

mark-rounded-panel-split-scene-dirty

Mark both retained views in a split scene dirty.

RoundedPanelSplitScene -> RoundedPanelSplitScene

set-rounded-panel-split-scene-layout

Return a split scene with an updated split layout record.

RoundedPanelSplitScene -> RoundedPanelSplitLayout -> RoundedPanelSplitScene

create-rounded-panel-split-drag-state

Create retained drag state for a split-scene divider.

RoundedPanelSplitScene -> PositiveInt -> PositiveInt -> Float -> RoundedPanelSplitDragState

rounded-panel-split-drag-scene

Get the retained split scene owned by drag state.

RoundedPanelSplitDragState -> RoundedPanelSplitScene

set-rounded-panel-split-drag-scene

Replace the retained split scene owned by drag state. Active drag state is preserved.

RoundedPanelSplitDragState -> RoundedPanelSplitScene -> RoundedPanelSplitDragState

style-rounded-panel-split-scene

Apply a shell style record to both retained views in a split scene.

Ptr -> RoundedPanelSplitShellStyle -> RoundedPanelSplitScene -> Result RoundedPanelSplitScene GPUError

style-rounded-panel-split-drag-state

Apply a shell style record to the split scene owned by retained drag state.

Ptr -> RoundedPanelSplitShellStyle -> RoundedPanelSplitDragState -> Result RoundedPanelSplitDragState GPUError

rounded-panel-node-leaf

Wrap a retained rounded panel view as a leaf node.

RoundedPanelView -> RoundedPanelNode

rounded-panel-node-split

Build a split node from two child nodes.

PositiveInt -> PositiveInt -> RoundedPanelNode -> RoundedPanelNode -> RoundedPanelNode

rounded-panel-node-stack

Build a stack node from a child list.

PositiveInt -> Bool -> List RoundedPanelNode -> Result RoundedPanelNode GPUError

rounded-panel-node-overlay

Build an overlay node from a child list.

List RoundedPanelNode -> Result RoundedPanelNode GPUError

release-rounded-panel-node

Release every owned view reachable from a rounded panel node tree.

RoundedPanelNode -> Unit

mark-rounded-panel-node-dirty

Mark every retained panel view in a node tree dirty.

RoundedPanelNode -> RoundedPanelNode

has-active-rounded-panel-split-drag?

Check whether split drag state is actively dragging.

RoundedPanelSplitDragState -> Bool

has-hover-rounded-panel-split-divider?

Check whether split drag state is currently hovering the divider.

RoundedPanelSplitDragState -> Bool

has-rounded-panel-split-resize-cursor?

Check whether split drag state should show a resize cursor.

RoundedPanelSplitDragState -> Bool

rounded-panel-split-scene-divider-x

Return the divider x-position for a retained split scene. This is the leading edge of the spacing gap between sidebar and detail.

RoundedPanelSplitScene -> Float

is-point-in-rounded-panel-split-scene-divider?

Check whether a point falls within a retained split scene's divider hit area. hit-slop expands both sides of the divider gap for easier pointer interaction.

RoundedPanelSplitScene -> Float -> Float -> Float -> Bool

rounded-panel-split-scene-leading-width-at-divider-x

Convert a divider x-position into a clamped leading width for a retained split scene. The split scene must already have integer-backed frame dimensions.

RoundedPanelSplitScene -> Float -> PositiveInt -> PositiveInt -> Result PositiveInt GPUError

begin-rounded-panel-split-drag

Start dragging a retained split-scene divider if the pointer hits its handle.

RoundedPanelSplitDragState -> Float -> Float -> RoundedPanelSplitDragState

update-rounded-panel-split-drag-hover

Update retained split-divider hover state from a pointer location. Active drags keep the divider hot until drag end.

RoundedPanelSplitDragState -> Float -> Float -> RoundedPanelSplitDragState

end-rounded-panel-split-drag

End an active retained split-scene divider drag.

RoundedPanelSplitDragState -> RoundedPanelSplitDragState

layout-rounded-panel-scene-column

Apply a simple vertical layout to every view in a scene. This updates both the retained panel frame and the surface draw frame.

RoundedPanelColumnLayout -> RoundedPanelScene -> RoundedPanelScene

layout-rounded-panel-scene-stack

Apply a simple stack layout to every view in a scene. This updates both retained panel frames and surface draw frames.

RoundedPanelStackLayout -> RoundedPanelScene -> RoundedPanelScene

resize-and-layout-rounded-panel-scene-stack

Resize each retained rounded panel view's owned layer cache to a fixed item size, then apply stack layout frames. This is a first bridge between retained layout and retained layer sizing.

Ptr -> PositiveInt -> PositiveInt -> RoundedPanelStackLayout -> RoundedPanelScene -> Result RoundedPanelScene GPUError

layout-rounded-panel-scene-split

Apply a simple split layout to the first two views in a scene. Additional trailing views keep their existing frames.

RoundedPanelSplitLayout -> RoundedPanelScene -> RoundedPanelScene

resize-and-layout-rounded-panel-scene-split

Resize the first two retained rounded panel views' owned layer caches, then apply split layout frames. Additional trailing views keep their existing caches and frames.

Ptr -> PositiveInt -> PositiveInt -> PositiveInt -> PositiveInt -> RoundedPanelSplitLayout -> RoundedPanelScene -> Result RoundedPanelScene GPUError

layout-rounded-panel-split-scene

Apply the split layout owned by a retained split scene.

RoundedPanelSplitScene -> Result RoundedPanelSplitScene GPUError

resize-and-layout-rounded-panel-split-scene

Resize both owned view layer caches and apply the retained split scene's split layout.

Ptr -> PositiveInt -> PositiveInt -> PositiveInt -> PositiveInt -> RoundedPanelSplitScene -> Result RoundedPanelSplitScene GPUError

resize-and-layout-rounded-panel-split-scene-frame

Resize and layout a retained split scene from integer frame dimensions. The same dimensions drive both layer-cache sizing and split-layout geometry.

Ptr -> Float -> Float -> PositiveInt -> PositiveInt -> PositiveInt -> PositiveInt -> RoundedPanelSplitScene -> Result RoundedPanelSplitScene GPUError

resize-and-layout-rounded-panel-split-scene-at-divider-x

Resize and layout a retained split scene by dragging its divider to divider-x. The requested divider position is clamped to preserve minimum sidebar and detail widths.

Ptr -> Float -> PositiveInt -> PositiveInt -> RoundedPanelSplitScene -> Result RoundedPanelSplitScene GPUError

drag-rounded-panel-split

Drag a retained split-scene divider if drag state is active. Returns updated drag state owning the relaid-out split scene.

Ptr -> Float -> RoundedPanelSplitDragState -> Result RoundedPanelSplitDragState GPUError

handle-rounded-panel-split-pointer

Apply one split-divider pointer phase in drawable-space coordinates. This collapses hover, begin-drag, drag, and end-drag sequencing into one retained helper.

Ptr -> RoundedPanelSplitPointerPhase -> Float -> Float -> RoundedPanelSplitDragState -> Result RoundedPanelSplitDragState GPUError

draw-styled-rounded-panel-split-divider

Draw the retained split divider affordance for a drag state using a divider style. Assumes the caller has already configured the surface render pass as needed.

Ptr -> Ptr -> SplitDividerStyle -> RoundedPanelSplitDragState -> Result Unit GPUError

draw-rounded-panel-split-divider

Draw the retained split divider affordance for a drag state using the package default style.

Ptr -> Ptr -> RoundedPanelSplitDragState -> Result Unit GPUError

render-and-draw-styled-rounded-panel-split-drag-state

Render and draw a retained split scene plus its divider affordance from drag state using a divider style.

Ptr -> Ptr -> SplitDividerStyle -> RoundedPanelSplitDragState -> Result RoundedPanelSplitDragState GPUError

render-and-draw-rounded-panel-split-drag-state

Render and draw a retained split scene plus its divider affordance from drag state.

Ptr -> Ptr -> RoundedPanelSplitDragState -> Result RoundedPanelSplitDragState GPUError

resize-and-layout-rounded-panel-node-frame

Resize and layout a rounded panel node tree within an integer frame. Split branches recursively allocate leading and trailing child frames.

Ptr -> Float -> Float -> PositiveInt -> PositiveInt -> RoundedPanelNode -> Result RoundedPanelNode GPUError

render-and-draw-rounded-panel-node

Render and draw a rounded panel node tree in traversal order.

Ptr -> Ptr -> RoundedPanelNode -> Result RoundedPanelNode GPUError

rounded-panel-node-stack-child-count

Return the number of direct stack slots represented by a stack node.

RoundedPanelNode -> Result Int GPUError

resize-rounded-panel-layer-state

Resize retained rounded panel layer state and mark the replacement dirty.

Ptr -> RoundedPanelLayerState -> PositiveInt -> PositiveInt -> RoundedPanelStyle -> Result RoundedPanelLayerState GPUError

resize-default-rounded-panel-layer-state

Resize retained rounded panel layer state using the package default panel style and mark the replacement dirty.

Ptr -> RoundedPanelLayerState -> PositiveInt -> PositiveInt -> Result RoundedPanelLayerState GPUError

resize-rounded-panel-view-layer

Replace a rounded panel view's owned layer cache with a newly sized layer while keeping its style and frame.

Ptr -> RoundedPanelView -> PositiveInt -> PositiveInt -> Result RoundedPanelView GPUError

set-rounded-panel-view-style

Replace a rounded panel view's style and rebuild its owned layer cache as needed.

Ptr -> RoundedPanelView -> RoundedPanelStyle -> Result RoundedPanelView GPUError

set-rounded-panel-view-frame

Return a rounded panel view with updated frame and its cached layer marked dirty.

RoundedPanelView -> Float -> Float -> Float -> Float -> RoundedPanelView

set-rounded-panel-view-surface-frame

Return a rounded panel view with updated surface draw frame.

RoundedPanelView -> Float -> Float -> Float -> Float -> RoundedPanelView

rounded-panel-layer-texture

Get the sampled destination texture owned by a rounded panel layer.

RoundedPanelLayer -> Ptr

rounded-panel-layer-state-texture

Get the sampled destination texture owned by retained rounded panel layer state.

RoundedPanelLayerState -> Ptr

rounded-panel-view-texture

Get the sampled destination texture owned by a rounded panel view.

RoundedPanelView -> Ptr

draw-rounded-panel-view

Draw a retained rounded panel view's cached texture to a surface. Assumes the caller has already configured the surface render pass as needed.

Ptr -> Ptr -> RoundedPanelView -> Result Unit GPUError

render-rounded-panel-layer

Render a styled rounded panel into an owned rounded panel layer.

Ptr -> RoundedPanelLayer -> RoundedPanelStyle -> Float -> Float -> Float -> Float -> Result Unit GPUError

render-default-rounded-panel-layer

Render a styled rounded panel into an owned rounded panel layer using the package default style.

Ptr -> RoundedPanelLayer -> Float -> Float -> Float -> Float -> Result Unit GPUError

render-rounded-panel-layer-if-dirty

Render retained rounded panel layer state only when it is dirty. Returns updated state marked clean on success.

Ptr -> RoundedPanelLayerState -> RoundedPanelStyle -> Float -> Float -> Float -> Float -> Result RoundedPanelLayerState GPUError

render-default-rounded-panel-layer-if-dirty

Render retained rounded panel layer state using the package default style only when it is dirty.

Ptr -> RoundedPanelLayerState -> Float -> Float -> Float -> Float -> Result RoundedPanelLayerState GPUError

render-rounded-panel-view-if-dirty

Render a retained rounded panel view only when its cached layer is dirty. Returns updated view state marked clean on success.

Ptr -> RoundedPanelView -> Result RoundedPanelView GPUError

render-default-rounded-panel-view-if-dirty

Render a retained rounded panel view using the package default style only when its cached layer is dirty.

Ptr -> RoundedPanelView -> Result RoundedPanelView GPUError

render-and-draw-rounded-panel-view

Render a retained rounded panel view if needed, then draw it to a surface.

Ptr -> Ptr -> RoundedPanelView -> Result RoundedPanelView GPUError

render-and-draw-default-rounded-panel-view

Render a retained rounded panel view with the package default style if needed, then draw it to a surface.

Ptr -> Ptr -> RoundedPanelView -> Result RoundedPanelView GPUError

render-and-draw-rounded-panel-scene

Render and draw each retained rounded panel view in a scene in order. Returns updated scene values with dirty flags cleared where rendering succeeded.

Ptr -> Ptr -> RoundedPanelScene -> Result RoundedPanelScene GPUError

render-and-draw-rounded-panel-split-scene

Render and draw a retained split scene using its two owned views and split layout.

Ptr -> Ptr -> RoundedPanelSplitScene -> Result RoundedPanelSplitScene GPUError

render-rounded-rect-shadow

Render a blurred rounded-rectangle shadow into destination using source and scratch as intermediates. source, scratch, and destination must all be distinct textures. source should support render-attachment usage, while scratch and destination should support sampled and storage-texture usage for the blur passes.

Ptr -> BoxBlurEffect -> Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

render-corner-rounded-rect-shadow

Render a blurred corner-rounded shadow into destination using source and scratch as intermediates. Corner order is top-left, top-right, bottom-right, bottom-left.

Ptr -> BoxBlurEffect -> Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

render-shadowed-rounded-panel

Render a shadowed rounded panel into destination using source and scratch as intermediates. The destination texture must support both blur-related usage and render-attachment usage so the panel fill can be composited over the blurred shadow.

Ptr -> BoxBlurEffect -> Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

render-styled-shadowed-rounded-panel

Render a shadowed rounded panel using a style record for the shadow.

Ptr -> BoxBlurEffect -> PanelShadowStyle -> Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

render-styled-rounded-panel

Render a rounded panel using a full style record for fill and shadow.

Ptr -> BoxBlurEffect -> RoundedPanelStyle -> Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

render-default-shadowed-rounded-panel

Render a rounded panel using the package's default shadow style.

Ptr -> BoxBlurEffect -> Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

render-default-rounded-panel

Render a rounded panel using the package's default panel style.

Ptr -> BoxBlurEffect -> Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

init

Initialize the GPU context.

Creates a WebGPU instance, requests an adapter and device. The backend parameter is reserved for future use (pass 0 for default).

Returns:

NonNegativeInt -> Result Ptr GPUError

destroy

Destroy the GPU context and release all resources.

Ptr -> Unit

adapter-name

Get the name of the GPU adapter.

Ptr -> String

create-surface-metal-layer

Create a WGPU surface from a macOS CAMetalLayer pointer.

Ptr -> Ptr -> Result Ptr GPUError

release-surface

Release a previously created WGPU surface.

Ptr -> Unit

surface-preferred-texture-fmt

Query the preferred texture format for a surface. Uses the first format returned by surface capabilities.

Ptr -> Ptr -> Result Int GPUError

configure-surface

Configure a surface for rendering with default UI-friendly options. Uses render-attachment usage, FIFO present mode, and automatic alpha mode. Width and height are validated at runtime and must both be > 0.

Ptr -> Ptr -> Int -> Int -> Int -> Result Unit GPUError

acquire-surface-texture-view

Acquire a texture view for the current surface frame.

Ptr -> Result Ptr GPUError

begin-surface-batch

Begin a batched surface render pass. Subsequent rect and texture draws reuse the same render pass until present-surface. If no frame is currently acquired, this acquires one and clears it to transparent black.

Ptr -> Ptr -> Result Unit GPUError

begin-texture-batch

Begin a batched render pass into a render-attachment texture. Subsequent texture fill draws reuse the same render pass until finish-texture-batch. This loads existing texture contents; call clear-texture first if a fresh transparent layer is needed.

Ptr -> Ptr -> Result Unit GPUError

finish-texture-batch

Finish a previously started batched render pass into a texture.

Ptr -> Result Unit GPUError

present-surface

Present the current surface frame.

Ptr -> Result Unit GPUError

clear-surface

Clear the current surface frame to a solid color and present it.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Result Unit GPUError

clear-texture

Clear a render-attachment texture to a solid color. This updates the GPU texture contents only; call Texture.download if CPU staging data is needed afterward.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Result Unit GPUError

set-surface-scissor-rect

Set a clip rectangle on the surface. Subsequent rect and texture draws respect this clip until cleared. Coordinates are in surface pixels.

Ptr -> Int -> Int -> Int -> Int -> Result Unit GPUError

clear-surface-scissor-rect

Clear any clip rectangle set on the surface. Subsequent draws render unclipped.

Ptr -> Unit

set-texture-scissor-rect

Set a clip rectangle on a render-attachment texture. Subsequent texture fill and texture-to-texture draws respect this clip until cleared. Coordinates are in texture pixels.

Ptr -> Int -> Int -> Int -> Int -> Result Unit GPUError

clear-texture-scissor-rect

Clear any clip rectangle set on a render-attachment texture.

Ptr -> Unit

fill-surface-rect

Fill a rectangle on the current surface frame. If no frame is currently acquired, this acquires one, clears it to transparent black, draws the rectangle, and presents it. If a frame is already acquired, it draws into that frame without presenting so additional rendering can follow.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-surface-rounded-rect

Fill a rounded rectangle on the current surface frame. Radius is in surface pixels. If no frame is currently acquired, this acquires one, clears it to transparent black, draws the rounded rectangle, and presents it. If a frame is already acquired, it draws into that frame without presenting so additional rendering can follow.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-surface-vertical-gradient-rounded-rect

Fill a rounded rectangle with a vertical gradient on the current surface frame. Radius is in surface pixels.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

stroke-surface-rounded-rect

Stroke a rounded rectangle on the current surface frame. Stroke width and radius are in surface pixels.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-surface-corner-rounded-rect

Fill a rounded rectangle with independent corner radii on the current surface frame. Corner order is top-left, top-right, bottom-right, bottom-left.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-surface-vertical-gradient-corner-rounded-rect

Fill a rounded rectangle with a vertical gradient and independent corner radii on the current surface frame. Corner order is top-left, top-right, bottom-right, bottom-left.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

stroke-surface-corner-rounded-rect

Stroke a rounded rectangle with independent corner radii on the current surface frame. Corner order is top-left, top-right, bottom-right, bottom-left.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-texture-rect

Fill a rectangle into a render-attachment texture. This updates the GPU texture contents only; call Texture.download if CPU staging data is needed afterward.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-texture-rounded-rect

Fill a rounded rectangle into a render-attachment texture.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-texture-vertical-gradient-rounded-rect

Fill a rounded rectangle with a vertical gradient into a render-attachment texture.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

stroke-texture-rounded-rect

Stroke a rounded rectangle into a render-attachment texture.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-texture-corner-rounded-rect

Fill a rounded rectangle with independent corner radii into a render-attachment texture. Corner order is top-left, top-right, bottom-right, bottom-left.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

fill-texture-vertical-gradient-corner-rounded-rect

Fill a rounded rectangle with a vertical gradient and independent corner radii into a render-attachment texture. Corner order is top-left, top-right, bottom-right, bottom-left.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

stroke-texture-corner-rounded-rect

Stroke a rounded rectangle with independent corner radii into a render-attachment texture. Corner order is top-left, top-right, bottom-right, bottom-left.

Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

draw-texture-texture

Draw a source texture into a destination rectangle on a render-attachment texture. The target texture may already have an active batch started with begin-texture-batch.

Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Result Unit GPUError

draw-texture-texture-region

Draw a source region of a source texture into a destination rectangle on a render-attachment texture. Source coordinates are in source texture pixels.

Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

draw-surface-texture

Draw a texture into a destination rectangle on the current surface frame. If no frame is currently acquired, this acquires one, clears it to transparent black, draws the texture, and presents it. If a frame is already acquired, it draws into that frame without presenting so additional rendering can follow.

Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Result Unit GPUError

draw-surface-texture-region

Draw a region of a texture into a destination rectangle on the current surface frame. Source coordinates are in texture pixels. If no frame is currently acquired, this acquires one, clears it to transparent black, draws the texture region, and presents it. If a frame is already acquired, it draws into that frame without presenting so additional rendering can follow.

Ptr -> Ptr -> Ptr -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Float -> Result Unit GPUError

create

Create a 2D GPU texture with a CPU staging buffer.

Parameters:

Returns:

Ptr -> PositiveInt -> PositiveInt -> Int -> Int -> Result Ptr GPUError

width

Get the width of a texture in pixels.

Ptr -> Int

height

Get the height of a texture in pixels.

Ptr -> Int

set-pixel

Set a pixel's RGBA values in the CPU staging buffer. Values are clamped to 0-255.

Ptr -> NonNegativeInt -> NonNegativeInt -> Byte -> Byte -> Byte -> Byte -> Unit

get-pixel-r

Get the red channel of a pixel from the CPU staging buffer.

Ptr -> NonNegativeInt -> NonNegativeInt -> Int

get-pixel-g

Get the green channel of a pixel from the CPU staging buffer.

Ptr -> NonNegativeInt -> NonNegativeInt -> Int

get-pixel-b

Get the blue channel of a pixel from the CPU staging buffer.

Ptr -> NonNegativeInt -> NonNegativeInt -> Int

get-pixel-a

Get the alpha channel of a pixel from the CPU staging buffer.

Ptr -> NonNegativeInt -> NonNegativeInt -> Int

upload

Upload staging buffer data to the GPU texture.

Ptr -> Ptr -> Result Unit GPUError

download

Download GPU texture data to the CPU staging buffer.

Ptr -> Ptr -> Result Unit GPUError

create-view

Create a texture view for use in bind groups.

Ptr -> Result Ptr GPUError

release

Release a texture and its staging buffer.

Ptr -> Unit

copy-from-bytes

Copy raw bytes from an image data pointer into the texture staging buffer. Handles channel conversion (1ch/3ch/4ch → RGBA8) internally.

Ptr -> Ptr -> PositiveInt -> PositiveInt -> PositiveInt -> Unit

copy-to-bytes

Copy texture staging buffer data to a raw byte pointer. Handles channel conversion (RGBA8 → 1ch/3ch/4ch) internally.

Ptr -> Ptr -> PositiveInt -> PositiveInt -> PositiveInt -> Unit

release-view

Release a texture view.

Ptr -> Unit

atlas-glyph

Construct a glyph record for a texture atlas.

Record shape: - src-x, src-y: source origin in texture pixels - src-width, src-height: source size in texture pixels - advance: logical advance in destination pixels at scale 1.0

Float -> Float -> Float -> Float -> Float -> {src-x: Float, src-y: Float, src-width: Float, src-height: Float, advance: Float}

draw-glyph

Draw a single atlas glyph to the current surface frame.

Ptr -> Ptr -> Ptr -> {src-x: Float, src-y: Float, src-width: Float, src-height: Float, advance: Float} -> Float -> Float -> Float -> Result Unit GPUError

measure-run-width

Measure the width of a glyph run at the given scale and letter spacing.

List {src-x: Float, src-y: Float, src-width: Float, src-height: Float, advance: Float} -> Float -> Float -> Float

draw-run

Draw a horizontal run of atlas glyphs to the current surface frame.

Ptr -> Ptr -> Ptr -> List {src-x: Float, src-y: Float, src-width: Float, src-height: Float, advance: Float} -> Float -> Float -> Float -> Float -> Result Unit GPUError

create

Create a GPU sampler for texture filtering.

Parameters:

Returns:

Ptr -> Int -> Int -> Int -> Result Ptr GPUError

release

Release a sampler and its resources.

Ptr -> Unit

create

Create a GPU buffer for float data.

Parameters:

Returns:

Ptr -> PositiveInt -> Int -> Int -> Result Ptr GPUError

set-float

Write a float value to a mapped buffer at the given index.

Ptr -> NonNegativeInt -> Float -> Unit

get-float

Read a float value from a mapped buffer at the given index.

Ptr -> NonNegativeInt -> Float

map-read

Map a buffer for CPU reading. Blocks until the buffer is mapped.

Parameters:

Returns:

Ptr -> Ptr -> Result Unit GPUError

unmap

Unmap a previously mapped buffer.

Ptr -> Unit

copy

Copy float data from one buffer to another on the GPU.

Ptr -> Ptr -> Ptr -> PositiveInt -> Unit

release

Release a buffer and its resources.

Ptr -> Unit

GPUError

GPU error type for typed error handling. Variants distinguish between different failure modes.

Variants

AdapterNotFound {message}
DeviceRequestFailed {message}
ShaderCompileError {message}
BufferError {message}
ComputeError {message}
TextureError {message}

buffer-usage-map-read

Buffer can be mapped for reading.

buffer-usage-map-write

Buffer can be mapped for writing.

buffer-usage-copy-src

Buffer can be used as a copy source.

buffer-usage-copy-dst

Buffer can be used as a copy destination.

buffer-usage-uniform

Buffer can be used as a uniform buffer.

buffer-usage-storage

Buffer can be used as a storage buffer.

texture-format-r8-unorm

R8Unorm texture format (1 byte per pixel, single channel).

texture-format-r32-float

R32Float texture format (4 bytes per pixel, single float channel).

texture-format-rgba8-unorm

RGBA8Unorm texture format (4 bytes per pixel, 8-bit RGBA).

texture-format-rgba8-unorm-srgb

RGBA8UnormSrgb texture format (4 bytes per pixel, sRGB RGBA).

texture-format-bgra8-unorm

BGRA8Unorm texture format (4 bytes per pixel, BGRA order).

texture-format-rgba32-float

RGBA32Float texture format (16 bytes per pixel, 32-bit float RGBA).

texture-usage-copy-src

Texture can be used as a copy source.

texture-usage-copy-dst

Texture can be used as a copy destination.

texture-usage-texture-binding

Texture can be bound as a sampled texture (for textureLoad/textureSample).

texture-usage-storage-binding

Texture can be bound as a storage texture (for textureStore).

texture-usage-render-attachment

Texture can be used as a render target attachment.

filter-nearest

Nearest-neighbor filtering.

filter-linear

Linear interpolation filtering.

address-clamp-to-edge

Clamp texture coordinates to [0, 1].

address-repeat

Repeat texture coordinates.

address-mirror-repeat

Mirror and repeat texture coordinates.