There are couple of things were wrong about render and viewport draw:
- Smoke color was stored in sRGB space, but render engines were treating it as linear one, which was causing washed out colors comparing to OpenGL viewport.
- Cycles and OpenGL viewport were straight alpha for the smoke color, but it was provided as premultiplied one.
Interestingly, BI was doing un-premultiplication so it was kind of known of how alpha is stored in volumes.
This was causing darker outlines around volume in Cycles on OpenGL.
This commit switches Blender to store colors in scene linear space and makes it so smoke is always providing colors with straight alpha so no un-premultiplication required.
Color space changes will only affect new smoke caches, existing ones should be rendering with same color as they used to. Alpha changes will affect both new and old smoke caches.