All pastes #560231 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-06-12 01:18 UTC
rendered paste body
diff --git a/fragment.py b/fragment.py
index cd0fead..0b90d73 100644
--- a/fragment.py
+++ b/fragment.py
@@ -29,7 +29,7 @@ try:
 except ImportError:
     gl = cdll.LoadLibrary('libGL.so')
 
-GL_FRAGMENT_SHADER_ARB = 0x8B30
+GL_FRAGMENT_PROGRAM_ARB = 0x8804
 GL_PROGRAM_ERROR_STRING_ARB = 0x8874
 GL_PROGRAM_FORMAT_ASCII_ARB = 0x8875
 
@@ -37,14 +37,18 @@ GLint = c_int
 GLuint = c_uint
 
 glGenProgramsARB = gl.glGenProgramsARB
-glGenProgramsARB.argtypes = [GLuint, POINTER (GLuint)]
-glBindProgramARB = gl.glGenProgramsARB
+glGenProgramsARB.argtypes = [GLuint, GLuint]
+glBindProgramARB = gl.glBindProgramARB
 glBindProgramARB.argtypes = [GLuint, GLuint]
 glProgramStringARB = gl.glProgramStringARB
-glProgramStringARB.argtypes = [GLuint, GLuint, c_void_p]
+glProgramStringARB.argtypes = [GLuint, GLuint, GLuint, c_void_p]
 glDeleteProgramsARB = gl.glDeleteProgramsARB
 glDeleteProgramsARB.argtypes = [GLint, c_void_p]
 glGetError = gl.glGetError
+glEnable = gl.glEnable
+glEnable.argtypes = [GLuint]
+glDisable = gl.glDisable
+glDisable.argtypes = [GLuint]
 
 #resumbrae.com glGenProgramsARB
 
@@ -54,22 +58,32 @@ class Program:
 
     def __init__ (self, source):
         self.source = source
-        self.id = c_uint ()
-        glGenProgramsARB (c_uint (1), byref (self.id))
-        print self.id
-        if self.id == 0:
+        self.id = c_uint(0)
+        glGenProgramsARB (c_uint (1), addressof(self.id))
+        if self.id.value == 0:
             print "Could not create fragment program, aborting"
             raise SystemExit
-        glBindProgramARB (GL_FRAGMENT_SHADER_ARB, self.id)
-        glProgramStringARB (GL_PROGRAM_FORMAT_ASCII_ARB,
-                            self.id, self.source)
+        self.check_error ()
+	glBindProgramARB (GL_FRAGMENT_PROGRAM_ARB, self.id.value)
+	print len(self.source)
+	self.check_error ()
+        glProgramStringARB (GL_FRAGMENT_PROGRAM_ARB,
+			    GL_PROGRAM_FORMAT_ASCII_ARB,
+                            len(self.source), self.source)
         self.check_error ()
 
     def check_error (self):
         e = glGetError ()
+	print e
         if e != GL_NO_ERROR:
             print "glError : %s" % glGetString (GL_PROGRAM_ERROR_STRING_ARB)
-            raise SystemExit
+#            raise SystemExit
+
+    def activate (self):
+	glEnable(GL_FRAGMENT_PROGRAM_ARB)
+
+    def deactivate (self):
+	glDisable(GL_FRAGMENT_PROGRAM_ARB)
 
     def __del__ (self):
         if self.id:
diff --git a/gshaderedit.py b/gshaderedit.py
index c2fe077..1e35554 100755
--- a/gshaderedit.py
+++ b/gshaderedit.py
@@ -133,10 +133,15 @@ class glArea (gtk.DrawingArea, gtk.gtkgl.Widget):
         gldrawable.gl_end ()
       
     def on_expose_event (self, *args):
-        gldrawable = self.get_gl_drawable ()
+        self.repaint()
+	
+    def repaint (self):
+	gldrawable = self.get_gl_drawable ()
         glcontext  = self.get_gl_context ()
         gldrawable.gl_begin (glcontext)
         glClear (GL_COLOR_BUFFER_BIT)
+	if self.program:
+	    self.program.activate()
         glMatrixMode (GL_MODELVIEW)
         glLoadIdentity ()
         glTexEnvfv (GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, (1, 1, 1, 1))
@@ -144,6 +149,8 @@ class glArea (gtk.DrawingArea, gtk.gtkgl.Widget):
         glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE)
         self.display ()
         gldrawable.swap_buffers ()
+	if self.program:
+	    self.program.deactivate()
         gldrawable.gl_end ()
 	        
     def display (self):
@@ -169,6 +176,8 @@ class glArea (gtk.DrawingArea, gtk.gtkgl.Widget):
         if self.program:
             del self.program
         self.program = Program (source)
+	self.repaint()
+	
 
 class gShaderEdit ():