Lightningbeam/PyGUI-2.5.3/Tests/90-glview.py

79 lines
2.1 KiB
Python

# This program is based on the color.c program written by Naofumi.
import os, sys
from GUI import Window, application
from GUI.GL import GLView, GLConfig
from OpenGL.GL import glClearColor, glClear, glBegin, glColor3f, glVertex2i, glEnd, \
GL_COLOR_BUFFER_BIT, GL_TRIANGLES
from TestInput import TestKeyEvents, TestMouseEvents
from testing import say
class TriangleView(TestKeyEvents, TestMouseEvents, GLView):
def init_context(self):
glClearColor(0.0, 0.0, 0.0, 0.0)
def render(self):
glClear(GL_COLOR_BUFFER_BIT)
glBegin(GL_TRIANGLES)
glColor3f(1.0, 0.0, 0.0)
glVertex2i(0, 1)
glColor3f(0.0, 1.0, 0.0)
glVertex2i(-1, -1)
glColor3f(0.0, 0.0, 1.0)
glVertex2i(1, -1)
glEnd()
def make_view(db, options):
pf = GLConfig(double_buffer = db)
pf.alpha = "a" in options
pf.depth_buffer = "d" in options
pf.stencil_buffer = "s" in options
pf.aux_buffers = "x" in options
pf.accum_buffer = "A" in options
view = TriangleView(pf, size = (200, 200))
win = Window(
title = "%s Buffered GLView" % ["Single", "Double"][db],
size = (240, 240))
win.place(view, left = 20, top = 20, sticky = "nsew")
view.become_target()
win.show()
def get_args():
args = sys.argv[1:]
if not 0 <= len(args) <= 2:
badusage()
if args:
sd = args[0][0]
else:
sd = "d"
if sd == "s":
db = False
elif sd == "d":
db = True
else:
badusage()
if len(args) > 1:
options = args[1]
else:
options = ""
return db, options
def badusage():
sys.stderr.write("Usage: python %s s[ingle]|d[ouble] [adsxA]\n" % os.path.basename(sys.argv[0]))
sys.exit(1)
instructions = """
There should be a window containing an OpenGL view, 20 pixels
from the edge of the window on all sides. There should be a
coloured triangle filling the view over a black background.
Mouse and keyboard events in the view should be reported.
The view and the triangle it contains should resize smoothly
with the window.
"""
make_view(*get_args())
say(instructions)
application().run()