From 2ad3d8f158d2e7658e293efd90a4cb1ca403d2bb Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Tue, 9 Mar 2010 06:20:08 +0000 Subject: [PATCH] Fix [#21145] Preferences: Solid OpenGL lights viewport update --- source/blender/editors/space_view3d/space_view3d.c | 9 ++++++++- source/blender/editors/space_view3d/view3d_draw.c | 6 ++++++ source/blender/makesdna/DNA_view3d_types.h | 1 + source/blender/makesrna/intern/rna_userdef.c | 5 +---- source/blender/windowmanager/WM_types.h | 2 ++ 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index e9f118fb47a..f726b771fb3 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -57,6 +57,8 @@ #include "BIF_gl.h" +#include "GPU_draw.h" + #include "WM_api.h" #include "WM_types.h" @@ -602,8 +604,13 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) ED_region_tag_redraw(ar); break; case NC_SPACE: - if(wmn->data == ND_SPACE_VIEW3D) + if(wmn->data == ND_SPACE_VIEW3D) { + if (wmn->subtype == NS_VIEW3D_GPU) { + RegionView3D *rv3d= ar->regiondata; + rv3d->rflag |= RV3D_GPULIGHT_UPDATE; + } ED_region_tag_redraw(ar); + } break; case NC_ID: if(wmn->action == NA_RENAME) diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 42416c2d8eb..c5e0f096c04 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2188,6 +2188,12 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) /* shadow buffers, before we setup matrices */ if(draw_glsl_material(scene, NULL, v3d, v3d->drawtype)) gpu_update_lamps_shadows(scene, v3d); + + /* reset default OpenGL lights if needed (i.e. after preferences have been altered) */ + if (rv3d->rflag & RV3D_GPULIGHT_UPDATE) { + rv3d->rflag &= ~RV3D_GPULIGHT_UPDATE; + GPU_default_lights(); + } /* clear background */ UI_GetThemeColor3fv(TH_BACK, col); diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h index 123aab2d9e0..12849d02d97 100644 --- a/source/blender/makesdna/DNA_view3d_types.h +++ b/source/blender/makesdna/DNA_view3d_types.h @@ -229,6 +229,7 @@ typedef struct View3D { #define RV3D_FLYMODE 2 #define RV3D_CLIPPING 4 #define RV3D_NAVIGATING 8 +#define RV3D_GPULIGHT_UPDATE 16 /* RegionView3d->viewlock */ #define RV3D_LOCKED 1 diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 2b4a8aad255..7fd15e0e136 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -201,12 +201,9 @@ static void rna_UserDef_weight_color_update(Main *bmain, Scene *scene, PointerRN rna_userdef_update(bmain, scene, ptr); } -// XXX - todo, this is not accessible from here and it only works when the userprefs are in the same window. -// extern int GPU_default_lights(void); static void rna_UserDef_viewport_lights_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - // GPU_default_lights(); - WM_main_add_notifier(NC_SPACE|ND_SPACE_VIEW3D, NULL); + WM_main_add_notifier(NC_SPACE|ND_SPACE_VIEW3D|NS_VIEW3D_GPU, NULL); rna_userdef_update(bmain, scene, ptr); } diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 06f1e7942f7..bb4a7452e08 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -267,6 +267,8 @@ typedef struct wmNotifier { #define NS_MODE_POSE (9<<8) #define NS_MODE_PARTICLE (10<<8) +/* subtype 3d view editing */ +#define NS_VIEW3D_GPU (16<<8) /* action classification */ #define NOTE_ACTION (0x000000FF)