vumichien's picture
First commit
b4c8bc3
raw history blame
No virus
3.33 kB
from pyrender.constants import (TARGET_OPEN_GL_MAJOR, TARGET_OPEN_GL_MINOR,
MIN_OPEN_GL_MAJOR, MIN_OPEN_GL_MINOR)
from .base import Platform
import OpenGL
__all__ = ['PygletPlatform']
class PygletPlatform(Platform):
"""Renders on-screen using a 1x1 hidden Pyglet window for getting
an OpenGL context.
"""
def __init__(self, viewport_width, viewport_height):
super(PygletPlatform, self).__init__(viewport_width, viewport_height)
self._window = None
def init_context(self):
import pyglet
pyglet.options['shadow_window'] = False
try:
pyglet.lib.x11.xlib.XInitThreads()
except Exception:
pass
self._window = None
confs = [pyglet.gl.Config(sample_buffers=1, samples=4,
depth_size=24,
double_buffer=True,
major_version=TARGET_OPEN_GL_MAJOR,
minor_version=TARGET_OPEN_GL_MINOR),
pyglet.gl.Config(depth_size=24,
double_buffer=True,
major_version=TARGET_OPEN_GL_MAJOR,
minor_version=TARGET_OPEN_GL_MINOR),
pyglet.gl.Config(sample_buffers=1, samples=4,
depth_size=24,
double_buffer=True,
major_version=MIN_OPEN_GL_MAJOR,
minor_version=MIN_OPEN_GL_MINOR),
pyglet.gl.Config(depth_size=24,
double_buffer=True,
major_version=MIN_OPEN_GL_MAJOR,
minor_version=MIN_OPEN_GL_MINOR)]
for conf in confs:
try:
self._window = pyglet.window.Window(config=conf, visible=False,
resizable=False,
width=1, height=1)
break
except pyglet.window.NoSuchConfigException as e:
pass
if not self._window:
raise ValueError(
'Failed to initialize Pyglet window with an OpenGL >= 3+ '
'context. If you\'re logged in via SSH, ensure that you\'re '
'running your script with vglrun (i.e. VirtualGL). The '
'internal error message was "{}"'.format(e)
)
def make_current(self):
if self._window:
self._window.switch_to()
def make_uncurrent(self):
try:
import pyglet
pyglet.gl.xlib.glx.glXMakeContextCurrent(self._window.context.x_display, 0, 0, None)
except Exception:
pass
def delete_context(self):
if self._window is not None:
self.make_current()
cid = OpenGL.contextdata.getContext()
try:
self._window.context.destroy()
self._window.close()
except Exception:
pass
self._window = None
OpenGL.contextdata.cleanupContext(cid)
del cid
def supports_framebuffers(self):
return True