initial work on OpenGL

This commit is contained in:
Skyler Lehmkuhl 2012-03-06 11:13:01 -05:00
parent 3ff0c79189
commit a30d6e1170
1 changed files with 113 additions and 87 deletions

View File

@ -40,6 +40,9 @@ FRAMERATE=50
#Width and height are the width and height of the document #Width and height are the width and height of the document
WIDTH, HEIGHT = 500, 500 WIDTH, HEIGHT = 500, 500
#Whether we are using OpenGL for rendering.
USING_GL = True
#Object which has the keyboard focus. #Object which has the keyboard focus.
FOCUS = None FOCUS = None
@ -166,6 +169,9 @@ if sys.platform=="linux2":
from GUI.StdMenus import basic_menus, file_cmds, print_cmds from GUI.StdMenus import basic_menus, file_cmds, print_cmds
from GUI.StdButtons import DefaultButton, CancelButton from GUI.StdButtons import DefaultButton, CancelButton
from GUI.Files import FileType from GUI.Files import FileType
if USING_GL:
from OpenGL.GL import *
from GUI import GL
from GUI.Geometry import offset_rect, rect_sized from GUI.Geometry import offset_rect, rect_sized
#If we can import this, we are in the install directory. Mangle media paths accordingly. #If we can import this, we are in the install directory. Mangle media paths accordingly.
@ -789,6 +795,23 @@ class Canvas(Widget):
self.canvas.connect("button-release-event", onMouseUp) self.canvas.connect("button-release-event", onMouseUp)
self.canvas.connect("motion_notify_event", onMouseMove) self.canvas.connect("motion_notify_event", onMouseMove)
elif SYSTEM=="osx": elif SYSTEM=="osx":
if USING_GL:
class OSXCanvas(GL.GLView):
def init_context(self):
glViewport(0, 0, width, height);
def init_projection(self):
glEnable( GL_TEXTURE_2D );
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
def render(self):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluOrtho2D(0, width, 0, height); #TODO: width, height
glMatrixMode(GL_MODELVIEW);
for i in self.objs:
i.draw(None)
self.canvas = OSXCanvas(double_buffer=True,multisample=True,samples_per_pixel=8)
else:
class OSXCanvas (ScrollableView): class OSXCanvas (ScrollableView):
def draw(self, canvas, update_rect): def draw(self, canvas, update_rect):
canvas.erase_rect(update_rect) canvas.erase_rect(update_rect)
@ -1161,6 +1184,9 @@ class Shape (object):
tb+="cr.stroke()\n" tb+="cr.stroke()\n"
tb+="cr.restore()\n" tb+="cr.restore()\n"
elif SYSTEM=="osx": elif SYSTEM=="osx":
if USING_GL:
pass
else:
cr.gsave() cr.gsave()
if sep=="\\": if sep=="\\":
# Very ugly hack for Windows. :( # Very ugly hack for Windows. :(