Advertisement
Guest User

Glut Example

a guest
Feb 9th, 2024
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. from ctypes import *
  2. import sys
  3.  
  4. import pygame
  5. from pygame.locals import *
  6.  
  7. from OpenGL.GL import *
  8. from OpenGL.GLU import *
  9. from OpenGL.GLUT import *
  10.  
  11. def compile_shader(source, shader_type):
  12. shader = glCreateShader(shader_type)
  13. source = c_char_p(source)
  14. length = c_int(-1)
  15. glShaderSource(shader, 1, byref(source), byref(length))
  16. glCompileShader(shader)
  17.  
  18. status = c_int()
  19. glGetShaderiv(shader, GL_COMPILE_STATUS, byref(status))
  20. if not status.value:
  21. print_log(shader)
  22. glDeleteShader(shader)
  23. raise ValueError('Shader compilation failed')
  24. return shader
  25.  
  26. def compile_program(vertex_source, fragment_source):
  27. vertex_shader = None
  28. fragment_shader = None
  29. program = glCreateProgram()
  30.  
  31. if vertex_source:
  32. vertex_shader = compile_shader(vertex_source, GL_VERTEX_SHADER)
  33. glAttachShader(program, vertex_shader)
  34. if fragment_source:
  35. fragment_shader = compile_shader(fragment_source, GL_FRAGMENT_SHADER)
  36. glAttachShader(program, fragment_shader)
  37.  
  38. glLinkProgram(program)
  39.  
  40. if vertex_shader:
  41. glDeleteShader(vertex_shader)
  42. if fragment_shader:
  43. glDeleteShader(fragment_shader)
  44.  
  45. return program
  46.  
  47. def print_log(shader):
  48. length = c_int()
  49. glGetShaderiv(shader, GL_INFO_LOG_LENGTH, byref(length))
  50.  
  51. if length.value > 0:
  52. log = create_string_buffer(length.value)
  53. glGetShaderInfoLog(shader, length, byref(length), log)
  54. print(sys.stderr, log.value)
  55.  
  56. if __name__ == '__main__':
  57. glutInit(sys.argv)
  58. width, height = 640, 480
  59. pygame.init()
  60. pygame.display.set_mode((width, height), OPENGL | DOUBLEBUF)
  61.  
  62. program = compile_program('''
  63. // Vertex program
  64. varying vec3 pos;
  65. void main() {
  66. pos = gl_Vertex.xyz;
  67. gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
  68. }
  69. ''', '''
  70. // Fragment program
  71. varying vec3 pos;
  72. void main() {
  73. gl_FragColor.rgb = pos.xyz;
  74. }
  75. ''')
  76.  
  77. glMatrixMode(GL_PROJECTION)
  78. glLoadIdentity()
  79. gluPerspective(90.0, width / float(height), 1.0, 100.0)
  80. glMatrixMode(GL_MODELVIEW)
  81. glEnable(GL_DEPTH_TEST)
  82.  
  83. quit = False
  84. angle = 0
  85. while not quit:
  86. for e in pygame.event.get():
  87. if e.type in (QUIT, KEYDOWN):
  88. quit = True
  89. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
  90. glLoadIdentity()
  91. glTranslate(0.0, 0.0, -2.5)
  92. glRotate(angle, 0.0, 1.0, 0.0)
  93. glUseProgram(program)
  94. glutSolidTeapot(1.0)
  95. angle += 0.1
  96. pygame.display.flip()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement