[Bf-blender-cvs] [e99e9143521] vr_scene_inspection: Support all 3D-view shading options for the VR session

Julian Eisel noreply at git.blender.org
Mon Jan 27 20:35:08 CET 2020


Commit: e99e91435212d796ae133d1d1d4e20f1661161f9
Author: Julian Eisel
Date:   Mon Jan 27 20:33:05 2020 +0100
Branches: vr_scene_inspection
https://developer.blender.org/rBe99e91435212d796ae133d1d1d4e20f1661161f9

Support all 3D-view shading options for the VR session

===================================================================

M	release/scripts/startup/bl_ui/space_view3d.py
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/makesdna/DNA_xr_types.h
M	source/blender/makesrna/intern/rna_space.c
M	source/blender/makesrna/intern/rna_xr.c
M	source/blender/windowmanager/intern/wm_xr.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 02dc03be127..59ef5579c2c 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -5274,7 +5274,10 @@ class VIEW3D_PT_shading(Panel):
     bl_ui_units_x = 12
 
     @classmethod
-    def get_shading(cls, context):
+    def get_shading(cls, context, shading=None):
+        if shading:
+            return shading
+
         # Get settings from 3D viewport or OpenGL render engine
         view = context.space_data
         if view.type == 'VIEW_3D':
@@ -5295,13 +5298,20 @@ class VIEW3D_PT_shading_lighting(Panel):
 
     @classmethod
     def poll(cls, context):
-        shading = VIEW3D_PT_shading.get_shading(context)
+        return cls.poll_ex(context)
+
+    def draw(self, context):
+        self.draw_ex(context)
+
+    @classmethod
+    def poll_ex(cls, context, opt_shading=None):
+        shading = VIEW3D_PT_shading.get_shading(context, opt_shading)
         engine = context.scene.render.engine
         return shading.type in {'SOLID', 'MATERIAL'} or engine == 'BLENDER_EEVEE' and shading.type == 'RENDERED'
 
-    def draw(self, context):
+    def draw_ex(self, context, opt_shading=None):
         layout = self.layout
-        shading = VIEW3D_PT_shading.get_shading(context)
+        shading = VIEW3D_PT_shading.get_shading(context, opt_shading)
 
         col = layout.column()
         split = col.split(factor=0.9)
@@ -5405,34 +5415,39 @@ class VIEW3D_PT_shading_color(Panel):
 
     @classmethod
     def poll(cls, context):
-        shading = VIEW3D_PT_shading.get_shading(context)
-        return shading.type in {'WIREFRAME', 'SOLID'}
+        return cls.poll_ex(context)
 
-    def _draw_color_type(self, context):
-        layout = self.layout
-        shading = VIEW3D_PT_shading.get_shading(context)
+    def draw(self, context):
+        self.draw_ex(context)
+
+    @classmethod
+    def poll_ex(cls, context, shading=None):
+        shading = VIEW3D_PT_shading.get_shading(context, shading)
+        return shading.type in {'WIREFRAME', 'SOLID'}
 
+    @staticmethod
+    def _draw_color_type(layout, shading):
         layout.grid_flow(columns=3, align=True).prop(shading, "color_type", expand=True)
         if shading.color_type == 'SINGLE':
             layout.row().prop(shading, "single_color", text="")
 
-    def _draw_background_color(self, context):
-        layout = self.layout
-        shading = VIEW3D_PT_shading.get_shading(context)
-
+    @staticmethod
+    def _draw_background_color(layout, shading):
         layout.row().label(text="Background")
         layout.row().prop(shading, "background_type", expand=True)
         if shading.background_type == 'VIEWPORT':
             layout.row().prop(shading, "background_color", text="")
 
-    def draw(self, context):
-        shading = VIEW3D_PT_shading.get_shading(context)
+    def draw_ex(self, context, shading=None):
+        shading = VIEW3D_PT_shading.get_shading(context, shading)
+        layout = self.layout
+
         if shading.type == 'WIREFRAME':
