fluid_core 0.1.1

GPU-accelerated fluid simulation core library (wgpu, no winit dependency)
Documentation
# fluid_core


Real-time GPU fluid simulation in Rust, powered by `wgpu`.

`fluid_core` focuses on simulation and rendering infrastructure, while app/demo code is kept in separate crates.



## 中文简介


`fluid_core` 是一个面向 Rust 生态的实时 GPU 流体仿真项目。

- 核心库不强绑定窗口框架(不依赖 `winit`- 统一输入接口支持鼠标、触摸和程序化注入
- 物理与后处理参数支持运行时热修改
- 提供桌面 demo,便于展示与二次开发

## English Summary


`fluid_core` is an open-source Rust project for interactive GPU fluid simulation.

- Core crate is window-system-agnostic
- Unified input API for mouse, touch, and programmatic splats
- Runtime-tunable simulation and post-processing parameters
- Desktop demo for showcase and experimentation

## Upstream Credit and Origin


This project is a Rust/`wgpu` re-implementation and engineering adaptation inspired by:

- PavelDoGreat/WebGL-Fluid-Simulation  
  https://github.com/PavelDoGreat/WebGL-Fluid-Simulation

The original implementation is based on JavaScript + WebGL.  
This repository ports and restructures core ideas into a Rust architecture (library + demo split, typed API surface, and reusable engine integration).

If you reuse or redistribute this project, please keep upstream attribution and preserve all required license notices.

## What Is Different From the Original WebGL Version


- Language/stack: Rust + `wgpu` instead of JavaScript + WebGL
- Architecture: reusable SDK-like core crate + separate desktop demo crate
- Integration model: accepts any window type implementing `raw-window-handle`
- API design: explicit engine/config/input types (`FluidEngine`, `FluidConfig`, `InputManager`)
- Runtime control: parameter updates and input injection via public Rust API

## Repository Layout


- `crates/fluid_core`: simulation core library
- `demos/desktop_demo`: desktop showcase app (`winit` + `egui`)
- [`api.md`]api.md: complete API reference
- `CONTRIBUTING.md`: contribution workflow and coding conventions
- `LICENSE`: project license text

## API Documentation


- Full SDK API reference: [`api.md`]api.md
- Recommended entry points: `FluidEngine`, `FluidConfig`, `InputManager`, `RenderContext`
- For integration patterns (`egui`, runtime config updates, input injection), see the corresponding sections in [`api.md`]api.md

## Features


- GPU fluid pipeline based on `wgpu`
- Bloom and sunrays post-processing
- Public engine API (`FluidEngine`, `FluidConfig`, `InputManager`)
- Demo scenes:
  - Main control panel
  - Circle Demo
  - Letter N Demo
  - Spiral Demo

## Quick Start


### 1) Build and run desktop demo


Run in this workspace root (`fluid_core/`):

```bash
cargo run -p fluid_core_desktop_demo
```

### 2) Use as a local dependency


```toml
[dependencies]
fluid_core = { path = "crates/fluid_core" }
```

### 3) Minimal usage example


```rust
use fluid_core::{FluidConfig, FluidEngine};

// `window` can be any type implementing HasWindowHandle + HasDisplayHandle
let mut engine = FluidEngine::new(&window, width, height, &FluidConfig::default()).await;

loop {
    engine.update(dt);
    engine.render()?;
}
```

## Controls (desktop demo)


- `Mouse Drag`: inject fluid force and dye
- `Space`: random burst
- `P`: pause/resume simulation
- `B`: toggle bloom
- `S`: toggle sunrays
- `H`: toggle shading
- `Esc`: quit

## Documentation


- API reference: [`api.md`]api.md
- Contribution guide: `CONTRIBUTING.md`

## License


This repository is released under the MIT License. See `LICENSE`.

Upstream reference project (`PavelDoGreat/WebGL-Fluid-Simulation`) is also MIT-licensed.  
Please ensure attribution and license notice retention when redistributing derivative works.