[Bf-blender-cvs] [85fdb5a] soc-2014-viewport_fx: some readability edits for ghost context classes also added code to clear screen immediately after context creation, similar to how it is done for glX

Jason Wilkins noreply at git.blender.org
Thu Jul 10 04:32:07 CEST 2014


Commit: 85fdb5adefd9560885ae66b91687c44e644f6c86
Author: Jason Wilkins
Date:   Wed Jul 9 18:13:49 2014 -0500
https://developer.blender.org/rB85fdb5adefd9560885ae66b91687c44e644f6c86

some readability edits for ghost context classes
also added code to clear screen immediately after context creation, similar to how it is done for glX

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

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_ContextWGL.cpp
M	intern/ghost/intern/GHOST_ContextWGL.h
M	intern/ghost/intern/GHOST_WindowCocoa.mm
M	intern/ghost/intern/GHOST_WindowWin32.cpp

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

diff --git a/intern/ghost/intern/GHOST_Context.h b/intern/ghost/intern/GHOST_Context.h
index d545e11..37c202d 100644
--- a/intern/ghost/intern/GHOST_Context.h
+++ b/intern/ghost/intern/GHOST_Context.h
@@ -129,7 +129,7 @@ public:
 protected:
 	void initContextGLEW();
 
-	void activateGLEW() const {
+	inline void activateGLEW() const {
 		glewSetContext(m_glewContext);
 	}
 
diff --git a/intern/ghost/intern/GHOST_ContextCGL.h b/intern/ghost/intern/GHOST_ContextCGL.h
index 8da6fab..1ea9e28 100644
--- a/intern/ghost/intern/GHOST_ContextCGL.h
+++ b/intern/ghost/intern/GHOST_ContextCGL.h
@@ -15,7 +15,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * The Original Code is Copyright (C) 2013 Blender Foundation.
+ * The Original Code is Copyright (C) 2014 Blender Foundation.
  * All rights reserved.
  *
  * The Original Code is: all of this file.
@@ -30,17 +30,14 @@
  * Declaration of GHOST_ContextCGL class.
  */
 
-#ifndef __GHOST_CONTEXTCGL_H__
-#define __GHOST_CONTEXTCGL_H__
-
+#ifndef _GHOST_CONTEXTCGL_H_
+#define _GHOST_CONTEXTCGL_H_
 
 #include "GHOST_Context.h"
 
-
-
- at class NSWindow;
- at class NSOpenGLView;
- at class NSOpenGLContext;
+//#define cglewGetContext() cglewContext
+//#include <GL/cglew.h>
+//extern "C" CGLEWContext* cglewContext;
 
 
 
@@ -54,6 +51,12 @@
 
 
 
+ at class NSWindow;
+ at class NSOpenGLView;
+ at class NSOpenGLContext;
+
+
+
 class GHOST_ContextCGL : public GHOST_Context
 {
 public:
@@ -97,15 +100,8 @@ public:
 	virtual GHOST_TSuccess initializeDrawingContext();
 
 	/**
-	 * Updates the drawing context of this window. Needed
-	 * whenever the window is changed.
-	 * \return Indication of success.
-	 */
-	virtual GHOST_TSuccess updateDrawingContext();
-
-	/**
-	 * Checks if it is OK for a remove the native display
-	 * \return Indication as to whether removal has succeeded.
+	 * Removes references to native handles from this context and then returns
+	 * \return GHOST_kSuccess if it is OK for the parent to release the handles and GHOST_kFailure if releasing the handles will interfere with sharing
 	 */
 	virtual GHOST_TSuccess releaseNativeHandles();
 
@@ -123,7 +119,20 @@ public:
 	 */
 	virtual GHOST_TSuccess getSwapInterval(int&);
 
+	/**
+	 * Updates the drawing context of this window.
+	 * Needed whenever the window is changed.
+	 * \return Indication of success.
+	 */
+	virtual GHOST_TSuccess updateDrawingContext();
+
+//protected:
+//	inline void activateCGLEW() const {
+//		cglewContext = m_cglewContext;
+//	}
+
 private:
+	//void initContextCGLEW()
 
 	/** The window containing the OpenGL view */
 	NSWindow *m_window;
@@ -131,21 +140,22 @@ private:
 	/** The openGL view */
 	NSOpenGLView *m_openGLView; 
 
-	int m_contextProfileMask;
-	int m_contextMajorVersion;
-	int m_contextMinorVersion;
-	int m_contextFlags;
-	int m_contextResetNotificationStrategy;
+	const int m_contextProfileMask;
+	const int m_contextMajorVersion;
+	const int m_contextMinorVersion;
+	const int m_contextFlags;
+	const int m_contextResetNotificationStrategy;
 
 	/** The opgnGL drawing context */
 	NSOpenGLContext *m_openGLContext;
 	
+	//static CGLEWContext* s_cglewContext;
+
 	/** The first created OpenGL context (for sharing display lists) */
 	static NSOpenGLContext *s_sharedOpenGLContext;	
 	static int              s_sharedCount;
-
 };
 
 
 
-#endif // __GHOST_CONTEXTCGL_H__
+#endif // _GHOST_CONTEXTCGL_H_
diff --git a/intern/ghost/intern/GHOST_ContextCGL.mm b/intern/ghost/intern/GHOST_ContextCGL.mm
index 12837a6..abec628 100644
--- a/intern/ghost/intern/GHOST_ContextCGL.mm
+++ b/intern/ghost/intern/GHOST_ContextCGL.mm
@@ -132,11 +132,15 @@ GHOST_TSuccess GHOST_ContextCGL::getSwapInterval(int& intervalOut)
 {
 	if (m_openGLContext != nil) {
 		GLint interval;
+
 		NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
 		[m_openGLContext setValues:&interval forParameter:NSOpenGLCPSwapInterval];
+
 		[pool drain];
 
-		intervalOut = (int)interval;
+		intervalOut = static_cast<int>(interval);
+
 		return GHOST_kSuccess;
 	}
 	else {
@@ -335,6 +339,10 @@ GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext()
 
 	initContextGLEW();
 
+	glClearColor(0.447, 0.447, 0.447, 0.000);
+	glClear(GL_COLOR_BUFFER_BIT);
+	glClearColor(0.000, 0.000, 0.000, 0.000);
+
 	[pool drain];
 
 	return GHOST_kSuccess;
diff --git a/intern/ghost/intern/GHOST_ContextEGL.cpp b/intern/ghost/intern/GHOST_ContextEGL.cpp
index 6ddbfc5..2d17d84 100644
--- a/intern/ghost/intern/GHOST_ContextEGL.cpp
+++ b/intern/ghost/intern/GHOST_ContextEGL.cpp
@@ -208,13 +208,13 @@ HMODULE GHOST_ContextEGL::s_d3dcompiler = NULL;
 
 
 
-EGLContext GHOST_ContextEGL::s_gl_sharedContext   = NULL;
+EGLContext GHOST_ContextEGL::s_gl_sharedContext   = EGL_NO_CONTEXT;
 EGLint     GHOST_ContextEGL::s_gl_sharedCount     = 0;
 
-EGLContext GHOST_ContextEGL::s_gles_sharedContext = NULL;
+EGLContext GHOST_ContextEGL::s_gles_sharedContext = EGL_NO_CONTEXT;
 EGLint     GHOST_ContextEGL::s_gles_sharedCount   = 0;
 
-EGLContext GHOST_ContextEGL::s_vg_sharedContext   = NULL;
+EGLContext GHOST_ContextEGL::s_vg_sharedContext   = EGL_NO_CONTEXT;
 EGLint     GHOST_ContextEGL::s_vg_sharedCount     = 0;
 
 
@@ -242,22 +242,22 @@ GHOST_ContextEGL::GHOST_ContextEGL(
 	GHOST_TUns16         numOfAASamples,
 	EGLNativeWindowType  nativeWindow,
 	EGLNativeDisplayType nativeDisplay,
-	EGLenum              api,
 	EGLint               contextProfileMask,
 	EGLint               contextMajorVersion,
 	EGLint               contextMinorVersion,
 	EGLint               contextFlags,
-	EGLint               contextResetNotificationStrategy
+	EGLint               contextResetNotificationStrategy,
+	EGLenum              api
 )
 	: GHOST_Context(stereoVisual, numOfAASamples)
 	, m_nativeWindow (nativeWindow)
 	, m_nativeDisplay(nativeDisplay)
-	, m_api(api)
 	, m_contextProfileMask              (contextProfileMask)
 	, m_contextMajorVersion             (contextMajorVersion)
 	, m_contextMinorVersion             (contextMinorVersion)
 	, m_contextFlags                    (contextFlags)
 	, m_contextResetNotificationStrategy(contextResetNotificationStrategy)
+	, m_api(api)
 	, m_swap_interval(1)
 	, m_display(EGL_NO_DISPLAY)
 	, m_surface(EGL_NO_SURFACE)
@@ -334,7 +334,8 @@ GHOST_TSuccess GHOST_ContextEGL::setSwapInterval(int interval)
 
 GHOST_TSuccess GHOST_ContextEGL::getSwapInterval(int& intervalOut)
 {
-	intervalOut = m_swap_interval;
+	intervalOut = m_swap_interval; // XXX jwilkins: make sure there is no way to query this?
+
 	return GHOST_kSuccess;
 }
 
@@ -357,7 +358,7 @@ GHOST_TSuccess GHOST_ContextEGL::activateDrawingContext()
 
 
 
-void GHOST_ContextEGL::initContextEGLEW(EGLDisplay display)
+void GHOST_ContextEGL::initContextEGLEW()
 {
 	eglewContext = new EGLEWContext;
 	memset(eglewContext, 0, sizeof(EGLEWContext));
@@ -365,7 +366,7 @@ void GHOST_ContextEGL::initContextEGLEW(EGLDisplay display)
 	delete m_eglewContext;
 	m_eglewContext = eglewContext;
 
-	GLEW_CHK(eglewInit(display));
+	GLEW_CHK(eglewInit(m_display));
 }
 
 
@@ -435,7 +436,7 @@ GHOST_TSuccess GHOST_ContextEGL::initializeDrawingContext()
 	if (!EGL_CHK(::eglMakeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT)))
 		goto error;
 
-	initContextEGLEW(m_display);
+	initContextEGLEW();
 
 	if (!bindAPI(m_api))
 		goto error;
@@ -632,6 +633,10 @@ GHOST_TSuccess GHOST_ContextEGL::initializeDrawingContext()
 
 	initContextGLEW();
 
+	glClearColor(0.447, 0.447, 0.447, 0.000);
+	glClear(GL_COLOR_BUFFER_BIT);
+	glClearColor(0.000, 0.000, 0.000, 0.000);
+
 	return GHOST_kSuccess;
 
 error:
diff --git a/intern/ghost/intern/GHOST_ContextEGL.h b/intern/ghost/intern/GHOST_ContextEGL.h
index 9d72f96..59681cd 100644
--- a/intern/ghost/intern/GHOST_ContextEGL.h
+++ b/intern/ghost/intern/GHOST_ContextEGL.h
@@ -30,8 +30,8 @@
  * Declaration of GHOST_ContextEGL class.
  */
 
-#ifndef __GHOST_CONTEXTEGL_H__
-#define __GHOST_CONTEXTEGL_H__
+#ifndef _GHOST_CONTEXTEGL_H_
+#define _GHOST_CONTEXTEGL_H_
 
 #include "GHOST_Context.h"
 
@@ -62,12 +62,12 @@ public:
 		GHOST_TUns16         numOfAASamples,
 		EGLNativeWindowType  nativeWindow,
 		EGLNativeDisplayType nativeDisplay,
-		EGLenum              api,
 		EGLint               contextProfileMask,
 		EGLint               contextMajorVersion,
 		EGLint               contextMinorVersion,
 		EGLint               contextFlags,
-		EGLint               contextResetNotificationStrategy
+		EGLint               contextResetNotificationStrategy,
+		EGLenum              api
 	);
 
 	/**
@@ -88,18 +88,14 @@ public:
 	virtual GHOST_TSuccess activateDrawingContext();
 
 	/**
-	 * Tries to install a rendering context in this window.
-	 * \param stereoVisual		Stereo visual for quad buffered stereo.
-	 * \param numOfAASamples	Number of samples used for AA (zero if no AA)
-	 * \return Indication as to whether installation has succeeded.
+	 * Call immediately after new to initialize.  If this fails then immediately delete the object.
+	 * \return Indication as to whether initialization has succeeded.
 	 */
 	virtual GHOST_TSuccess initializeDrawingContext();
 
 	/**
 	 * Removes references to native handles from this context and then returns
-	 * GHOST_kSuccess if it is OK for the parent to release the handles
-	 * and GHOST_kFailure if releasing the handles will interfere with sharing
-	 * \return Indication as to whether removal has succeeded.
+	 * \return GHOST_kSuccess if it is OK for the parent to release the handles and GHOST_kFailure if releasing the handles will interfere with sharing
 	 */
 	virtual GHOST_TSuccess releaseNativeHandles();
 
@@ -115,37 +111,38 @@ public:
 	 * \param intervalOut Variable to store the swap interval if it can be read.
 	 * \return Whether the swap interval can be read.
 	 */
-	GHOST_TSuccess getSwapInterval(int& intervalOut)
+	GHOST_TSuccess getSwapInterval(int& intervalOut);
 
 protected:
-	void activateEGLEW() const {
+	inline void activateEGLEW() const {
 		eglewContext = m_eglewContext;
 	}
 
 private:
-	void initContextEGLEW(EGLDisplay display);
+	void initContextEGLEW();
 
 	EGLNativeDisplayType m_nativeDisplay;
 	EGLNativeWindowType  m_nativeWindow;
 
-	const EGLenum m_api;
-	const EGL

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list