File: __init__.py

package info (click to toggle)
pyopengl 3.1.10%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 15,024 kB
  • sloc: python: 108,056; sh: 13; makefile: 8
file content (116 lines) | stat: -rw-r--r-- 3,522 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
"""Abstraction for the platform-specific code in PyOpenGL

Each supported platform has a module which provides the
specific functionality required to support the base OpenGL 
functionality on that platform.  These modules are 
registered using plugins in the:

    OpenGL.plugin.PlatformPlugin

objects.  To support a new platform you'll need to create
a new PlatformPlugin instance *before* you import 
OpenGL.platform .  Once you have a working platform 
module, please consider contributing it back to the project.

See baseplatform.BasePlatform for the core functionality 
of a platform implementation.  See the various platform 
specific modules for examples to use when porting.
"""

import os, sys
from OpenGL.plugins import PlatformPlugin
from OpenGL import _configflags

XDG = 'XDG_SESSION_TYPE'
WAYLAND_DISPLAY = 'WAYLAND_DISPLAY'

PLATFORM = None
nullFunction = None


def _load():
    """Load the os.name plugin for the platform functionality"""
    # Linux override keys...
    guessing_key = None
    if sys.platform in ('linux', 'linux2') and 'PYOPENGL_PLATFORM' not in os.environ:
        if 'WAYLAND_DISPLAY' in os.environ:
            guessing_key = 'wayland'
        elif 'DISPLAY' in os.environ:
            guessing_key = 'linux'

    key = (
        os.environ.get('PYOPENGL_PLATFORM'),
        os.environ.get('XDG_SESSION_TYPE', '').lower(),
        guessing_key,
        sys.platform,
        os.name,
    )
    plugin = PlatformPlugin.match(key)
    plugin_class = plugin.load()
    plugin.loaded = True
    # create instance of this platform implementation
    plugin = plugin_class()

    # install into the platform module's namespace now
    plugin.install(globals())
    return plugin


_load()


def types(resultType, *argTypes):
    """Decorator to add returnType, argTypes and argNames to a function"""

    def add_types(function):
        """Adds the given metadata to the function, introspects var names from declaration"""
        function.resultType = resultType
        function.argTypes = argTypes
        if hasattr(function, 'func_code'):  # python 2.x
            function.argNames = function.func_code.co_varnames
        else:
            function.argNames = function.__code__.co_varnames
        if _configflags.TYPE_ANNOTATIONS:
            function.__annotations__ = {
                'return': resultType,
            }
            for name, typ in zip(function.argNames, argTypes):
                function.__annotations__[name] = typ
        return function

    return add_types


def unpack_constants(constants, namespace):
    """Create constants and add to the namespace"""
    from OpenGL.constant import Constant

    for line in constants.splitlines():
        if line and line.split():
            name, value = line.split()
            namespace[name] = Constant(name, int(value, 16))


def createFunction(
    function,
    dll,
    extension,
    deprecated=False,
    error_checker=None,
    force_extension=False,
):
    """Allows the more compact declaration format to use the old-style constructor"""
    return nullFunction(
        function.__name__,
        dll or PLATFORM.GL,
        resultType=function.resultType,
        argTypes=function.argTypes,
        doc=None,
        argNames=function.argNames,
        extension=extension,
        deprecated=deprecated,
        module=function.__module__,
        error_checker=error_checker,
        force_extension=force_extension
        or getattr(function, 'force_extension', force_extension),
    )