[Bf-blender-cvs] [52f5112] master: Multiview: remove option to preview the selected stereo 3d mode and error when quadbuffer not supported

Dalai Felinto noreply at git.blender.org
Fri Apr 10 01:45:21 CEST 2015


Commit: 52f511269b98efa804ce7fcc99039ef22190cf29
Author: Dalai Felinto
Date:   Thu Apr 9 20:43:59 2015 -0300
Branches: master
https://developer.blender.org/rB52f511269b98efa804ce7fcc99039ef22190cf29

Multiview: remove option to preview the selected stereo 3d mode and error when quadbuffer not supported

This was causing glitches when switching from/to fullscreen modes (e.g.,
side by side to anaglyph).

As for the quadbuffer errors this is part of a more complete solution to
be committed later.

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

M	source/blender/windowmanager/intern/wm_stereo.c

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

diff --git a/source/blender/windowmanager/intern/wm_stereo.c b/source/blender/windowmanager/intern/wm_stereo.c
index 240e35b..38f1cf6 100644
--- a/source/blender/windowmanager/intern/wm_stereo.c
+++ b/source/blender/windowmanager/intern/wm_stereo.c
@@ -352,6 +352,13 @@ void wm_method_draw_stereo3d(const bContext *UNUSED(C), wmWindow *win)
 	}
 }
 
+static bool wm_stereo3d_quadbuffer_supported()
+{
+	int gl_stereo = 0;
+	glGetBooleanv(GL_STEREO, (GLboolean *)&gl_stereo);
+	return gl_stereo != 0;
+}
+
 static bool wm_stereo3d_is_fullscreen_required(eStereoDisplayMode stereo_display)
 {
 	return ELEM(stereo_display,
@@ -364,11 +371,14 @@ bool WM_stereo3d_enabled(wmWindow *win, bool skip_stereo3d_check)
 {
 	bScreen *screen = win->screen;
 
-	if ((skip_stereo3d_check == false) && (ED_screen_stereo3d_required(screen) == false))
+	if ((skip_stereo3d_check == false) && (ED_screen_stereo3d_required(screen) == false)) {
 		return false;
+	}
 
 	if (wm_stereo3d_is_fullscreen_required(win->stereo3d_format->display_mode)) {
-		return (GHOST_GetWindowState(win->ghostwin) == GHOST_kWindowStateFullScreen);
+		if (GHOST_GetWindowState(win->ghostwin) != GHOST_kWindowStateFullScreen) {
+			return false;
+		}
 	}
 
 	return true;
@@ -379,10 +389,10 @@ typedef struct Stereo3dData {
 	Stereo3dFormat stereo3d_format;
 } Stereo3dData;
 
-static bool wm_stereo3d_set_properties(bContext *C, wmOperator *op)
+static bool wm_stereo3d_set_properties(bContext *UNUSED(C), wmOperator *op)
 {
-	wmWindow *win = CTX_wm_window(C);
-	Stereo3dFormat *s3d = win->stereo3d_format;
+	Stereo3dData *s3dd = op->customdata;
+	Stereo3dFormat *s3d = &s3dd->stereo3d_format;
 	PropertyRNA *prop;
 	bool is_set = false;
 
@@ -441,12 +451,24 @@ int wm_stereo3d_set_exec(bContext *C, wmOperator *op)
 	wmWindowManager *wm = CTX_wm_manager(C);
 	wmWindow *win = CTX_wm_window(C);
 	const bool is_fullscreen = WM_window_is_fullscreen(win);
+	char display_mode = win->stereo3d_format->display_mode;
 
 	if (G.background)
 		return OPERATOR_CANCELLED;
 
-	/* pagelfip requires a new window to be created with the proper OS flags */
+	if (op->customdata) {
+		Stereo3dData *s3dd = op->customdata;
+		*win->stereo3d_format = s3dd->stereo3d_format;
+	}
+
+	/* pageflip requires a new window to be created with the proper OS flags */
 	if (win->stereo3d_format->display_mode == S3D_DISPLAY_PAGEFLIP) {
+		if (wm_stereo3d_quadbuffer_supported() == false) {
+			BKE_reportf(op->reports, RPT_ERROR,
+			            "Quadbuffer not supported by the system");
+			win->stereo3d_format->display_mode = display_mode;
+			return OPERATOR_CANCELLED;
+		}
 		if (wm_window_duplicate_exec(C, op) == OPERATOR_FINISHED) {
 			wm_window_close(C, wm, win);
 			win = wm->windows.last;
@@ -454,6 +476,7 @@ int wm_stereo3d_set_exec(bContext *C, wmOperator *op)
 		else {
 			BKE_reportf(op->reports, RPT_ERROR,
 			            "Fail to create a window compatible with time sequential (page-flip) display method");
+			win->stereo3d_format->display_mode = display_mode;
 			return OPERATOR_CANCELLED;
 		}
 	}
@@ -482,21 +505,19 @@ int wm_stereo3d_set_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(ev
 		return WM_operator_props_dialog_popup(C, op, 250, 100);
 }
 
-void wm_stereo3d_set_draw(bContext *C, wmOperator *op)
+void wm_stereo3d_set_draw(bContext *UNUSED(C), wmOperator *op)
 {
-	wmWindow *win = CTX_wm_window(C);
-	Stereo3dFormat *stereo3d_format;
+	Stereo3dData *s3dd = op->customdata;
 	PointerRNA stereo3d_format_ptr;
 	uiLayout *layout = op->layout;
 	uiLayout *col;
 
-	stereo3d_format = win->stereo3d_format;
-	RNA_pointer_create(NULL, &RNA_Stereo3dDisplay, stereo3d_format, &stereo3d_format_ptr);
+	RNA_pointer_create(NULL, &RNA_Stereo3dDisplay, &s3dd->stereo3d_format, &stereo3d_format_ptr);
 
 	col = uiLayoutColumn(layout, false);
 	uiItemR(col, &stereo3d_format_ptr, "display_mode", 0, NULL, ICON_NONE);
 
-	switch (stereo3d_format->display_mode) {
+	switch (s3dd->stereo3d_format.display_mode) {
 		case S3D_DISPLAY_ANAGLYPH:
 		{
 			uiItemR(col, &stereo3d_format_ptr, "anaglyph_type", 0, NULL, ICON_NONE);
@@ -530,16 +551,8 @@ bool wm_stereo3d_set_check(bContext *UNUSED(C), wmOperator *UNUSED(op))
 	return true;
 }
 
-void wm_stereo3d_set_cancel(bContext *C, wmOperator *op)
+void wm_stereo3d_set_cancel(bContext *UNUSED(C), wmOperator *op)
 {
-	Stereo3dData *s3dd = op->customdata;
-	wmWindow *win = CTX_wm_window(C);
-
-	/* roll back to the original */
-	if (win) {
-		*win->stereo3d_format = s3dd->stereo3d_format;
-	}
-
 	MEM_freeN(op->customdata);
 	op->customdata = NULL;
 }




More information about the Bf-blender-cvs mailing list