Commit: ce40fb9ab2616abefb79b12c3972e550b1df4660 Author: Thomas Szepe Date: Mon Mar 23 23:56:46 2015 +0100 Branches: master https://developer.blender.org/rBce40fb9ab2616abefb79b12c3972e550b1df4660
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 =================================================================== M release/scripts/startup/bl_ui/properties_game.py M source/blender/gpu/intern/gpu_material.c M source/blender/makesrna/intern/rna_color.c M source/gameengine/Converter/BL_BlenderDataConversion.cpp M source/gameengine/Converter/BlenderWorldInfo.cpp M source/gameengine/Converter/BlenderWorldInfo.h =================================================================== diff --git a/release/scripts/startup/bl_ui/properties_game.py b/release/scripts/startup/bl_ui/properties_game.py index 8ef9a08..84ad242 100644 --- a/release/scripts/startup/bl_ui/properties_game.py +++ b/release/scripts/startup/bl_ui/properties_game.py @@ -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") diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c index 480972d..4d46ef3 100644 --- a/source/blender/gpu/intern/gpu_material.c +++ b/source/blender/gpu/intern/gpu_material.c @@ -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) diff --git a/source/blender/makesrna/intern/rna_color.c b/source/blender/makesrna/intern/rna_color.c index 5e114a5..e6193b3 100644 --- a/source/blender/makesrna/intern/rna_color.c +++ b/source/blender/makesrna/intern/rna_color.c @@ -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); } } diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp index 6e3a321..3e7e104 100644 --- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp +++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp @@ -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); diff --git a/source/gameengine/Converter/BlenderWorldInfo.cpp b/source/gameengine/Converter/BlenderWorldInfo.cpp index 40293d7..6daeccc 100644 --- a/source/gameengine/Converter/BlenderWorldInfo.cpp +++ b/source/gameengine/Converter/BlenderWorldInfo.cpp @@ -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); diff --git a/source/gameengine/Converter/BlenderWorldInfo.h b/source/gameengine/Converter/BlenderWorldInfo.h index 395e8f7..5c1cbd2 100644 --- a/source/gameengine/Converter/BlenderWorldInfo.h +++ b/source/gameengine/Converter/BlenderWorldInfo.h @@ -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(); _______________________________________________ Bf-blender-cvs mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-blender-cvs
