[Bf-blender-cvs] [e06fa55] HMD_viewport: Add a dropdown to support multiple lens-distortion shaders

Julian Eisel noreply at git.blender.org
Sun Nov 20 00:12:31 CET 2016


Commit: e06fa55a486f5c58843e744d4c7af9d89e173ce9
Author: Julian Eisel
Date:   Sun Nov 20 00:11:41 2016 +0100
Branches: HMD_viewport
https://developer.blender.org/rBe06fa55a486f5c58843e744d4c7af9d89e173ce9

Add a dropdown to support multiple lens-distortion shaders

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

M	release/scripts/startup/bl_ui/space_userpref.py
M	source/blender/blenkernel/intern/screen.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/editors/interface/resources.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/gpu/GPU_compositing.h
M	source/blender/gpu/intern/gpu_compositing.c
M	source/blender/makesdna/DNA_gpu_types.h
M	source/blender/makesdna/DNA_userdef_types.h
M	source/blender/makesrna/intern/rna_userdef.c
M	source/blender/windowmanager/intern/wm_operators.c

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

diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index 86d1753..bc1a507 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -437,9 +437,9 @@ class USERPREF_PT_system(Panel):
 
         col.label(text="Head Mounted Displays:")
         col.prop(system, "hmd_device", text="Device")
-        col.prop(system, "use_hmd_view_lensdist", text="Lens Distortion")
         col.prop(system, "use_hmd_rotation")
         col.prop(system, "use_hmd_device_ipd")
+        col.prop(system, "hmd_lensdist_type", text="Lens Distortion")
         subcol = col.column()
         subcol.active = not system.use_hmd_device_ipd
         subcol.prop(system, "hmd_custom_ipd")
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index 857bd54..b76391c 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -682,4 +682,11 @@ void BKE_screen_gpu_fx_validate(GPUFXSettings *fx_settings)
 
 		GPU_fx_compositor_init_ssao_settings(fx_ssao);
 	}
+
+	if ((fx_settings->lensdist == NULL) &&
+	    (fx_settings->fx_flag & GPU_FX_FLAG_LensDist))
+	{
+		fx_settings->lensdist = MEM_callocN(sizeof(GPULensDistSettings), __func__);
+		GPU_fx_compositor_init_lensdist_settings(fx_settings->lensdist);
+	}
 }
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index d655524..172cf12 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -7065,7 +7065,9 @@ static bool direct_link_screen(FileData *fd, bScreen *sc)
 					v3d->fx_settings.dof = newdataadr(fd, v3d->fx_settings.dof);
 				if (v3d->fx_settings.ssao)
 					v3d->fx_settings.ssao = newdataadr(fd, v3d->fx_settings.ssao);
-				
+				if (v3d->fx_settings.lensdist)
+					v3d->fx_settings.lensdist = newdataadr(fd, v3d->fx_settings.lensdist);
+
 				blo_do_versions_view3d_split_250(v3d, &sl->regionbase);
 			}
 			else if (sl->spacetype == SPACE_IPO) {
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index ad1999c..3a532b8 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -3069,6 +3069,9 @@ static void write_screens(WriteData *wd, ListBase *scrbase)
 					if (v3d->fx_settings.dof) {
 						writestruct(wd, DATA, GPUDOFSettings, 1, v3d->fx_settings.dof);
 					}
+					if (v3d->fx_settings.lensdist) {
+						writestruct(wd, DATA, GPULensDistSettings, 1, v3d->fx_settings.lensdist);
+					}
 				}
 				else if (sl->spacetype == SPACE_IPO) {
 					SpaceIpo *sipo = (SpaceIpo *)sl;
diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c
index c21bba9..e454634 100644
--- a/source/blender/editors/interface/resources.c
+++ b/source/blender/editors/interface/resources.c
@@ -2765,7 +2765,8 @@ void init_userdef_do_versions(void)
 	 */
 	{
 		U.hmd_settings.device = -1;
-		U.hmd_settings.flag = (USER_HMD_USE_DEVICE_IPD | USER_HMD_USE_DEVICE_ROT | USER_HMD_USE_LENSDIST_FX);
+		U.hmd_settings.flag = (USER_HMD_USE_DEVICE_IPD | USER_HMD_USE_DEVICE_ROT);
+		U.hmd_settings.lensdist_shader = GPU_FX_LENSDIST_DK2;
 		U.hmd_settings.custom_ipd = 0.061f;
 	}
 
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 075b1fa..72d634d 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -432,13 +432,29 @@ static void view3d_free(SpaceLink *sl)
 		MEM_freeN(vd->fx_settings.ssao);
 	if (vd->fx_settings.dof)
 		MEM_freeN(vd->fx_settings.dof);
+	if (vd->fx_settings.lensdist)
+		MEM_freeN(vd->fx_settings.lensdist);
 }
 
 
 /* spacetype; init callback */
