rendered paste bodydiff --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 ():