[PyOpenGL-Users] Shader linking problems...
Brought to you by:
mcfletch
From: Nick K. <bod...@gm...> - 2009-03-17 22:21:42
|
Hi all, I've been having some problems getting some basic shaders to link when loading from a file. If I hard code the shaders as a python string, I have no problems. Here's how I'm loading the shaders. f = open('test.vert') vertex = f.read() f.close() f = open('test.frag') fragment = f.read() f.close program = compile_program(vertex, fragment) I know that the file's are loading from doing a print of the two vars. Here's my compile functions: def compile_shader(source, shader_type): shader = glCreateShaderObjectARB(shader_type) glShaderSourceARB(shader, source) glCompileShaderARB(shader) status = glGetObjectParameterivARB(shader, GL_OBJECT_COMPILE_STATUS_ARB) if not status: print_log(shader) glDeleteObjectARB(shader) raise ValueError, 'Shader compilation failed' return shader def compile_program(vertex_source, fragment_source): glInitShaderObjectsARB() glInitVertexShaderARB() glInitFragmentShaderARB() program = glCreateProgramObjectARB() if vertex_source: vertex_shader = compile_shader(vertex_source, GL_VERTEX_SHADER_ARB) glAttachObjectARB(program, vertex_shader) if fragment_source: fragment_shader = compile_shader(fragment_source, GL_FRAGMENT_SHADER_ARB) glAttachObjectARB(program, fragment_shader) glLinkProgramARB(program) status = glGetObjectParameterivARB(program, GL_OBJECT_LINK_STATUS_ARB) if not status: print_program_log(program) raise ValueError, 'Program link failed' if vertex_shader: glDeleteObjectARB(vertex_shader) if fragment_shader: glDeleteObjectARB(fragment_shader) return program def print_log(shader): length = glGetObjectParameterivARB(shader, GL_OBJECT_INFO_LOG_LENGTH_ARB) if length > 0: log = glGetInfoLogARB(shader) print log def print_program_log(program): length = glGetObjectParameterivARB(program, GL_OBJECT_INFO_LOG_LENGTH_ARB) if length > 0: log = glGetInfoLogARB(program) print log else: print 'An error occurred in the program.' Any ideas? Thanks! -bodiddlie |