1from pyglet.libs.egl import egl as libegl 2from pyglet.libs.egl.egl import * 3 4 5_buffer_types = {EGL_SINGLE_BUFFER: "EGL_RENDER_BUFFER", 6 EGL_BACK_BUFFER: "EGL_BACK_BUFFER", 7 EGL_NONE: "EGL_NONE"} 8 9_api_types = {EGL_OPENGL_API: "EGL_OPENGL_API", 10 EGL_OPENGL_ES_API: "EGL_OPENGL_ES_API", 11 EGL_NONE: "EGL_NONE"} 12 13# Initialize a display: 14display = libegl.EGLNativeDisplayType() 15display_connection = libegl.eglGetDisplay(display) 16 17majorver = libegl.EGLint() 18minorver = libegl.EGLint() 19result = libegl.eglInitialize(display_connection, majorver, minorver) 20assert result == 1, "EGL Initialization Failed" 21egl_version = majorver.value, minorver.value 22print(f"EGL version: {egl_version}") 23 24# Get the number of configs: 25num_configs = libegl.EGLint() 26config_size = libegl.EGLint() 27result = libegl.eglGetConfigs(display_connection, None, config_size, num_configs) 28assert result == 1, "Failed to query Configs" 29 30print("Number of configs available: ", num_configs.value) 31 32# Choose a config: 33config_attribs = (EGL_SURFACE_TYPE, EGL_PBUFFER_BIT, 34 EGL_BLUE_SIZE, 8, 35 EGL_GREEN_SIZE, 8, 36 EGL_RED_SIZE, 8, 37 EGL_DEPTH_SIZE, 8, 38 EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT, 39 EGL_NONE) 40config_attrib_array = (libegl.EGLint * len(config_attribs))(*config_attribs) 41egl_config = libegl.EGLConfig() 42result = libegl.eglChooseConfig(display_connection, config_attrib_array, egl_config, 1, num_configs) 43assert result == 1, "Failed to choose Config" 44 45# Create a surface: 46pbufferwidth = 1 47pbufferheight = 1 48pbuffer_attribs = (EGL_WIDTH, pbufferwidth, EGL_HEIGHT, pbufferheight, EGL_NONE) 49pbuffer_attrib_array = (libegl.EGLint * len(pbuffer_attribs))(*pbuffer_attribs) 50surface = libegl.eglCreatePbufferSurface(display_connection, egl_config, pbuffer_attrib_array) 51print("Surface: ", surface) 52 53# Bind the API: 54result = libegl.eglBindAPI(libegl.EGL_OPENGL_API) 55assert result == 1, "Failed to bind EGL_OPENGL_API" 56 57# Create a context: 58context_attribs = (EGL_CONTEXT_MAJOR_VERSION, 2, EGL_NONE) 59context_attrib_array = (libegl.EGLint * len(context_attribs))(*context_attribs) 60context = libegl.eglCreateContext(display_connection, egl_config, None, context_attrib_array) 61print("Context: ", context) 62 63# Make context current: 64result = libegl.eglMakeCurrent(display_connection, surface, surface, context) 65assert result == 1, "Failed to make context current" 66 67error_code = libegl.eglGetError() 68assert error_code == EGL_SUCCESS, "EGL Error code {} returned".format(error_code) 69 70# Print some context details: 71buffer_type = libegl.EGLint() 72libegl.eglQueryContext(display_connection, context, EGL_RENDER_BUFFER, buffer_type) 73print("Buffer type: ", _buffer_types.get(buffer_type.value, "Unknown")) 74print("API type: ", _api_types.get(libegl.eglQueryAPI(), "Unknown")) 75 76# Terminate EGL: 77libegl.eglTerminate(display_connection) 78