Skip to content

Latest commit

 

History

History
203 lines (147 loc) · 5.26 KB

README.org

File metadata and controls

203 lines (147 loc) · 5.26 KB

c.thi.ng

Overview

WIP

Data structures

Memory management

Math

Geometry

TBD

Requirements

Dependencies

The library itself has no 3rd party dependencies. Some of the examples however use these additional libs:

Build & test

Get further help for autogenerated Makefile:

# generate Makefiles
premake5 gmake

make help
# Usage: make [config=name] [target]
# 
# CONFIGURATIONS:
#   debug_sse
#   debug_no_sse
#   release_sse
#   release_no_sse
# 
# TARGETS:
#    all (default)
#    clean
#    test
#    lib
#    ex-poisson
#    ex-dla
# build & run tests manually
make config=debug_sse test && bin/debug/test
# or
make config=release_sse test && bin/release/test

# ...or use auto test w/ file watcher
# tests re-run automatically if files in /src or /test are changed
./autotest

Build static library

make config=debug_sse lib
# or
make config=release_sse lib

Build source x-ref

brew install cscope

./browse

Disassemble & list symbols

# display disassembly (OSX)
otool -jtV bin/release/libcthing.a | less

# display global symbols defined in lib
nm -g -j bin/release/libcthing.a | grep --color=never _ct_

Examples

Poisson disc sampling image conversion

Source

./assets/iris-poisson.png

# build library & example app
make config=release_sse ex-poisson

# show usage
bin/release/ex-poisson
# Missing input file
# Usage:  ex-poisson [options] image [ > out.svg ]
#   -b HEX    bg color (default: ffffff)
#   -f HEX    fg color (default: 0000ff)
#   -g FLOAT  gamma (default: 3.00)
#   -i        invert (also swaps fg/bg) (default: no)
#   -m FLOAT  min distance (default: 2.00)
#   -x FLOAT  max distance (default: 10.00)
#   -r FLOAT  dot radius (default: 1.00)
#   -q INT    quality (default: 100)

# concrete example (for image size roughly 700x1000px)
bin/release/ex-poisson -g 1.25 -q 500 -m 1.5 -x 16 assets/iris.jpg > assets/iris.svg

Diffusion-Limited Aggregation

Source

./assets/dla.png

# build library & example app
make config=release_sse ex-dla && bin/release/ex-dla > assets/dla.svg

Verlet physics

Source

./assets/verlet.png

# build library & example app
make config=release_sse ex-verlet && bin/release/ex-verlet

# ouputs are stored as SVG sequence in /assets
# use script below to convert to mp4 (requires rsvg & ffmpeg) -> out.mp4
./makevideo verlet

Compile with emscripten

# help / usage
./compile -h

# compile with tests, closure pass & remove duplicate fns
./compile -tdc

python3 -m http.server

# in browser dev console - http://localhost:8000/
# geom(); geom._main()

Build customization

The following defines can be used to customize behavior:

CT_FEATURE_LOGenable logging (if NDEBUG is defined, the debug log level is disabled)
CT_FEATURE_ANSIuse ANSI colors in log messages
CT_FEATURE_CHECKSenable runtime assertions (via CT_CHECK macro)
CT_FEATURE_CHECK_MEMenable runtime memory checks (via CT_CHECK_MEM macro)
CT_FEATURE_SSEenable SSE version

Contributors

NameRoleWebsite
Karsten Schmidtinitiator & principal developerthi.ng

License

This project is open source and licensed under the Apache Software License 2.0.