Nanim is an easy-to-use framework to create smooth GPU-accelerated animations that can be previewed live inside a glfw window and, when ready, rendered to videos at an arbitrary resolution and framerate.
The evaluation currently executes every single tween every single frame when in reality we only need to execute the "current" tweens. oldTweens and futureTweens only need to be evaluated the very first time and/or whenever we seek to a time that results in a different set of "currentTweens".
[x] rendering.nim's way of handling FFMpeg Instances
Due to some issues I had with the osproc module, I couldn't keep one single instance of FFMpeg but rather have to instantiate one, use it for a short amount of time and then kill it. This createds a bunch of "parts" files which have to be stitched together by a final FFMpeg command. This whole process could be avoided if we only had one single process. This most likely has to do with osproc's way of handling stdin has a hidden buffer of some sort that gets filled by frame-data.
[ ] core.nim's drawPointsWithTension and drawPointsWithRoundedCornerRadius
Sooner or later both of these will be deprecated and replaced with one better "drawListOfBezierPointsAndHandles" or something like that, but currently these two procs recalculate the new points every single frame for every point in every entity. This could probably be cached.
Areas with Known Big Performance Impact
[ ] needs fixing
[x] fixed
[ ]
tween.nim
's evaluate(tweenTrack, time)[x]
rendering.nim
's way of handling FFMpeg Instances[ ]
core.nim
's drawPointsWithTension and drawPointsWithRoundedCornerRadius