Difficult-Rocket/libs/pyglet/info.py
2023-01-25 20:38:17 +08:00

204 lines
5.9 KiB
Python

"""Get environment information useful for debugging.
Intended usage is to create a file for bug reports, e.g.::
python -m pyglet.info > info.txt
"""
_first_heading = True
def _heading(heading):
global _first_heading
if not _first_heading:
print()
else:
_first_heading = False
print(heading)
print('-' * 78)
def dump_platform():
"""Dump OS specific """
import platform
print('platform: ', platform.platform())
print('release: ', platform.release())
print('machine: ', platform.machine())
def dump_python():
"""Dump Python version and environment to stdout."""
import os
import sys
import platform
print('implementation:', platform.python_implementation())
print('sys.version:', sys.version)
print('sys.maxint:', sys.maxsize)
if sys.platform == 'darwin':
try:
from objc import __version__ as pyobjc_version
print('objc.__version__:', pyobjc_version)
except:
print('PyObjC not available')
print('os.getcwd():', os.getcwd())
for key, value in os.environ.items():
if key.startswith('PYGLET_'):
print(f"os.environ['{key}']: {value}")
def dump_pyglet():
"""Dump pyglet version and options."""
import pyglet
print('pyglet.version:', pyglet.version)
print('pyglet.compat_platform:', pyglet.compat_platform)
print('pyglet.__file__:', pyglet.__file__)
for key, value in pyglet.options.items():
print(f"pyglet.options['{key}'] = {value!r}")
def dump_window():
"""Dump display, window, screen and default config info."""
from pyglet.gl import gl_info
if not gl_info.have_version(3):
print(f"Insufficient OpenGL version: {gl_info.get_version_string()}")
return
import pyglet.window
display = pyglet.canvas.get_display()
print('display:', repr(display))
screens = display.get_screens()
for i, screen in enumerate(screens):
print(f'screens[{i}]: {screen!r}')
window = pyglet.window.Window(visible=False)
for key, value in window.config.get_gl_attributes():
print(f"config['{key}'] = {value!r}")
print('context:', repr(window.context))
_heading('window.context._info')
dump_gl(window.context)
window.close()
def dump_gl(context=None):
"""Dump GL info."""
if context is not None:
info = context.get_info()
else:
from pyglet.gl import gl_info as info
print('gl_info.get_version():', info.get_version())
print('gl_info.get_vendor():', info.get_vendor())
print('gl_info.get_renderer():', info.get_renderer())
print('gl_info.get_extensions():')
extensions = list(info.get_extensions())
extensions.sort()
for name in extensions:
print(' ', name)
def dump_glx():
"""Dump GLX info."""
try:
from pyglet.gl import glx_info
except:
print('GLX not available.')
return
import pyglet
window = pyglet.window.Window(visible=False)
print('context.is_direct():', window.context.is_direct())
window.close()
if not glx_info.have_version(1, 1):
print('Version: < 1.1')
else:
print('glx_info.get_server_vendor():', glx_info.get_server_vendor())
print('glx_info.get_server_version():', glx_info.get_server_version())
print('glx_info.get_server_extensions():')
for name in glx_info.get_server_extensions():
print(' ', name)
print('glx_info.get_client_vendor():', glx_info.get_client_vendor())
print('glx_info.get_client_version():', glx_info.get_client_version())
print('glx_info.get_client_extensions():')
for name in glx_info.get_client_extensions():
print(' ', name)
print('glx_info.get_extensions():')
for name in glx_info.get_extensions():
print(' ', name)
def dump_media():
"""Dump pyglet.media info."""
import pyglet.media
print('audio driver:', pyglet.media.get_audio_driver())
def dump_ffmpeg():
"""Dump FFmpeg info."""
import pyglet
pyglet.options['search_local_libs'] = True
import pyglet.media
if pyglet.media.have_ffmpeg():
from pyglet.media.codecs.ffmpeg import get_version
print('FFmpeg version:', get_version())
else:
print('FFmpeg not available.')
def dump_al():
"""Dump OpenAL info."""
try:
from pyglet.media.drivers import openal
except:
print('OpenAL not available.')
return
print('Library:', openal.lib_openal._lib)
driver = openal.create_audio_driver()
print('Version: {}.{}'.format(*driver.get_version()))
print('Extensions:')
for extension in driver.get_extensions():
print(' ', extension)
def dump_wintab():
"""Dump WinTab info."""
try:
from pyglet.input.win32 import wintab
except:
print('WinTab not available.')
return
interface_name = wintab.get_interface_name()
impl_version = wintab.get_implementation_version()
spec_version = wintab.get_spec_version()
print('WinTab: {0} {1}.{2} (Spec {3}.{4})'.format(interface_name,
impl_version >> 8, impl_version & 0xff,
spec_version >> 8, spec_version & 0xff))
def _try_dump(heading, func):
_heading(heading)
try:
func()
except:
import traceback
traceback.print_exc()
def dump():
"""Dump all information to stdout."""
_try_dump('Platform', dump_platform)
_try_dump('Python', dump_python)
_try_dump('pyglet', dump_pyglet)
_try_dump('pyglet.window', dump_window)
_try_dump('pyglet.gl.glx_info', dump_glx)
_try_dump('pyglet.media', dump_media)
_try_dump('pyglet.media.ffmpeg', dump_ffmpeg)
_try_dump('pyglet.media.drivers.openal', dump_al)
_try_dump('pyglet.input.wintab', dump_wintab)
if __name__ == '__main__':
dump()