2010-05-17 4 views
0

Я накладываю приложение OpenGL (C++), это приложение openGL использует SetDeviceGammaRamp для установки яркости рабочего стола на очень высокий уровень (не знаю почему). Это приложение полноэкранное и выглядит хорошо, но мой оверлей очень яркий. Вместо оранжевого цвета с нормальной яркостью я становлюсь желтым из-за высокой гаммы.GetDeviceGammaRamp для настройки цветов

Что я хочу сделать: Получите гамму, установленную в данный момент (используя GetDeviceGammaRamp), а затем используйте ее для настройки цветов, которые я установил.

Нравится; glColor4f (r, g, b, a) становится glColor4f (r/gamma, g/gamma, b/gamma, a);

Поэтому, если яркость рабочего стола очень высока, значения r g и b будут ниже (темнее) и будут выглядеть так, как должны.

Как это сделать? GetDeviceGammaRamp заполняет таблицу, как я могу ее использовать для изменения моих цветов?

Благодаря

ответ

0

Вы можете быть лучше всего использовать расширение ARB_framebuffer_sRGB, если вы можете:

#define GL_FRAMEBUFFER_SRGB 0x8DB9 //might already be defined 

bool supportSRGB = (0 != strstr((char*)glGetString(GL_EXTENSIONS), "GL_ARB_texture_non_power_of_two")); 
if(supportsSRGB) 
{ 
    glEnable(GL_FRAMEBUFFER_SRGB); 
}