[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