render/color: Invert ownership model of color_transform types.
Color transform can have multiple types and these different types want to store different metadata. We previously stored this metadata directly on wlr_color_transform even for transforms that don't use it.
Instead, let's take the prior art from wlr_scene where each scene node
is built on a base node. Notice how wlr_color_transform_lut3d now has
a struct wlr_color_transform base
. This is advantageous in multiple
ways:
- We don't allocate memory for metadata that will never be used.
- This is more type safe: Compositors can pass around a struct wlr_color_transform_lut3d if they know they only want to use a 3d_lut.
- This is more scalable. As we add more transform types, we don't have to keep growing a monolithic struct.