While working in Unreal Engine, I started to rely on the Curve Asset a lot more than I initially thought I would. In blueprints, you can use it to power any sort of interpolation, manually, or with the built in Timeline node. In materials, you can do the same but have it baked into a texture for quick lookup. The more I use it, the more I want this type of behavior in my own code base!
Over winter break 2025 I was compiling Unreal Engine from source which took way too long and was filled with random errors, so I had these 3-5 hour chunks where I was waiting for the engine to recompile and I decided to work on building a prototype of this for my self. I set some simple limitations on what it needed to do and what I wanted out of it and got to work on a prototype. The basic limitations I followed were, opengl for drawing the basic shapes, keep the curve in normalized space always(i can always remap it when using it), hard limits on the size of the curve containers (fixed memory footprint per unbaked curve asset), 3 point types (linear, constant, cubic bezier), saving to an uncompressed .curve type, and baked versions in the form of float lookup tables at specific resolutions as well as texture for use on the GPU.
cococurve is still a work in progress for now and is on hold likely until I graduate, or maybe I'll get a few hours in over spring break. At this point, I've got a prototype GUI app that draws the curve table with opengl and uses DearImGui for the navigation bar and toolbar. I spent a fair amount of time making the prototype focused on the user experience of interacting and placing keyframes because I know I will likely end up using this application for a long time. There is still work to be done for multi key interaction, some sort of undo tree, and cut/copy/paste actions. The last time I worked on it, I was preparing to isolate some of the prototype implementation behind an interface of some sort so that I can start preparing it for usage in other codebases. My plan for the current final version is for there to be a single cococurve.dll and .lib that can linked against for usage and provide any of the functions needed to interact with this. Ideally, the curve editor application, and the project I want to use curves within both just link with the cococurve library. I will likely make a stripped down version it that removes any editing features so that there is an extremely lightweight (maybe header only) way to open and read the baked or unbaked curves.