Skip to content

Commit 6988663

Browse files
committed
Add CI (Linux/macOS/Windows x f32/f64), badges, CHANGELOG, CONTRIBUTING
1 parent 6842b99 commit 6988663

14 files changed

Lines changed: 234 additions & 14 deletions

File tree

.github/workflows/linux-f32.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
name: Linux f32
2+
on:
3+
push:
4+
branches: [main]
5+
pull_request:
6+
branches: [main]
7+
jobs:
8+
build:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- uses: actions/checkout@v5
12+
- run: cmake -B build -DQAWS_SCALAR_IS_FLOAT=ON -DQAWS_ENABLE_WARNINGS=ON -DQAWS_WARNINGS_AS_ERRORS=OFF
13+
- run: cmake --build build --config Release
14+
- run: ctest --test-dir build --build-config Release --output-on-failure

.github/workflows/linux-f64.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
name: Linux f64
2+
on:
3+
push:
4+
branches: [main]
5+
pull_request:
6+
branches: [main]
7+
jobs:
8+
build:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- uses: actions/checkout@v5
12+
- run: cmake -B build -DQAWS_SCALAR_IS_FLOAT=OFF -DQAWS_ENABLE_WARNINGS=ON -DQAWS_WARNINGS_AS_ERRORS=OFF
13+
- run: cmake --build build --config Release
14+
- run: ctest --test-dir build --build-config Release --output-on-failure

.github/workflows/macos-f32.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
name: macOS f32
2+
on:
3+
push:
4+
branches: [main]
5+
pull_request:
6+
branches: [main]
7+
jobs:
8+
build:
9+
runs-on: macos-latest
10+
steps:
11+
- uses: actions/checkout@v5
12+
- run: cmake -B build -DQAWS_SCALAR_IS_FLOAT=ON -DQAWS_ENABLE_WARNINGS=ON -DQAWS_WARNINGS_AS_ERRORS=OFF
13+
- run: cmake --build build --config Release
14+
- run: ctest --test-dir build --build-config Release --output-on-failure

.github/workflows/macos-f64.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
name: macOS f64
2+
on:
3+
push:
4+
branches: [main]
5+
pull_request:
6+
branches: [main]
7+
jobs:
8+
build:
9+
runs-on: macos-latest
10+
steps:
11+
- uses: actions/checkout@v5
12+
- run: cmake -B build -DQAWS_SCALAR_IS_FLOAT=OFF -DQAWS_ENABLE_WARNINGS=ON -DQAWS_WARNINGS_AS_ERRORS=OFF
13+
- run: cmake --build build --config Release
14+
- run: ctest --test-dir build --build-config Release --output-on-failure

.github/workflows/windows-f32.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
name: Windows f32
2+
on:
3+
push:
4+
branches: [main]
5+
pull_request:
6+
branches: [main]
7+
jobs:
8+
build:
9+
runs-on: windows-latest
10+
steps:
11+
- uses: actions/checkout@v5
12+
- run: cmake -B build -DQAWS_SCALAR_IS_FLOAT=ON -DQAWS_ENABLE_WARNINGS=ON -DQAWS_WARNINGS_AS_ERRORS=OFF
13+
- run: cmake --build build --config Release
14+
- run: ctest --test-dir build --build-config Release --output-on-failure

