- VAO, https://paroj.github.io/gltut/Basics/Tut01%20Following%20the%20Data.html
- Baked light map, https://gazebosim.org/api/rendering/5.0/lightmap.html
- GLTF spec, https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html
- GLTF SO question, https://stackoverflow.com/questions/55989429/understanding-the-skinning-part-of-a-gltf2-0-file-for-opengl-engine
- GLTF anim article, https://lisyarus.github.io/blog/posts/gltf-animation.html
- GLTF anim example, https://github.com/KhronosGroup/glTF-Tutorials/blob/main/gltfTutorial/gltfTutorial_019_SimpleSkin.md
- GLTF reference guide, https://www.khronos.org/files/gltf20-reference-guide.pdf
- GLTF code, https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/d32ca25dc273c0b0982e29efcea01b45d0c85105/src/skin.js#L32-L36
- Animation blending/skin article, https://animationprogramming.com
- Use rust lib with Panama, https://foojay.io/today/java-panama-polyglot-rust-part-4/
- JOLT
- SuperCollider
- Live coding, https://theseanco.github.io/howto_co34pt_liveCode/
- Supercollider PDF, https://cs.wellesley.edu/~cs203/lecture_materials/synthdefs/synthdefs.pdf
- Patterns tutorial, https://doc.sccode.org/Tutorials/A-Practical-Guide/PG_01_Introduction.html
- Creating plugin, https://github.com/notam02/supercollider-plugin-tutorial/blob/main/tutorial/how-to-make-a-supercollider-plugin-cpp.md
- Extra synths, https://github.com/SCLOrkHub/SCLOrkSynths
- Eurorack plugin, https://github.com/v7b1/mi-UGens
- Janet for Mortals, https://janet.guide/
- How to make plugins using dlopen, https://jameshfisher.com/2017/08/24/dlopen/
- SC server plugins PDF, file:///Users/pfeodrippe/Downloads/how-to-make-a-supercollider-plugin-cpp.pdf
- SC plugins forum, https://scsynth.org/c/development/server-plugins/29
- JNI cookbook, https://github.com/mkowsiak/jnicookbook
- Flucoma, https://www.flucoma.org/download/
- SC server plugin api, https://doc.sccode.org/Reference/ServerPluginAPI.html
- https://docs.oracle.com/en/java/javase/22/core/foreign-function-and-memory-api.html
- AsmJit, https://asmjit.com/
- JVMTI (JVM Tool Interface), https://docs.oracle.com/en/java/javase/22/docs/specs/jvmti.html
- Memory mapped file (mmap) lib, https://github.com/OpenHFT/OpenHFT
- Scoring Sound: Creative Music Coding with SuperCollider book, https://thormagnusson.gitbooks.io/scoring/content/index.html
- Opinionate advice for beginners, https://scsynth.org/t/opinionated-advice-for-supercollider-beginners/7333
- DSPs, https://www.musicdsp.org/en/latest/index.html
- SC example plugin, https://github.com/supercollider/example-plugins/blob/main/03-AnalogEcho/AnalogEcho.cpp
- C guide, https://beej.us/guide/bgc/html/split/
- Beej's guides, https://beej.us/guide/
- clang manual (guide), https://clang.llvm.org/docs/UsersManual.html
- Arena allocation (by Null Program), https://nullprogram.com/blog/2023/12/17/
- Delay effect tutorial, https://wiki.analog.com/resources/tools-software/sharc-audio-module/baremetal/delay-effect-tutorial
-
fix memory leak
-
solve lexical scope for with-each
-
fix already closed issue
-
solve lexical scope for with-system
-
call sclang
- so we can use pseudo ugens easily and create synthdefs from it
- it's meant to be used only in dev time
- compile synthdef
- transpile from clj into SC
- save
- plot
- read byte stream
- help (.help)
-
caching for sclang synthdefs so we can use it transparently
-
make
sclang-path
more flexible -
general cpp plugin that allow us to dynamically change a ugen
- [-] maybe using jank?
- no as it's changing its internals
- can we start a REPL from a JVM started from C++?
- https://stackoverflow.com/questions/992836/how-to-access-the-java-method-in-a-c-application
- https://stackoverflow.com/questions/819536/how-to-call-java-functions-from-c
- https://stackoverflow.com/questions/7715804/how-to-use-find-jni-on-cmake/7716814#7716814
- call a static java method
- call clj
- set classpath
- call function
- start REPL
- use memory segment for jvm/native communication
-
next
modifies one byte and we see it in the jvm- create memory segment in the jvm
- refer it from cpp
- modify data
- modify in
next
- write to large array
- structured data
-
- c code on demand
- viz data
- update data viz in real time
- fft viz
- [-] create project in vybesc
- shared memory
- https://www.infoq.com/presentations/java-shared-memory-files/
- jvm
- c++
- share raw data
- fix /cmd
- create unitcmd or cmd
- compile c code on demand
- shared memory
- read constructor value for make "different" plugins
- create arena for shared
- set shared memory
- fix plugin crash
- initial transpiler
- compile c code
- dopen from the plugin multiple times
- continue transpiler dev
- loops
- receive unit struct
- source mapping
- improve error handling
- state
- https://github.com/supercollider/example-plugins/blob/main/03-AnalogEcho/AnalogEcho.cpp
- ctor
- create struct inheriting from Unit
- create struct from clj
- create another component merging with new fields
- prepend them into the C code
- set unit parameters
- store state globally
- store state for one instance
- move things to another ns
- one ns for the c helpers
- another ns for the client code
- ctor code
- attrs
- NEXTPOWEROFTWO
- RTAlloc
- ctor function
- shared struct to pass RTAlloc and RTFree
- use namespace in function names
- setcalc
- use RTAlloc
- try with malloc
- use RTAlloc for the returned
echo
data - function descriptor
- allocate
- parse to C
- complete ctor
- per instance unit
- attrs
- create struct inheriting from Unit
- plugin loading
- dtor
- next
- put everything together
- shared memory
- call C function from clojure
- dyn lib
- simple test
- CI
- osx
- linux
- windows
- docstring
- dsp test
- plugin
- component as an argument
- ctor
- unit pointer
- upcall function for allocator
- fn-desc to upcall
- interface name and cache
- VybeCFn in panama
- can pass a raw clj function into VybeAllocator
- use in test
- dsp
- [-] safe mode where pointer derefs are checked
- not for now, we are having issues with sanitizers
- https://clang.llvm.org/docs/index.html
- [-] enable address sanitizer, https://clang.llvm.org/docs/AddressSanitizer.html
- [-] https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html#ubsan-checks
- [-] parse normal clojure functions
- [-] simple
+
- [-] native functions
- [-] simple
- load generated lib dynamically so we can call it in clojure
- call
defn*
as normal function
- call
- [-] janet
- https://github.com/janet-lang/janet
- call janet from plugin
- eval janet code
- compile c code
- [-] hot reload only at constructor
- https://jameshfisher.com/2017/08/24/dlopen/
- check that it works
- [-] use for setting freq
- [-] hot reload for every shared lib modification
- call flecs from a native VybeCFn
- make world
- set pointer to jextract function globally
- don't expand jextract macros
- create global struct that stores function pointers
- globals
- init fn
- set global struct call
- call ctor function when loading
vc/defn*
- fix bug
- [-] refer to the dyn lib
- [-] call it from a standalone (or SC plugin)
- indirect macro usage
- support fnc
- create clj function upcall
- use it in C
- println
- set pointer to jextract function globally
- make world
- test raylib
- debug tools
- tap>
- tap value back to the jvm
- add line as metadata?
- tap compiler/analyzer errors
- debug sizeof padding
- portal
- tap>
- [-] maybe using jank?
-
use const by default
- const
-
:mut
- fn args
- run tests
-
fix dangling keywords
-
VybeC
- use dynamic fns by default, even for generated C code (so compilation is
faster and we can have a tool for hot reloading)
- fix var name
- fix types
- fix npe
- hot reload
- watch vars
- remove old watchers
- cache the watchers somewhere
- remove
- test
- standalone mode (for shared libs) whree you don't use dynamic C fns
- use dynamic fns by default, even for generated C code (so compilation is
faster and we can have a tool for hot reloading)
-
anim
- always flag from blender
-
debug
- systems/queries/observers
- query where terms are being used
- function which returns components/tags used in a given term
- make it work for pairs
- [-] create a debug observer that watches new/updated system so we can update some cache
- fix anim
- ecs_query_get
- query where terms are being used
- systems/queries/observers
-
physics
- trigger event when touching
-
passthrough render
- shader
- portion of the window
- only when cube clicked
- LPF when enabled
- 2 worlds
- different objects
- disable/enable object
- render to another RT
- shader to mix the RTs
- different objects
- transition from a blob
- square
- circle
- animate blob
- shader
-
multiple worlds, render twice?
- 2-player where you pass one object to the other?
- 3d?
- mechanic
- one in english, another in french?
-
ambisonics
- 2 sources
- system
- directional
-
docs
- let's use mkdocs for simplicity
- [-] bookdown (?)
- local test render
- publish test
- framework
- start with minimal example
- by concept?
- panama
- component
-
vp/defcomp
-
vp/make-component
- primitives
- pointers
- structs
- padding
- datafy
- aliases
-
- pmap
- memory segments
- datafy
-
vp/as
- pseq
-
vp/arr
- set
- get
-
- fcn
- usage in components
- arena
- jextract
- wrapping libs
- component
- flecs
- world
- entities
- naming
-
vp/ent
-
vp/eid
- components
- tags
- pairs
- merge
- mutability
- hierarchy
- parent
- children
- queries
- DSL
- systems
- observers
- sending events
- listening events
- enabling components/entities
- sample
- blender
- hierarchy
- scenes
- physics
- animation
- raylib
- jolt
- network
- audio
- overtone
- game ns
- VybeC
- introduction
- flags
- C semantics
- const by default
-
:mut
-
- videos?
-
abstraction for dsps?
-
don't store test resources in the jar
-
incremental compilation
- each
vc/defn*
is compiled independently (already done today) and one refers to the other using dyn libs (when in :debug or some other mode) - in the background, we can compile the full version so it's used next time!
- each
-
write docs like https://beej.us/guide/bgc/html/split/ ?
-
create clang plugin to improve analysis?
-
clerk viewer for overtone synths
- how to get info about existing synthdefs?
- parse schelp for additional operators
- https://depts.washington.edu/dxscdoc/Help/Guides/WritingHelp.html
- parse metadata
- parse function
- arguments
- description
- parse schelp for additional operators
- show in clerk
- create synthdef out of it
- show nodes
- we have
synthdef-decompile
in overtone, can use it as the base - binary op, how to show the used op?
- loaded synthdefs
- we have
- show args
- play example
- show the ugens in multiple steps so the user can play the step they need
- you can hear, viz plots and call other ops on them (e.g. FFT)
- choose input (sawtooth, sine, any)
- how to get info about existing synthdefs?
-
3d sound application
- charts in TVs
- press button
- GUI sound
-
VybeC
- better way to jump to definition
- allocator setting
- comptime
- exe mode
- check that we don't have unitialized resources in the init function if in this mode
- eval
- form to quickly evaluate stuff
- REPL plugin like portal does for cljs?
-
use portal
- memory segment
- component
- pmap
- synth
- flecs world
- flecs entity
- flecs system
-
tap from C into portal
-
make it easy to DSP in the frequency domain
-
create filters in realtime from clerk
-
wasm
-
debug
- animations
- trigger events
- run once
- disable/enable
- blender
- scenes
- quantity of objects
- objects
- ability to modify blender from clj?
- tap> on reload
- animations
-
deploy to clojars
- vybe
-
compile libs to targets
- windows
- linux
- osx
- universal?
-
debug arena by tracing calls (for memory leak)
-
ability to apply locks when creating an VybeFlecsSetEntity
-
supercollider/native/C
- reimplement delay filters (e.g. ShiftPitch ugen)
- put the plugin at the end of the bus
- map one index to one lib and receive an id to switch between the function pointers
-
defdsp
could watch the used vars so it can compile itself automatically (only:the-var
) - a
defn*
coukd test itself and check that it has the same results as the clojure one? - ability to load vars dynamically (using dlopen) so it speeds up compilation (and enables hot reloading (using some trickery))?
-
blogpost about vybesc
- what's a SC ugen?
- graph
- real time processing with dyn lib
- control ugen parameters from clerk