-            self.layout.row().prop(shading, "wireframe_color_type", expand=True)
+            layout.row().prop(shading, "wireframe_color_type", expand=True)
         else:
-            self._draw_color_type(context)
-            self.layout.separator()
-        self._draw_background_color(context)
+            VIEW3D_PT_shading_color._draw_color_type(layout, shading)
+            layout.separator()
+        VIEW3D_PT_shading_color._draw_background_color(layout, shading)
 
 
 class VIEW3D_PT_shading_options(Panel):
@@ -5443,13 +5458,20 @@ class VIEW3D_PT_shading_options(Panel):
 
     @classmethod
     def poll(cls, context):
-        shading = VIEW3D_PT_shading.get_shading(context)
-        return shading.type in {'WIREFRAME', 'SOLID'}
+        cls.poll_ex(context)
 
     def draw(self, context):
+        self.draw_ex(context)
+
+    @classmethod
+    def poll_ex(cls, context, shading=None):
+        shading = VIEW3D_PT_shading.get_shading(context, shading)
+        return shading.type in {'WIREFRAME', 'SOLID'}
+
+    def draw_ex(self, context, shading=None):
         layout = self.layout
 
-        shading = VIEW3D_PT_shading.get_shading(context)
+        shading = VIEW3D_PT_shading.get_shading(context, shading)
 
         col = layout.column()
 
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index ea0e04f1fed..cb83a28e87a 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -7815,6 +7815,21 @@ static bool direct_link_area_map(FileData *fd, ScrAreaMap *area_map)
 
 /** \} */
 
+/* -------------------------------------------------------------------- */
+/** \name XR-data
+ * \{ */
+
+#ifdef WITH_OPENXR
+
+static void direct_link_wm_xr_data(FileData *fd, wmXrData *xr_data)
+{
+  direct_link_view3dshading(fd, &xr_data->session_settings.shading);
+}
+
+#endif
+
+/** \} */
+
 /* -------------------------------------------------------------------- */
 /** \name Read ID: Window Manager
  * \{ */
@@ -7868,6 +7883,10 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm)
     }
   }
 
+#ifdef WITH_OPENXR
+  direct_link_wm_xr_data(fd, &wm->xr);
+#endif
+
   BLI_listbase_clear(&wm->timers);
   BLI_listbase_clear(&wm->operators);
   BLI_listbase_clear(&wm->paintcursors);
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index b23e37b7cc0..df2777f699b 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -4424,7 +4424,7 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
       for (wmWindowManager *wm = bmain->wm.first; wm; wm = wm->id.next) {
         const View3D *v3d_default = DNA_struct_default_get(View3D);
 
-        wm->xr.session_settings.shading_type = OB_SOLID;
+        BKE_screen_view3d_shading_init(&wm->xr.session_settings.shading);
         wm->xr.session_settings.draw_flags = (V3D_OFSDRAW_SHOW_GRIDFLOOR |
                                               V3D_OFSDRAW_SHOW_ANNOTATION);
         wm->xr.session_settings.clip_start = v3d_default->clip_start;
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 30e7cf476fb..5ced8a8e5d7 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -2749,6 +2749,13 @@ static void write_gpencil(WriteData *wd, bGPdata *gpd)
   }
 }
 
