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
|
"""Test simple functions (i.e. no pointers involved)"""
from __future__ import print_function
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
from OpenGL._bytes import as_8_bit
import time
start = time.time()
window = None
def drawText( value, x,y, windowHeight, windowWidth, step = 18 ):
"""Draw the given text at given 2D position in window
"""
glMatrixMode(GL_PROJECTION);
# For some reason the GL_PROJECTION_MATRIX is overflowing with a single push!
# glPushMatrix()
matrix = glGetDouble( GL_PROJECTION_MATRIX )
glLoadIdentity();
glOrtho(0.0, windowHeight or 32, 0.0, windowWidth or 32, -1.0, 1.0)
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glRasterPos2i(x, y);
lines = 0
for character in value:
if character == '\n':
glRasterPos2i(x, y-(lines*18))
else:
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, ord(character));
glPopMatrix();
glMatrixMode(GL_PROJECTION);
# For some reason the GL_PROJECTION_MATRIX is overflowing with a single push!
# glPopMatrix();
glLoadMatrixd( matrix ) # should have un-decorated alias for this...
glMatrixMode(GL_MODELVIEW);
def display():
glutSetWindow(window);
glClearColor (0.0, 0.0, (time.time()%1.0)/1.0, 0.0)
glClear (GL_COLOR_BUFFER_BIT)
drawText( 'hello', 20,20, size[0],size[1] )
#glutBitmapCharacter( GLUT_BITMAP_8_BY_13, ord('a'))
glutSolidTeapot( .2 )
glFlush ()
glutSwapBuffers()
size = (250,250)
def reshape( *args ):
global size
size = args
glViewport( *( (0,0)+args) )
display()
def ontimer( *args ):
print(('timer', args, '@time', time.time()-start))
glutTimerFunc( 1000, ontimer, 24 )
def idle():
delta = time.time()-start
if delta < 10:
global size
x,y = size
if delta < 5:
change = +1
else:
change = -1
x = x-change
y = y+change
if x < 1:
x = 1
if y < 1:
y = 1
glutReshapeWindow( x, y )
size = (x,y)
glutSetWindow(window)
glutPostRedisplay()
else:
glutDestroyWindow( window )
print('window destroyed')
try:
if fgDeinitialize: fgDeinitialize(False)
except NameError:
pass # Older PyOpenGL, you may see a seg-fault here...
import sys
sys.exit( 0 )
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)
print(('newArguments', newArgv))
glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB )
glutInitWindowSize(250, 250)
glutInitWindowPosition(100, 100)
window = glutCreateWindow(as_8_bit("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' ))
glutTimerFunc( 1000, ontimer, 23 )
glutIdleFunc( idle )
glutMainLoop()
|