File: test_gldouble_ctypes.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,005 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
"""Test simple functions (i.e. no pointers involved)"""

from __future__ import print_function

# import OpenGL
# OpenGL.USE_ACCELERATE = False
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
from OpenGL.GL import GLdouble
from OpenGL.arrays import arraydatatype

handler = arraydatatype.ArrayDatatype.getHandler(GLdouble * 16)
handler.registerReturn()
import time, traceback, os

start = time.time()
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)
        glMatrixMode(GL_PROJECTION)
        # For some reason the GL_PROJECTION_MATRIX is overflowing with a single push!
        # glPushMatrix()
        matrix = glGetDoublev(GL_PROJECTION_MATRIX)
        print('matrix', type(matrix), matrix[:][:])
        glutSwapBuffers()
    except Exception:
        traceback.print_exc()
        sys.exit(0)


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 < 2:
        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')
        sys.stdout.write('OK')
        sys.stdout.flush()
        try:
            if fgDeinitialize:
                fgDeinitialize(False)
        except NameError:
            pass  # Older PyOpenGL, you may see a seg-fault here...
        os._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("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()