I think I understand what you’re seeing. And there may be a little bit of confusion regarding the parameter naming.
The “light” class has these two member function:
void enable_shadow_map( bool enableShadowMap )
void set_shadow_map_width( int width )
-Disabling the shadow map with “enable_shadow_map” does not turn off attenuation. It only affects shadows from occlusion meshes. There will always be light attenuation though the particles.
-The “set_shadow_map_width” is used for BOTH the attenuation maps, and the geometry shadow maps. This parameter defaults to 512. In order to get the same look from a light, you will need to set this parameter consistently regardless of whether “enable_shadow_map” is on. The naming is confusing, I know. I should rename it to “Light Resolution” or something.
Do the images rendered in “ShadowCompare.jpg” have the same light::set_shadow_map_width parameter?