[Bf-blender-cvs] [7fd107b] soc-2014-viewport_fx: Using 0 as an error sentinel for the swap interval is not strictly correct.

Jason Wilkins noreply at git.blender.org
Wed Jun 25 23:42:43 CEST 2014


Commit: 7fd107b320a779554beed2ec2d119290b0a9e3a4
Author: Jason Wilkins
Date:   Wed Jun 25 10:55:02 2014 -0500
https://developer.blender.org/rB7fd107b320a779554beed2ec2d119290b0a9e3a4

Using 0 as an error sentinel for the swap interval is not strictly correct.

0 is a valid value for a swap interval and different users of getSwapInterval may want to substitute different values if the swap interval cannot be read.

This commit changes the prototype to: GHOST_TSuccess getSwapInterval(int& intervalOut)

Users of the function should either check the return value or set intervalOut to a default value before calling getSwapInterval.

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

M	intern/ghost/GHOST_C-api.h
M	intern/ghost/GHOST_IWindow.h
M	intern/ghost/intern/GHOST_C-api.cpp
M	intern/ghost/intern/GHOST_Context.h
M	intern/ghost/intern/GHOST_ContextCGL.h
M	intern/ghost/intern/GHOST_ContextCGL.mm
M	intern/ghost/intern/GHOST_ContextEGL.cpp
M	intern/ghost/intern/GHOST_ContextEGL.h
M	intern/ghost/intern/GHOST_ContextNone.cpp
M	intern/ghost/intern/GHOST_ContextNone.h
M	intern/ghost/intern/GHOST_ContextWGL.cpp
M	intern/ghost/intern/GHOST_ContextWGL.h
M	intern/ghost/intern/GHOST_Window.cpp
M	intern/ghost/intern/GHOST_Window.h
M	intern/ghost/intern/GHOST_WindowSDL.cpp
M	intern/ghost/intern/GHOST_WindowSDL.h
M	intern/ghost/intern/GHOST_WindowX11.cpp
M	intern/ghost/intern/GHOST_WindowX11.h
M	source/blender/windowmanager/intern/wm_window.c
M	source/blender/windowmanager/wm_window.h
M	source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
M	source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp
M	source/gameengine/BlenderRoutines/KX_BlenderCanvas.h
M	source/gameengine/GamePlayer/ghost/GPG_Canvas.cpp
M	source/gameengine/GamePlayer/ghost/GPG_Canvas.h
M	source/gameengine/Ketsji/KX_PythonInit.cpp
M	source/gameengine/Rasterizer/RAS_ICanvas.h

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