-static void view3d_init(wmWindowManager *UNUSED(wm), ScrArea *UNUSED(sa))
+static void view3d_init(wmWindowManager *wm, ScrArea *sa)
 {
-
+#ifdef WITH_INPUT_HMD
+	View3D *v3d = sa->spacedata.first;
+	const wmWindow *hmd_win = wm->hmd_view.hmd_win;
+	const bool is_hmd_view = hmd_win && (hmd_win->screen->areabase.first == sa);
+
+	/* Make sure the HMD view is initialized with the shader set in UserPrefs. */
+	if (is_hmd_view && v3d->fx_settings.lensdist) {
+		v3d->fx_settings.lensdist->type = U.hmd_settings.lensdist_shader;
+		if (U.hmd_settings.lensdist_shader != GPU_FX_LENSDIST_NONE) {
+			v3d->fx_settings.fx_flag |= GPU_FX_FLAG_LensDist;
+		}
+	}
+#else
+	UNUSED(wm, sa);
+#endif
 }
 
 static SpaceLink *view3d_duplicate(SpaceLink *sl)
@@ -477,6 +493,8 @@ static SpaceLink *view3d_duplicate(SpaceLink *sl)
 		v3dn->fx_settings.dof = MEM_dupallocN(v3do->fx_settings.dof);
 	if (v3dn->fx_settings.ssao)
 		v3dn->fx_settings.ssao = MEM_dupallocN(v3do->fx_settings.ssao);
+	if (v3dn->fx_settings.lensdist)
+		v3dn->fx_settings.lensdist = MEM_dupallocN(v3do->fx_settings.lensdist);
 
 	return (SpaceLink *)v3dn;
 }
