BGE: World color management fix
This patch will fix the color management for the mist and global ambient color. It will remove the old "Color Management" switch in the BGE "Render > Shading" panel and will use the "Display Device" setting in the "Scene > Color Management" panel instead. Reviewers: moguri, brecht Reviewed By: brecht Differential Revision: https://developer.blender.org/D154
This commit is contained in:
@@ -397,7 +397,6 @@ class RENDER_PT_game_shading(RenderButtonsPanel, Panel):
|
||||
col.prop(gs, "use_glsl_lights", text="Lights")
|
||||
col.prop(gs, "use_glsl_shaders", text="Shaders")
|
||||
col.prop(gs, "use_glsl_shadows", text="Shadows")
|
||||
col.prop(gs, "use_glsl_color_management", text="Color Management")
|
||||
|
||||
col = split.column()
|
||||
col.prop(gs, "use_glsl_ramps", text="Ramps")
|
||||
|
||||
@@ -452,7 +452,7 @@ bool GPU_material_do_color_management(GPUMaterial *mat)
|
||||
if (!BKE_scene_check_color_management_enabled(mat->scene))
|
||||
return false;
|
||||
|
||||
return !((mat->scene->gm.flag & GAME_GLSL_NO_COLOR_MANAGEMENT));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool GPU_material_use_new_shading_nodes(GPUMaterial *mat)
|
||||
|
||||
@@ -447,6 +447,7 @@ static void rna_ColorManagedDisplaySettings_display_device_update(Main *UNUSED(b
|
||||
|
||||
IMB_colormanagement_validate_settings(&scene->display_settings, &scene->view_settings);
|
||||
|
||||
DAG_id_tag_update(id, 0);
|
||||
WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1651,7 +1651,7 @@ static KX_GameObject *gameobject_from_blenderobject(
|
||||
|
||||
case OB_FONT:
|
||||
{
|
||||
bool do_color_management = !(blenderscene->gm.flag & GAME_GLSL_NO_COLOR_MANAGEMENT);
|
||||
bool do_color_management = BKE_scene_check_color_management_enabled(blenderscene);
|
||||
/* font objects have no bounding box */
|
||||
gameobj = new KX_FontObject(kxscene,KX_Scene::m_callbacks, rendertools, ob, do_color_management);
|
||||
|
||||
|
||||
@@ -54,21 +54,16 @@
|
||||
BlenderWorldInfo::BlenderWorldInfo(Scene *blenderscene, World *blenderworld)
|
||||
{
|
||||
if (blenderworld) {
|
||||
m_do_color_management = BKE_scene_check_color_management_enabled(blenderscene);
|
||||
m_hasworld = true;
|
||||
m_hasmist = ((blenderworld->mode) & WO_MIST ? true : false);
|
||||
m_misttype = blenderworld->mistype;
|
||||
m_miststart = blenderworld->miststa;
|
||||
m_mistdistance = blenderworld->mistdist;
|
||||
m_mistintensity = blenderworld->misi;
|
||||
copy_v3_v3(m_mistcolor, &blenderworld->horr);
|
||||
copy_v3_v3(m_backgroundcolor, &blenderworld->horr);
|
||||
copy_v3_v3(m_ambientcolor, &blenderworld->ambr);
|
||||
|
||||
if (BKE_scene_check_color_management_enabled(blenderscene)) {
|
||||
linearrgb_to_srgb_v3_v3(m_mistcolor, m_mistcolor);
|
||||
linearrgb_to_srgb_v3_v3(m_backgroundcolor, m_backgroundcolor);
|
||||
linearrgb_to_srgb_v3_v3(m_ambientcolor, m_ambientcolor);
|
||||
}
|
||||
setMistColor(blenderworld->horr, blenderworld->horg, blenderworld->horb);
|
||||
setBackColor(blenderworld->horr, blenderworld->horg, blenderworld->horb);
|
||||
setAmbientColor(blenderworld->ambr, blenderworld->ambg, blenderworld->ambb);
|
||||
}
|
||||
else {
|
||||
m_hasworld = false;
|
||||
@@ -159,6 +154,13 @@ void BlenderWorldInfo::setBackColor(float r, float g, float b)
|
||||
m_backgroundcolor[0] = r;
|
||||
m_backgroundcolor[1] = g;
|
||||
m_backgroundcolor[2] = b;
|
||||
|
||||
if (m_do_color_management) {
|
||||
linearrgb_to_srgb_v3_v3(m_con_backgroundcolor, m_backgroundcolor);
|
||||
}
|
||||
else {
|
||||
copy_v3_v3(m_con_backgroundcolor, m_backgroundcolor);
|
||||
}
|
||||
}
|
||||
|
||||
void BlenderWorldInfo::setMistType(short type)
|
||||
@@ -190,6 +192,13 @@ void BlenderWorldInfo::setMistColor(float r, float g, float b)
|
||||
m_mistcolor[0] = r;
|
||||
m_mistcolor[1] = g;
|
||||
m_mistcolor[2] = b;
|
||||
|
||||
if (m_do_color_management) {
|
||||
linearrgb_to_srgb_v3_v3(m_con_mistcolor, m_mistcolor);
|
||||
}
|
||||
else {
|
||||
copy_v3_v3(m_con_mistcolor, m_mistcolor);
|
||||
}
|
||||
}
|
||||
|
||||
void BlenderWorldInfo::setAmbientColor(float r, float g, float b)
|
||||
@@ -197,6 +206,13 @@ void BlenderWorldInfo::setAmbientColor(float r, float g, float b)
|
||||
m_ambientcolor[0] = r;
|
||||
m_ambientcolor[1] = g;
|
||||
m_ambientcolor[2] = b;
|
||||
|
||||
if (m_do_color_management) {
|
||||
linearrgb_to_srgb_v3_v3(m_con_ambientcolor, m_ambientcolor);
|
||||
}
|
||||
else {
|
||||
copy_v3_v3(m_con_ambientcolor, m_ambientcolor);
|
||||
}
|
||||
}
|
||||
|
||||
void BlenderWorldInfo::UpdateBackGround()
|
||||
@@ -205,7 +221,7 @@ void BlenderWorldInfo::UpdateBackGround()
|
||||
RAS_IRasterizer *m_rasterizer = KX_GetActiveEngine()->GetRasterizer();
|
||||
|
||||
if (m_rasterizer->GetDrawingMode() >= RAS_IRasterizer::KX_SOLID) {
|
||||
m_rasterizer->SetBackColor(m_backgroundcolor);
|
||||
m_rasterizer->SetBackColor(m_con_backgroundcolor);
|
||||
GPU_horizon_update_color(m_backgroundcolor);
|
||||
}
|
||||
}
|
||||
@@ -217,11 +233,11 @@ void BlenderWorldInfo::UpdateWorldSettings()
|
||||
RAS_IRasterizer *m_rasterizer = KX_GetActiveEngine()->GetRasterizer();
|
||||
|
||||
if (m_rasterizer->GetDrawingMode() >= RAS_IRasterizer::KX_SOLID) {
|
||||
m_rasterizer->SetAmbientColor(m_ambientcolor);
|
||||
m_rasterizer->SetAmbientColor(m_con_ambientcolor);
|
||||
GPU_ambient_update_color(m_ambientcolor);
|
||||
|
||||
if (m_hasmist) {
|
||||
m_rasterizer->SetFog(m_misttype, m_miststart, m_mistdistance, m_mistintensity, m_mistcolor);
|
||||
m_rasterizer->SetFog(m_misttype, m_miststart, m_mistdistance, m_mistintensity, m_con_mistcolor);
|
||||
GPU_mist_update_values(m_misttype, m_miststart, m_mistdistance, m_mistintensity, m_mistcolor);
|
||||
m_rasterizer->EnableFog(true);
|
||||
GPU_mist_update_enable(true);
|
||||
|
||||
@@ -51,11 +51,15 @@ class BlenderWorldInfo : public KX_WorldInfo
|
||||
float m_mistcolor[3];
|
||||
float m_backgroundcolor[3];
|
||||
float m_ambientcolor[3];
|
||||
float m_con_mistcolor[3];
|
||||
float m_con_backgroundcolor[3];
|
||||
float m_con_ambientcolor[3];
|
||||
|
||||
public:
|
||||
BlenderWorldInfo(Scene *blenderscene, World *blenderworld);
|
||||
~BlenderWorldInfo();
|
||||
|
||||
bool m_do_color_management;
|
||||
bool hasWorld();
|
||||
bool hasMist();
|
||||
short getMistType();
|
||||
|
||||
Reference in New Issue
Block a user