[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