+#ifdef WITH_OPENXR
+static void write_wm_xr_data(WriteData *wd, wmXrData *xr_data)
+{
+  write_view3dshading(wd, &xr_data->session_settings.shading);
+}
+#endif
+
 static void write_region(WriteData *wd, ARegion *ar, int spacetype)
 {
   writestruct(wd, DATA, ARegion, 1, ar);
@@ -2995,6 +3002,9 @@ static void write_windowmanager(WriteData *wd, wmWindowManager *wm)
 {
   writestruct(wd, ID_WM, wmWindowManager, 1, wm);
   write_iddata(wd, &wm->id);
+#ifdef WITH_OPENXR
+  write_wm_xr_data(wd, &wm->xr);
+#endif
 
   for (wmWindow *win = wm->windows.first; win; win = win->next) {
 #ifndef WITH_GLOBAL_AREA_WRITING
diff --git a/source/blender/makesdna/DNA_xr_types.h b/source/blender/makesdna/DNA_xr_types.h
index 4f8893b1544..79c366ebda7 100644
--- a/source/blender/makesdna/DNA_xr_types.h
+++ b/source/blender/makesdna/DNA_xr_types.h
@@ -21,12 +21,14 @@
 #ifndef __DNA_XR_TYPES_H__
 #define __DNA_XR_TYPES_H__
 
+#include "DNA_view3d_types.h"
+
 typedef struct bXrSessionSettings {
-  /** Shading type (OB_SOLID, ...). */
-  char shading_type;
+  struct View3DShading shading;
+
   /** View3D draw flags (V3D_OFSDRAW_NONE, V3D_OFSDRAW_SHOW_ANNOTATION, ...). */
   char draw_flags;
-  char _pad[2];
+  char _pad[3];
 
   /** Clipping distance. */
   float clip_start, clip_end;
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 5a671ab146c..40b5f6a442c 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -978,7 +978,7 @@ static IDProperty *rna_View3DShading_idprops(PointerRNA *ptr, bool create)
 static void rna_3DViewShading_type_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
   ID *id = ptr->owner_id;
-  if (GS(id->name) == ID_SCE) {
+  if (GS(id->name) != ID_SCR) {
     return;
   }
 
diff --git a/source/blender/makesrna/intern/rna_xr.c b/source/blender/makesrna/intern/rna_xr.c
index 20d9252ad07..0967ff1639e 100644
--- a/source/blender/makesrna/intern/rna_xr.c
+++ b/source/blender/makesrna/intern/rna_xr.c
@@ -78,9 +78,9 @@ static void rna_def_xr_session_settings(BlenderRNA *brna)
   RNA_def_struct_sdna(srna, "bXrSessionSettings");
   RNA_def_struct_ui_text(srna, "XR-Session Settings", "");
 
-  prop = RNA_def_property(srna, "shading_type", PROP_ENUM, PROP_NONE);
-  RNA_def_property_enum_items(prop, rna_enum_shading_type_items);
-  RNA_def_property_ui_text(prop, "Shading Type", "Method to display/shade objects in the VR View");
+  prop = RNA_def_property(srna, "shading", PROP_POINTER, PROP_NONE);
+  RNA_def_property_flag(prop, PROP_NEVER_NULL);
+  RNA_def_property_ui_text(prop, "Shading Settings", "");
   RNA_def_property_update(prop, NC_WM | ND_XR_DATA_CHANGED, NULL);
 
   prop = RNA_def_property(srna, "show_floor", PROP_BOOLEAN, PROP_NONE);
diff --git a/source/blender/windowmanager/intern/wm_xr.c b/source/blender/windowmanager/intern/wm_xr.c
index 64c3f15b0a0..e595f6b66bc 100644
--- a/source/blender/windowmanager/intern/wm_xr.c
+++ b/source/blender/windowmanager/intern/wm_xr.c
@@ -575,7 +575,6 @@ void wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view, void *customdata)
 
   GPUOffScreen *offscreen;
   GPUViewport *viewport;
-  View3DShading shading;
   float viewmat[4][4], winmat[4][4];
 
   /* The runtime may still trigger drawing while a session-end request is pending. */
@@ -595,14 +594,10 @@ void wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view, void *customdata)
   wm_xr_surface_viewport_bind(surface_data, &rect);
   glClear(GL_DEPTH_BUFFER_BIT);
 
-  BKE_screen_view3d_shading_init(&shading);


@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list