79 lines
2.1 KiB
Python
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()
|