t_opengl.nim 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import unittest
  2. import opengl, vmath
  3. import siwin
  4. let globals = newSiwinGlobals(
  5. preferedPlatform = (when defined(linux): x11 else: defaultPreferedPlatform())
  6. )
  7. test "OpenGL":
  8. var g = 1.0
  9. let window = globals.newOpenglWindow(title="OpenGL test", transparent=true)
  10. loadExtensions()
  11. run window, WindowEventsHandler(
  12. onResize: proc(e: ResizeEvent) =
  13. glViewport 0, 0, e.size.x.GLsizei, e.size.y.GLsizei
  14. glMatrixMode GlProjection
  15. glLoadIdentity()
  16. glOrtho -30, 30, -30, 30, -30, 30
  17. glMatrixMode GlModelView
  18. ,
  19. onRender: proc(e: RenderEvent) =
  20. glClearColor 0.1, 0.1, 0.1, 0.3
  21. glClear GlColorBufferBit or GlDepthBufferBit
  22. glShadeModel GlSmooth
  23. glLoadIdentity()
  24. glTranslatef -15, -15, 0
  25. glBegin GlTriangles
  26. glColor3f 1 * g, g - 1, g - 1
  27. glVertex2f 0, 0
  28. glColor3f g - 1, 1 * g, g - 1
  29. glVertex2f 30, 0
  30. glColor3f g - 1, g - 1, 1 * g
  31. glVertex2f 0, 30
  32. glEnd()
  33. ,
  34. onKey: proc(e: KeyEvent) =
  35. if e.pressed:
  36. case e.key
  37. of Key.escape:
  38. close e.window
  39. of Key.f1:
  40. e.window.fullscreen = not window.fullscreen
  41. of Key.f2:
  42. e.window.maximized = not window.maximized
  43. of Key.f3:
  44. e.window.minimized = not window.minimized
  45. of Key.f4:
  46. e.window.size = ivec2(300, 300)
  47. else: discard
  48. ,
  49. onClick: proc(e: ClickEvent) =
  50. if e.double:
  51. close e.window
  52. else:
  53. case e.button
  54. of MouseButton.left, MouseButton.right:
  55. g = (e.pos.x / e.window.size.x.float32 * 2).min(2).max(0)
  56. redraw e.window
  57. of MouseButton.middle:
  58. e.window.maxSize = ivec2(600, 600)
  59. e.window.minSize = ivec2(300, 300)
  60. else: discard
  61. ,
  62. onMouseMove: proc(e: MouseMoveEvent) =
  63. if e.kind == leave: echo "leave: ", e.pos
  64. if e.kind == MouseMoveKind.enter: echo "enter: ", e.pos
  65. if MouseButton.left in e.window.mouse.pressed:
  66. g = (e.pos.x / e.window.size.x.float32 * 2).min(2).max(0)
  67. redraw e.window
  68. ,
  69. onStateBoolChanged: proc(e: StateBoolChangedEvent) =
  70. echo e.kind, ": ", e.value
  71. )