File: check_glut_debug.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 (139 lines) | stat: -rw-r--r-- 3,815 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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
"""Test GLUT forward-compatible mode..."""

from __future__ import print_function
import OpenGL

OpenGL.FORWARD_COMPATIBLE_ONLY = True
OpenGL.ERROR_CHECKING = True
# OpenGL.USE_ACCELERATE = False
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import time

start = time.time()

from OpenGL.GL.AMD.debug_output import glGetDebugMessageLogAMD
from OpenGL.GL.ARB.debug_output import glGetDebugMessageLogARB
from OpenGL.GL.KHR.debug import glGetDebugMessageLogKHR
from OpenGL.GL.VERSION.GL_4_3 import glGetDebugMessageLog

glGetDebugMessageLog = extensions.alternate(
    glGetDebugMessageLog,
    glGetDebugMessageLogARB,
    glGetDebugMessageLogKHR,
    glGetDebugMessageLogAMD,
)

window = None


def display():
    try:
        glutSetWindow(window)
        glClearColor(0.0, 0.0, (time.time() % 1.0) / 1.0, 0.0)
        glClear(GL_COLOR_BUFFER_BIT)
        try:
            glGetString(GL_EXTENSIONS)
        except GLError:
            pass
        else:
            print('Egads, glGetString should not have worked!')
        assert bool(glGenVertexArrays), "Should have vertex array support in 3.2"
        for message in get_debug_messages():
            print(message)
        glFlush()
        glutSwapBuffers()
    except Exception:
        glutDestroyWindow(window)
        raise


def get_debug_messages():
    messages = []
    count = glGetIntegerv(GL_DEBUG_LOGGED_MESSAGES)
    max_size = int(glGetIntegerv(GL_MAX_DEBUG_MESSAGE_LENGTH))
    source = GLenum()
    type = GLenum()
    id = GLenum()
    severity = GLenum()
    length = GLsizei()
    buffer = ctypes.create_string_buffer(max_size)
    for i in range(count):
        result = glGetDebugMessageLog(
            1, max_size, source, type, id, severity, length, buffer
        )
        if result:
            messages.append(
                {
                    'message': buffer[: length.value],
                    'type': type.value,
                    'id': id.value,
                    'severity': severity.value,
                    'source': source.value,
                }
            )
    return messages
    assert len(messages), messages


size = (250, 250)


def reshape(*args):
    global size
    size = args
    glViewport(*((0, 0) + args))
    display()


def printFunction(name):
    def onevent(*args):
        print('%s -> %s' % (name, ", ".join([str(a) for a in args])))

    return onevent


def idle(*args, **named):
    sys.stdout.write("OK\n")
    sys.stdout.flush()
    global window
    glutDestroyWindow(window)
    try:
        if fgDeinitialize:
            fgDeinitialize(False)
    except NameError:
        pass  # Older PyOpenGL, you may see a seg-fault here...

    os._exit(0)


if __name__ == "__main__":
    import sys

    newArgv = glutInit(sys.argv)
    glutInitContextVersion(3, 1)
    glutInitContextFlags(GLUT_FORWARD_COMPATIBLE | GLUT_DEBUG)
    glutInitContextProfile(GLUT_CORE_PROFILE)
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)

    glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS)
    glutInitWindowSize(250, 250)
    glutInitWindowPosition(100, 100)
    window = glutCreateWindow("hello")
    print('window', repr(window))
    glutDisplayFunc(display)
    glutReshapeFunc(reshape)
    glutMouseFunc(printFunction('Mouse'))
    glutEntryFunc(printFunction('Entry'))
    glutKeyboardFunc(printFunction('Keyboard'))
    glutKeyboardUpFunc(printFunction('KeyboardUp'))
    glutMotionFunc(printFunction('Motion'))
    glutIdleFunc(idle)
    glutPassiveMotionFunc(printFunction('PassiveMotion'))
    glutVisibilityFunc(printFunction('Visibility'))
    glutWindowStatusFunc(printFunction('WindowStatus'))
    glutSpecialFunc(printFunction('Special'))
    glutSpecialUpFunc(printFunction('SpecialUp'))

    glutMainLoop()