На win32 вы можете использовать SetDeviceGammaRamp для регулировки общей яркости / гаммы. Тем не менее, это влияет на весь экран, поэтому это не очень хорошая идея, если ваше приложение не полноэкранное.
Портативная альтернатива - рисовать всю сцену ярче или диммером (что создает трудности) или шлепать полноэкранный альфа-смешанный квад по всей сцене, чтобы осветлить или затемнить ее по желанию. Ни один из этих подходов не может повлиять на гамма-кривую, только на общую яркость; чтобы настроить гамму, вам нужно захватить всю сцену в текстуру, а затем вернуть ее обратно на экран с помощью пиксельного шейдера, который пропускает каждый тексель с помощью гамма-функции.
Хорошо, прочитав обновленный вопрос, вам нужен квадроцикл со смешиванием, настроенным на затемнение или осветление всего, что находится под ним. Например.
if( brightness > 1 )
{
glBlendFunc( GL_DEST_COLOR, GL_ONE );
glColor3f( brightness-1, brightness-1, brightness-1 );
}
else
{
glBlendFunc( GL_ZERO, GL_SRC_COLOR );
glColor3f( brightness, brightness, brightness );
}
glEnable( GL_BLEND );
draw_quad();