diff --git a/intern/ghost/GHOST_C-api.h b/intern/ghost/GHOST_C-api.h
index aae9017..0df149c 100644
--- a/intern/ghost/GHOST_C-api.h
+++ b/intern/ghost/GHOST_C-api.h
@@ -676,7 +676,7 @@ extern GHOST_TSuccess GHOST_SetSwapInterval(GHOST_WindowHandle windowhandle, int
  * Gets the current swap interval for swapBuffers.
  * \return An integer.
  */
-extern int GHOST_GetSwapInterval(GHOST_WindowHandle windowhandle);
+extern GHOST_TSuccess GHOST_GetSwapInterval(GHOST_WindowHandle windowhandle, int* intervalOut);
 
 /**
  * Activates the drawing context of this window.
diff --git a/intern/ghost/GHOST_IWindow.h b/intern/ghost/GHOST_IWindow.h
index 3557707..8564974 100644
--- a/intern/ghost/GHOST_IWindow.h
+++ b/intern/ghost/GHOST_IWindow.h
@@ -213,9 +213,10 @@ public:
 
 	/**
 	 * Gets the current swap interval for swapBuffers.
-	 * \return An integer.
+	 * \param intervalOut Variable to store the swap interval if it can be read.
+	 * \return Whether the swap interval can be read.
 	 */
-	virtual int getSwapInterval() = 0;
+	virtual GHOST_TSuccess getSwapInterval(int& intervalOut) = 0;
 
 	/**
 	 * Activates the drawing context of this window.
diff --git a/intern/ghost/intern/GHOST_C-api.cpp b/intern/ghost/intern/GHOST_C-api.cpp
index 8d4498e..f338d97 100644
--- a/intern/ghost/intern/GHOST_C-api.cpp
+++ b/intern/ghost/intern/GHOST_C-api.cpp
@@ -698,11 +698,11 @@ GHOST_TSuccess GHOST_SetSwapInterval(GHOST_WindowHandle windowhandle, int interv
 	return window->setSwapInterval(interval);
 }
 
-int GHOST_GetSwapInterval(GHOST_WindowHandle windowhandle)
+GHOST_TSuccess GHOST_GetSwapInterval(GHOST_WindowHandle windowhandle, int* intervalOut)
 {
 	GHOST_IWindow *window = (GHOST_IWindow *) windowhandle;
 
-	return window->getSwapInterval();
+	return window->getSwapInterval(*intervalOut);
 }
 
 
diff --git a/intern/ghost/intern/GHOST_Context.h b/intern/ghost/intern/GHOST_Context.h
index 85fc8ed..d545e11 100644
--- a/intern/ghost/intern/GHOST_Context.h
+++ b/intern/ghost/intern/GHOST_Context.h
@@ -106,10 +106,11 @@ public:
 
 	/**
 	 * Gets the current swap interval for swapBuffers.
-	 * \return An integer.
+	 * \param intervalOut Variable to store the swap interval if it can be read.
+	 * \return Whether the swap interval can be read.
 	 */
-	virtual int getSwapInterval() {
-		return 1;
+	virtual GHOST_TSuccess getSwapInterval(int&) {
+		return GHOST_kFailure;
 	}
 
 	/** Stereo visual created. Only necessary for 'real' stereo support,
diff --git a/intern/ghost/intern/GHOST_ContextCGL.h b/intern/ghost/intern/GHOST_ContextCGL.h
index 02b8adf..bfc7676 100644
--- a/intern/ghost/intern/GHOST_ContextCGL.h
+++ b/intern/ghost/intern/GHOST_ContextCGL.h
@@ -120,9 +120,10 @@ public:
 
 	/**
 	 * Gets the current swap interval for swapBuffers.
-	 * \return An integer.
+	 * \param intervalOut Variable to store the swap interval if it can be read.
+	 * \return Whether the swap interval can be read.
 	 */
-	virtual int getSwapInterval();
+	virtual GHOST_TSuccess getSwapInterval(int&);
 
 private:
 
diff --git a/intern/ghost/intern/GHOST_ContextCGL.mm b/intern/ghost/intern/GHOST_ContextCGL.mm
index e45fe7e..d478575 100644
--- a/intern/ghost/intern/GHOST_ContextCGL.mm
+++ b/intern/ghost/intern/GHOST_ContextCGL.mm
@@ -128,17 +128,19 @@ GHOST_TSuccess GHOST_ContextCGL::setSwapInterval(int interval)
 
 
 
-int GHOST_ContextCGL::getSwapInterval()
+GHOST_TSuccess GHOST_ContextCGL::getSwapInterval(int& intervalOut)
 {
 	if (m_openGLContext != nil) {
-		GLint interval = 1;
+		GLint interval;
 		NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 		[m_openGLContext setValues:&interval forParameter:NSOpenGLCPSwapInterval];
 		[pool drain];
-		return interval;
+
+		intervalOut = (int)interval;
+		return GHOST_kSuccess;
 	}
 	else {
-		return 1; // XXX jwilkins: negative numbers are valid, large numbers could have unintended consequences
+		return GHOST_kFailure;
 	}
 }
 
diff --git a/intern/ghost/intern/GHOST_ContextEGL.cpp b/intern/ghost/intern/GHOST_ContextEGL.cpp
index fcdd7b1..6ddbfc5 100644
--- a/intern/ghost/intern/GHOST_ContextEGL.cpp
+++ b/intern/ghost/intern/GHOST_ContextEGL.cpp
@@ -332,9 +332,10 @@ GHOST_TSuccess GHOST_ContextEGL::setSwapInterval(int interval)
 
 
 
-int GHOST_ContextEGL::getSwapInterval()
+GHOST_TSuccess GHOST_ContextEGL::getSwapInterval(int& intervalOut)
 {
-	return m_swap_interval;
+	intervalOut = m_swap_interval;
+	return GHOST_kSuccess;
 }
 
 
diff --git a/intern/ghost/intern/GHOST_ContextEGL.h b/intern/ghost/intern/GHOST_ContextEGL.h
index dce1a9b9b..9d72f96 100644
--- a/intern/ghost/intern/GHOST_ContextEGL.h
+++ b/intern/ghost/intern/GHOST_ContextEGL.h
@@ -112,9 +112,10 @@ public:
 
 	/**
 	 * Gets the current swap interval for swapBuffers.
-	 * \return An integer.
+	 * \param intervalOut Variable to store the swap interval if it can be read.
+	 * \return Whether the swap interval can be read.
 	 */
-	virtual int getSwapInterval();
+	GHOST_TSuccess getSwapInterval(int& intervalOut)
 
 protected:
 	void activateEGLEW() const {
diff --git a/intern/ghost/intern/GHOST_ContextNone.cpp b/intern/ghost/intern/GHOST_ContextNone.cpp
index cbdd3a1..15b303d 100644
--- a/intern/ghost/intern/GHOST_ContextNone.cpp
+++ b/intern/ghost/intern/GHOST_ContextNone.cpp
@@ -78,7 +78,8 @@ GHOST_TSuccess GHOST_ContextNone::setSwapInterval(int interval)
 
 
 
-int GHOST_ContextNone::getSwapInterval()
+GHOST_TSuccess GHOST_ContextNone::getSwapInterval(int& intervalOut)
 {
-	return m_swapInterval;
+	intervalOut = m_swapInterval;
+	return GHOST_kSuccess;
 }
diff --git a/intern/ghost/intern/GHOST_ContextNone.h b/intern/ghost/intern/GHOST_ContextNone.h
index a6c7bb6..679e534 100644
--- a/intern/ghost/intern/GHOST_ContextNone.h
+++ b/intern/ghost/intern/GHOST_ContextNone.h
@@ -84,9 +84,10 @@ public:
 
 	/**
 	 * Dummy function
-	 * \return Whatever was set by setSwapInterval
+	 * \param intervalOut Gets whatever was set by setSwapInterval
+	 * \return Always succeeds
 	 */
-	virtual int getSwapInterval();
+	virtual GHOST_TSuccess getSwapInterval(int& intervalOut);
 
 private:
 	int m_swapInterval;
diff --git a/intern/ghost/intern/GHOST_ContextWGL.cpp b/intern/ghost/intern/GHOST_ContextWGL.cpp
index 397687b..dcb0888 100644
--- a/intern/ghost/intern/GHOST_ContextWGL.cpp
+++ b/intern/ghost/intern/GHOST_ContextWGL.cpp
@@ -238,9 +238,15 @@ GHOST_TSuccess GHOST_ContextWGL::setSwapInterval(int interval)
 
 
 
-int GHOST_ContextWGL::getSwapInterval()
+GHOST_TSuccess GHOST_ContextWGL::getSwapInterval(int& intervalOut)
 {
-	return WGLEW_EXT_swap_control ? ::wglGetSwapIntervalEXT() : 1;
+	if (WGLEW_EXT_swap_control) {
+		intervalOut = ::wglGetSwapIntervalEXT();
+		return GHOST_kSuccess;
+	}
+	else {
+		return GHOST_kFailure;
+	}
 }
 
 
diff --git a/intern/ghost/intern/GHOST_ContextWGL.h b/intern/ghost/intern/GHOST_ContextWGL.h
index 3ba1ba9..26c55bb 100644
--- a/intern/ghost/intern/GHOST_ContextWGL.h
+++ b/intern/ghost/intern/GHOST_ContextWGL.h
@@ -107,9 +107,10 @@ public:
 
 	/**
 	 * Gets the current swap interval for swapBuffers.
-	 * \return An integer.
+	 * \param intervalOut Variable to store the swap interval if it can be read.
+	 * \return Whether the swap interval can be read.
 	 */
-	virtual int getSwapInterval();
+	virtual GHOST_TSuccess getSwapInterval(int& intervalOut);
 
 protected:
 	void activateWGLEW() const
diff --git a/intern/ghost/intern/GHOST_Window.cpp b/intern/ghost/intern/GHOST_Window.cpp
index 418eaeb..a320b6a 100644
--- a/intern/ghost/intern/GHOST_Window.cpp
+++ b/intern/ghost/intern/GHOST_Window.cpp
@@ -126,9 +126,9 @@ GHOST_TSuccess GHOST_Window::setSwapInterval(int interval)
 	return m_context->setSwapInterval(interval);
 }
 
-int GHOST_Window::getSwapInterval()
+GHOST_TSuccess GHOST_Window::getSwapInterval(int& intervalOut)
 {
-	return m_context->getSwapInterval();
+	return m_context->getSwapInterval(intervalOut);
 }
 
 GHOST_TSuccess GHOST_Window::activateDrawingContext()
diff --git a/intern/ghost/intern/GHOST_Window.h b/intern/ghost/intern/GHOST_Window.h
index 633a30a..53a5476 100644
--- a/intern/ghost/intern/GHOST_Window.h
+++ b/intern/ghost/intern/GHOST_Window.h
@@ -88,10 +88,10 @@ public:
 	 * virtual GHOST_TWindowState getState() const = 0;
 	 * virtual GHOST_TSuccess setState(GHOST_TWindowState state) = 0;
 	 * virtual GHOST_TSuccess setOrder(GHOST_TWindowOrder order) = 0;
-	 * virtual GHOST_TSuccess swapBuffers() = 0; // XXX: should be implemented in context?
-	 * virtual GHOST_TSuccess setSwapInterval() = 0; // XXX: should be implemented in context?
-	 * virtual int getSwapInterval() = 0; // XXX: should be implemented in context?
-	 * virtual GHOST_TSuccess activateDrawingContext() = 0; // XXX: should be implemented in context?
+	 * virtual GHOST_TSuccess swapBuffers() = 0;
+	 * virtual GHOST_TSuccess setSwapInterval() = 0;
+	 * virtual GHOST_TSuccess getSwapInterval(int& intervalOut) = 0;
+	 * virtual GHOST_TSuccess activateDrawingContext() = 0;
 	 * virtual GHOST_TSuccess invalidate() = 0;
 	 */
 
@@ -204,7 +204,7 @@ public:
 	 * Gets the current swap interval for swapBuffers.
 	 * \return An integer.
 	 */
-	virtual int getSwapInterval();
+	virtual GHOST_TSuccess getSwapInterval(int& intervalOut);
 
 	/**
 	 * Tells if the ongoing drag'n'drop object can be accepted upon mouse drop
diff --git a/intern/ghost/intern/GHOST_WindowSDL.cpp b/intern/ghost/intern/GHOST_WindowSDL.cpp
index f6c44c7..60aa54f 100644
--- a/intern/ghost/intern/GHOST_WindowSDL.cpp
+++ b/intern/ghost/intern/GHOST_WindowSDL.cpp
@@ -647,8 +647,9 @@ GHOST_WindowSDL::setSwapInterval(int interval)
 	return GHOST_kSuccess;
 }
 
-int
-GHOST_WindowSDL::getSwapInterval()
+GHOST_TSuccess
+GHOST_WindowSDL::getSwapInterval(int& intervalOut)
 {
-	return SDL_GL_GetSwapInterval();
+	intervalOut = SDL_GL_GetSwapInterval();
+	return GHOST_kSuccess;
 }
diff --git a/intern/ghost/intern/GHOST_WindowSDL.h b/intern/ghost/intern/GHOST_WindowSDL.h
index 0c11ce1..1715b46 100644
--- a/intern/ghost/intern/GHOST_WindowSDL.h
+++ b/intern/ghost/intern/GHOST_WindowSDL.h
@@ -174,7 +174,7 @@ protected:
 	GHOST_TSuccess endFullScreen() const { return GHOST_kFailure; }
 
 	GHOST_TSuccess setSwapInterval(int interval);
-	int getSwapInterval();
+	GHOST_TSuccess getSwapInterval(int& intervalOut);
 };
 
 
diff --git a

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list