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:

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: complete API reference
  • CONTRIBUTING.md: contribution workflow and coding conventions
  • LICENSE: project license text

API Documentation

  • Full SDK API reference: 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

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/):

cargo run -p fluid_core_desktop_demo

2) Use as a local dependency

[dependencies]

fluid_core = { path = "crates/fluid_core" }

3) Minimal usage example

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
  • 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.