<filename>GUI/Generic/GGLContexts.py
#
#   PyGUI - OpenGL Contexts - Generic
#

from GUI.Properties import overridable_property
from GUI.GLShareGroups import ShareGroup

_current_share_group = None

class GLContext(object):
	"""Abstract base class for objects having an OpenGL context."""
	#
	#  _share_group  ShareGroup
	#
	
	share_group = overridable_property('share_group',
		"ShareGroup to which this context should belong, or None.")
	
	def __init__(self, share_group):
		if not share_group:
			share_group = ShareGroup()
		self._share_group = share_group
		if share_group:
			share_group._add(self)
	
	def destroy(self):
		pass
	
	def init_context(self):
		"""This method is called once after the associated OpenGL context
		is created. When called, this object's OpenGL context is the current
		context and the viewport is set to (0, 0, width, height). This method
		may be used to establish any desired initial OpenGL state."""
		pass
	
	def get_share_group(self):
		return self._share_group
	
	def _get_shared_context(self):
		"""Return another arbitrarily-chosen member of the share group of this
		context, or None if this context has no share group or there are no
		other members."""
		return self._share_group._some_member(exclude = self)
	
	def with_context(self, proc, flush = False):
		"""The proc should be a callable object of no arguments. Calls
		the proc with the associated OpenGL context as the current context.
		If flush is true, after calling proc, a glFlush followed by a
		buffer flush or swap is performed as appropriate."""
		self._with_context(proc, flush)

	def _with_context(self, proc, flush):
		#  Subclasses override this to implement with_context.
		#  Should call _with_share_group(proc).
		#  Signature can be changed if with_context is overridden to match.
		raise NotImplementedError
	
	def _with_share_group(self, proc):
		global _current_share_group
		old_share_group = _current_share_group
		_current_share_group = self._share_group
		try:
			proc()
		finally:
			_current_share_group = old_share_group


def current_share_group():
	group = _current_share_group
	if not group:
		raise ValueError("No current PyGUI OpenGL context")
	return group

<filename>GUI/Generic/GGLContexts.py
#
#   PyGUI - OpenGL Contexts - Generic
#

from GUI.Properties import overridable_property
from GUI.GLShareGroups import ShareGroup

_current_share_group = None

class GLContext(object):
	"""Abstract base class for objects having an OpenGL context."""
	#
	#  _share_group  ShareGroup
	#
	
	share_group = overridable_property('share_group',
		"ShareGroup to which this context should belong, or None.")
	
	def __init__(self, share_group):
		if not share_group:
			share_group = ShareGroup()
		self._share_group = share_group
		if share_group:
			share_group._add(self)
	
	def destroy(self):
		pass
	
	def init_context(self):
		"""This method is called once after the associated OpenGL context
		is created. When called, this object's OpenGL context is the current
		context and the viewport is set to (0, 0, width, height). This method
		may be used to establish any desired initial OpenGL state."""
		pass
	
	def get_share_group(self):
		return self._share_group
	
	def _get_shared_context(self):
		"""Return another arbitrarily-chosen member of the share group of this
		context, or None if this context has no share group or there are no
		other members."""
		return self._share_group._some_member(exclude = self)
	
	def with_context(self, proc, flush = False):
		"""The proc should be a callable object of no arguments. Calls
		the proc with the associated OpenGL context as the current context.
		If flush is true, after calling proc, a glFlush followed by a
		buffer flush or swap is performed as appropriate."""
		self._with_context(proc, flush)

	def _with_context(self, proc, flush):
		#  Subclasses override this to implement with_context.
		#  Should call _with_share_group(proc).
		#  Signature can be changed if with_context is overridden to match.
		raise NotImplementedError
	
	def _with_share_group(self, proc):
		global _current_share_group
		old_share_group = _current_share_group
		_current_share_group = self._share_group
		try:
			proc()
		finally:
			_current_share_group = old_share_group


def current_share_group():
	group = _current_share_group
	if not group:
		raise ValueError("No current PyGUI OpenGL context")
	return group

# #   PyGUI - OpenGL Contexts - Generic # Abstract base class for objects having an OpenGL context. # #  _share_group  ShareGroup # This method is called once after the associated OpenGL context 		is created. When called, this object's OpenGL context is the current 		context and the viewport is set to (0, 0, width, height). This method 		may be used to establish any desired initial OpenGL state. Return another arbitrarily-chosen member of the share group of this 		context, or None if this context has no share group or there are no 		other members. The proc should be a callable object of no arguments. Calls 		the proc with the associated OpenGL context as the current context. 		If flush is true, after calling proc, a glFlush followed by a 		buffer flush or swap is performed as appropriate. #  Subclasses override this to implement with_context. #  Should call _with_share_group(proc). #  Signature can be changed if with_context is overridden to match.