Various online sources talk in sufficient detail about gamma correction. By following them, I achieved a rendering pipeline that looks somewhat like this:

// Both are set to 2.2
uniform float gammaIn;
uniform float gammaOut;

void main()
{
vec3 color = pow(texture(material.albedo, texCoord).rgb, vec3(gammaIn));
// Do lighting and then HDR tone mapping here.
//   color = ...
FragColor = pow(color, vec3(1.0 / gammaOut));
}


That is the easy part.

Now, many games implement the gamma correction adjustment slider that is meant to accommodate for display differences in various monitors that players may have. This presents some questions that I couldn't find any definitive answer to:

1. Which value should the adjustment slider affect? I reckon it will be gammaOut because gammaIn deals with decoding of the sRGB picture and assuming that all textures are sRGB, this should always be the const 2.2. With this approach a lower gammaOut means darker picture.

2. What's the reasonable value range for the slider? Should it start at 1.0 or somewhere higher? Where should it end?

3. If I were to display the "barely visible / invisible" comparison combo picture to help the user with doing the adjustment correctly, what should be the color values for the "should be barely visible" dark picture and its background and ditto for the "should be invisible" bright picture and its background?