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
|
"""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
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' ))
glutPassiveMotionFunc( printFunction( 'PassiveMotion' ))
glutVisibilityFunc( printFunction( 'Visibility' ))
glutWindowStatusFunc( printFunction( 'WindowStatus' ))
glutSpecialFunc( printFunction( 'Special' ))
glutSpecialUpFunc( printFunction( 'SpecialUp' ))
glutMainLoop()
|