Spaces:
Runtime error
Runtime error
import pyglet | |
import warnings | |
from .base import Display, Screen, ScreenMode, Canvas | |
from ctypes import * | |
from pyglet.libs.egl import egl | |
from pyglet.libs.egl import eglext | |
class HeadlessDisplay(Display): | |
def __init__(self): | |
super().__init__() | |
# TODO: fix this placeholder: | |
self._screens = [HeadlessScreen(self, 0, 0, 1920, 1080)] | |
num_devices = egl.EGLint() | |
eglext.eglQueryDevicesEXT(0, None, byref(num_devices)) | |
if num_devices.value > 0: | |
headless_device = pyglet.options['headless_device'] | |
if headless_device < 0 or headless_device >= num_devices.value: | |
raise ValueError(f'Invalid EGL devide id: {headless_device}') | |
devices = (eglext.EGLDeviceEXT * num_devices.value)() | |
eglext.eglQueryDevicesEXT(num_devices.value, devices, byref(num_devices)) | |
self._display_connection = eglext.eglGetPlatformDisplayEXT( | |
eglext.EGL_PLATFORM_DEVICE_EXT, devices[headless_device], None) | |
else: | |
warnings.warn('No device available for EGL device platform. Using native display type.') | |
display = egl.EGLNativeDisplayType() | |
self._display_connection = egl.eglGetDisplay(display) | |
egl.eglInitialize(self._display_connection, None, None) | |
def get_screens(self): | |
return self._screens | |
def __del__(self): | |
egl.eglTerminate(self._display_connection) | |
class HeadlessCanvas(Canvas): | |
def __init__(self, display, egl_surface): | |
super().__init__(display) | |
self.egl_surface = egl_surface | |
class HeadlessScreen(Screen): | |
def __init__(self, display, x, y, width, height): | |
super().__init__(display, x, y, width, height) | |
def get_matching_configs(self, template): | |
canvas = HeadlessCanvas(self.display, None) | |
configs = template.match(canvas) | |
# XXX deprecate | |
for config in configs: | |
config.screen = self | |
return configs | |
def get_modes(self): | |
pass | |
def get_mode(self): | |
pass | |
def set_mode(self, mode): | |
pass | |
def restore_mode(self): | |
pass | |