diff --git a/source/blender/gpu/GPU_compositing.h b/source/blender/gpu/GPU_compositing.h
index 31b4e3b..c358a80 100644
--- a/source/blender/gpu/GPU_compositing.h
+++ b/source/blender/gpu/GPU_compositing.h
@@ -40,6 +40,7 @@ extern "C" {
 typedef struct GPUFX GPUFX;
 struct GPUDOFSettings;
 struct GPUSSAOSettings;
+struct GPULensDistSettings;
 struct GPUOffScreen;
 struct GPUFXSettings;
 struct rcti;
@@ -101,6 +102,7 @@ void GPU_fx_compositor_XRay_resolve(GPUFX *fx);
 
 void GPU_fx_compositor_init_dof_settings(struct GPUDOFSettings *dof);
 void GPU_fx_compositor_init_ssao_settings(struct GPUSSAOSettings *ssao);
+void GPU_fx_compositor_init_lensdist_settings(struct GPULensDistSettings *fx_lensdist);
 
 
 /* initialize and cache the shader unform interface for effects */
diff --git a/source/blender/gpu/intern/gpu_compositing.c b/source/blender/gpu/intern/gpu_compositing.c
index f69f1b1..d2aa70b 100644
--- a/source/blender/gpu/intern/gpu_compositing.c
+++ b/source/blender/gpu/intern/gpu_compositing.c
@@ -399,6 +399,9 @@ bool GPU_fx_compositor_initialize_passes(
 	if (!fx_settings->ssao || fx_settings->ssao->samples < 1) {
 		fx_flag &= ~GPU_FX_FLAG_SSAO;
 	}
+	if (!fx_settings->lensdist || fx_settings->lensdist->type == GPU_FX_LENSDIST_NONE) {
+		fx_flag &= ~GPU_FX_FLAG_LensDist;
+	}
 
 	if (!fx_flag) {
 		cleanup_fx_gl_data(fx, true);
@@ -1292,8 +1295,11 @@ bool GPU_fx_do_composite_pass(
 
 	/* third pass, Lens Distortion */
 	if (fx->effects & GPU_FX_FLAG_LensDist) {
+		eGPULensDistType type = fx->settings.lensdist->type; /* TODO Use this */
 		GPUShader *lensdist_shader = GPU_shader_get_builtin_fx_shader(GPU_SHADER_FX_LENS_DISTORTION, is_persp);
 
+		UNUSED_VARS(type);
+
 		if (lensdist_shader) {
 			const int color_uniform = GPU_shader_get_uniform(lensdist_shader, "warpTexture");
 			const int regionsize_uniform = GPU_shader_get_uniform(lensdist_shader, "RegionSize");
@@ -1357,6 +1363,11 @@ void GPU_fx_compositor_init_ssao_settings(GPUSSAOSettings *fx_ssao)
 	fx_ssao->samples = 20;
 }
 
+void GPU_fx_compositor_init_lensdist_settings(GPULensDistSettings *fx_lensdist)
+{
+	fx_lensdist->type = GPU_FX_LENSDIST_NONE;
+}
+
 void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect effect)
 {
 	if (!shader)
diff --git a/source/blender/makesdna/DNA_gpu_types.h b/source/blender/makesdna/DNA_gpu_types.h
index 22df933..2c35a56 100644
--- a/source/blender/makesdna/DNA_gpu_types.h
+++ b/source/blender/makesdna/DNA_gpu_types.h
@@ -52,9 +52,20 @@ typedef struct GPUSSAOSettings {
 	int pad;
 } GPUSSAOSettings;
 
+typedef struct GPULensDistSettings {
+	char type; /* eGPULensDistType */
+	char pad[3];
+} GPULensDistSettings;
+
+typedef enum eGPULensDistType {
+	GPU_FX_LENSDIST_NONE = 0,
+	GPU_FX_LENSDIST_DK2  = 1,
+} eGPULensDistType;
+
 typedef struct GPUFXSettings {
 	GPUDOFSettings *dof;
 	GPUSSAOSettings *ssao;
+	GPULensDistSettings *lensdist;
 	char fx_flag;  /* eGPUFXFlags */
 	char pad[7];
 } GPUFXSettings;
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index 71d1988..cb225bd 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -432,7 +432,8 @@ typedef struct WalkNavigation {
 
 struct HMDSettings {
 	short device; /* HMD device index */
-	char flag, pad;
+	char flag;
+	char lensdist_shader;
 	float custom_ipd;
 	/* Set while using custom_ipd (USER_HMD_USE_DEVICE_IPD) so we can reset to device IPD */
 	float init_ipd;
@@ -441,8 +442,7 @@ struct HMDSettings {
 /* HMDViewSettings.flag */
 enum {
 	USER_HMD_USE_DEVICE_ROT  = (1 << 0),
-	USER_HMD_USE_LENSDIST_FX = (1 << 1),
-	USER_HMD_USE_DEVICE_IPD  = (1 << 2),
+	USER_HMD_USE_DEVICE_IPD  = (1 << 1),
 };
 
 typedef struct UserDef {
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index cc3857d..6fe2fc4 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -111,6 +111,7 @@ static EnumPropertyItem rna_enum_language_default_items[] = {
 #include "BKE_idprop.h"
 #include "BKE_pbvh.h"
 #include "BKE_paint.h"
+#include "BKE_screen.h"
 
 #include "BLI_string.h"
 
@@ -673,28 +674,29 @@ static void rna_userdef_hmd_camlock_update(
 	DAG_id_tag_update(&camera_ob->id, OB_RECALC_OB);
 }
 
-static void rna_userdef_hmd_view_lensdist_set(PointerRNA *UNUSED(ptr), int value)
+static void rna_userdef_hmd_lensdist_type_set(PointerRNA *UNUSED(ptr), int value)
 {
 	wmWindowManager *wm = G.main->wm.first;
-	wmWindow *win = wm->hmd_view.hmd_win;
+	wmWindow *hmd_win = wm->hmd_view.hmd_win;
 
-	if (value) {
-		U.hmd_settings.flag |= USER_HMD_USE_LENSDIST_FX;
-	}
-	else {
-		U.hmd_settings.flag &= ~USER_HMD_USE_LENSDIST_FX;
-	}
+	/* store new value so it'll be applied the next time we open an HMD view */
+	U.hmd_settings.lensdist_shader = value;
 
-	if (win) {
-		for (ScrArea *sa = win->screen->areabase.first; sa; sa = sa->next) {
+	if (hmd_win) {
+		for (ScrArea *sa = hmd_win->screen->areabase.first; sa; sa = sa->next) {
 			if (sa->spacetype == SPACE_VIEW3D) {
 				View3D *v3d = sa->spacedata.first;
-				if (value) {
-					v3d->fx_settings.fx_flag |= GPU_FX_F

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list