Для быстрого тестирования шейдеров решил писать скрипты с использованием PyOpenGL. За основу брал туториал с сайта Pygame. Но теперь в PyOpenGL уже появились wrapper'ы для функций OpenGL 2.0. Вот простейший скрипт с ними:

Код:
import sys, pygame
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
from pygame.locals import *

if __name__ == "__main__":
	glutInit(sys.argv)
	width, height = (640, 480)
	pygame.init()
	pygame.display.set_mode((width, height), OPENGL | DOUBLEBUF)
	
	glMatrixMode(GL_PROJECTION)
	glLoadIdentity()
	gluPerspective(90.0, width/float(height), 1.0, 100.0)
	glMatrixMode(GL_MODELVIEW)
	glEnable(GL_DEPTH_TEST)
	
	v_sh = glCreateShader(GL_VERTEX_SHADER)
	f_sh = glCreateShader(GL_FRAGMENT_SHADER)
	glShaderSource(v_sh, '''
	void main() {
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
	}
	''')
	glCompileShader(v_sh)
	print glGetShaderInfoLog(v_sh)	
	if not glGetShaderiv(v_sh, GL_COMPILE_STATUS):
    glDeleteShader(v_sh)
    sys.exit()
    
	glShaderSource(f_sh, '''
	void main() {
    gl_FragColor = vec4(0.6, 0.1, 0.1, 1.0);
	}
	''')
	glCompileShader(f_sh)
	print glGetShaderInfoLog(f_sh)
	if not glGetShaderiv(f_sh, GL_COMPILE_STATUS):
    glDeleteShader(f_sh)
    sys.exit()
    
	program = glCreateProgram()
	glAttachShader(program, v_sh)
	glAttachShader(program, f_sh)
	glLinkProgram(program)
	print glGetProgramInfoLog(program)
	
	quit = False
	angle = 0
	while not quit:
    for e in pygame.event.get():
    	if e.type in (QUIT, KEYDOWN):
        quit = True
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glLoadIdentity()
    glTranslate(0.0, 0.0, -3.5)
    glRotate(angle, 0.0, 1.0, 0.0)
    glRotate(angle, 0.0, 0.0, 1.0)
    glutSolidTeapot(1.0)
    angle += 0.1
    pygame.display.flip()

форум плохо показывает отступы :(  количество аргументов у функций правильное (wrap'ятся так). этот скрипт выдает следующее

Код:
Vertex shader was successfully compiled to run on hardware.

Fragment shader was successfully compiled to run on hardware.
Fragment shader(s) failed to link,  vertex shader(s) failed to link. 
ERROR: 2:1: 'v' : syntax error parse error
ERROR:  compilation errors.  No code generated.

ERROR: 2:1: 'v' : syntax error parse error
ERROR:  compilation errors.  No code generated.

любопытно, что сообщения об ошибках компиляции появляются после сообщения "shader was successfully compiled"
если убрать фрагментный шейдер, то просто

Код:
Vertex shader was successfully compiled to run on hardware.

Fragment shader was successfully compiled to run on hardware.
Vertex shader(s) failed to link, no fragment shader(s) defined.

в чем тут загвоздка-то?