.github/workflows/windows-f64.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
name: Windows f64
2+
on:
3+
push:
4+
branches: [main]
5+
pull_request:
6+
branches: [main]
7+
jobs:
8+
build:
9+
runs-on: windows-latest
10+
steps:
11+
- uses: actions/checkout@v5
12+
- run: cmake -B build -DQAWS_SCALAR_IS_FLOAT=OFF -DQAWS_ENABLE_WARNINGS=ON -DQAWS_WARNINGS_AS_ERRORS=OFF
13+
- run: cmake --build build --config Release
14+
- run: ctest --test-dir build --build-config Release --output-on-failure

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,4 @@ buildsystem/sharpmake/*.exe
8080
buildsystem/sharpmake/*.dll
8181
buildsystem/sharpmake/*.json
8282
*.in
83+
!buildsystem/cmake/*.in

CHANGELOG.md

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
# Changelog
2+
3+
All notable changes to Qaws are documented here.
4+
5+
## [1.0.0] - 2026-03-12
6+
7+
First public release.
8+
9+
### Curve families (13)
10+
11+
- Bezier (linear through arbitrary degree, 2D/3D)
12+
- Hermite (cubic, 2D/3D)
13+
- Catmull-Rom (uniform, chordal, centripetal parameterization, open/closed, 2D/3D)
14+
- B-Spline (arbitrary degree, uniform/custom knots, open/closed, 2D/3D)
15+
- NURBS (arbitrary degree, weighted, open/closed, 2D/3D)
16+
- Trajectory (time-keyed cubic, optional velocity/acceleration, open/closed, 2D/3D)
17+
- Yuksel C2 (Bezier, Circular, Elliptical, Hybrid modes, open/closed, 2D/3D)
18+
- Rational Bezier (weighted De Casteljau, 2D/3D)
19+
- Arc (circular/elliptical, multi-segment, 2D/3D)
20+
- Polynomial (monomial form, Horner evaluation, 2D/3D)
21+
- Clothoid (Euler spiral, linear curvature, 2D)
22+
- Subdivision (Chaikin, Lane-Riesenfeld 3/4, open/closed, 2D/3D)
23+
- Composite (heterogeneous multi-segment, 2D/3D)
24+
25+
### Surface types (5)
26+
27+
- Bezier patch (tensor product)
28+
- B-Spline surface
29+
- NURBS surface
30+
- Swept surface (profile along path)
31+
- Ruled surface (linear blend of two curves)
32+
33+
### Evaluation
34+
35+
- Position, D1, D2, D3 derivatives
36+
- Per-span evaluation
37+
- Batch evaluation (SIMD-accelerated: AVX2, SSE2, NEON)
38+
- Surface evaluation with partial derivatives and normals
39+
40+
### Sampling
41+
42+
- Uniform parameter sampling
43+
- Adaptive (error-tolerance based)
44+
- Curvature-weighted
45+
- Feature-preserving
46+
- Streaming (callback-based)
47+
48+
### Traversal
49+
50+
- Parameter, arc-length, and timed modes
51+
- Motion profiles: constant speed, constant acceleration, trapezoidal, S-curve, custom
52+
- 10 easing functions (quad, cubic, sine -- in/out/in-out)
53+
- Wrap modes: clamp, loop, ping-pong
54+
- Multi-curve traversal
55+
56+
### Inspection
57+
58+
- Arc length, bounding box, closest point
59+
- Tangent, normal, curvature, torsion, speed
60+
- Frenet frame (3D)
61+
- Inflection points, extrema
62+
- Winding number (2D)
63+
- Curvature comb (2D/3D)
64+
- Curve-curve intersection, self-intersection
65+
66+
### Operations
67+
68+
- Split at parameter
69+
- Join two curves
70+
- Offset / parallel curve (2D, with self-intersection cleanup)
71+
- Reverse
72+
- Arc-length reparameterization
73+
74+
### Conversion
75+
76+
- Hermite -> Bezier, Catmull-Rom -> Bezier
77+
- Bezier -> B-Spline, B-Spline -> NURBS
78+
- Degree elevation, degree reduction (Bezier)
79+
80+
### Import / export
81+
82+
- SVG path data export (exact for Bezier/Hermite/Catmull-Rom, approximate for others)
83+
- Polyline export (uniform / curvature-weighted, 2D/3D)
84+
- Polyline import as Catmull-Rom or Trajectory
85+
- B-spline fitting (least-squares)
86+
87+
### Multi-backend
88+
89+
- C (full runtime, SIMD batch eval, float/double)
90+
- HLSL (22 core eval functions, SM 5.0+)
91+
- GLSL (22 core eval functions, Vulkan/OpenGL)
92+
- Halide (22 core eval functions, symbolic IR)
93+
- Automatic backend detection via compiler macros
94+
- Prepare functions for CPU-to-GPU coefficient upload
95+
96+
### Infrastructure
97+
98+
- Zero dependencies (C11 standard library only)
99+
- Immutable, thread-safe curves and surfaces
100+
- Custom allocator support (`_ex` variants)
101+
- Stack-allocated inline curves (no malloc, degree <= 7)
102+
- CMake install rules, pkg-config, CMake config export
103+
- Sharpmake build system support
104+
- MIT license

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Qaws
22

3+
| Platform | f32 | f64 |
4+
|---|---|---|
5+
| **Linux** | [![Linux f32](https://github.com/soufianekhiat/qaws/actions/workflows/linux-f32.yml/badge.svg?branch=main)](https://github.com/soufianekhiat/qaws/actions/workflows/linux-f32.yml) | [![Linux f64](https://github.com/soufianekhiat/qaws/actions/workflows/linux-f64.yml/badge.svg?branch=main)](https://github.com/soufianekhiat/qaws/actions/workflows/linux-f64.yml) |
6+
| **macOS** | [![macOS f32](https://github.com/soufianekhiat/qaws/actions/workflows/macos-f32.yml/badge.svg?branch=main)](https://github.com/soufianekhiat/qaws/actions/workflows/macos-f32.yml) | [![macOS f64](https://github.com/soufianekhiat/qaws/actions/workflows/macos-f64.yml/badge.svg?branch=main)](https://github.com/soufianekhiat/qaws/actions/workflows/macos-f64.yml) |
7+
| **Windows** | [![Windows f32](https://github.com/soufianekhiat/qaws/actions/workflows/windows-f32.yml/badge.svg?branch=main)](https://github.com/soufianekhiat/qaws/actions/workflows/windows-f32.yml) | [![Windows f64](https://github.com/soufianekhiat/qaws/actions/workflows/windows-f64.yml/badge.svg?branch=main)](https://github.com/soufianekhiat/qaws/actions/workflows/windows-f64.yml) |
8+
39
**Qaws** (قوس) — Arabic for *arc*, *bow*, *curve*. A dependency-free C11
410
library for creating, evaluating, sampling, traversing, and inspecting
511
parametric curves and surfaces in 2D and 3D.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@PACKAGE_INIT@
2+
3+
include("${CMAKE_CURRENT_LIST_DIR}/QawsTargets.cmake")

0 commit comments

Comments
 (0)