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()
|