Advertisement
Guest User

Functional VBO Modification C# OpenTK

a guest
Jun 21st, 2020
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.61 KB | None | 0 0
  1. using OpenTK;
  2. using OpenTK.Graphics;
  3. using OpenTK.Graphics.OpenGL;
  4. using OpenTK.Input;
  5. using System;
  6.  
  7. namespace OpenTKTest
  8. {
  9. internal class Window : GameWindow
  10. {
  11. float[] vertices = {
  12. -0.5f, -0.5f, 0.0f, //Bottom-left vertex
  13. 0.5f, -0.5f, 0.0f, //Bottom-right vertex
  14. 0.0f, 0.5f, 0.0f //Top vertex
  15. };
  16.  
  17. int VertexBufferObject;
  18. int VertexArrayObject;
  19.  
  20. Shader shader;
  21.  
  22. public Window(int width, int height, string title)
  23. : base(width, height, GraphicsMode.Default, title)
  24. {
  25.  
  26. }
  27.  
  28. protected override void OnLoad(EventArgs e)
  29. {
  30. GL.ClearColor(1.0f, 0.0f, 1.0f, 1.0f);
  31.  
  32. shader = new Shader("..\\..\\vertex.vert", "..\\..\\fragment.frag");
  33.  
  34. VertexBufferObject = GL.GenBuffer();
  35.  
  36. // INITIAL DRAW - NO SUB
  37. GL.BindBuffer(BufferTarget.ArrayBuffer, VertexBufferObject);
  38. GL.BufferData(BufferTarget.ArrayBuffer, vertices.Length * sizeof(float), vertices, BufferUsageHint.DynamicDraw);
  39.  
  40. GL.VertexAttribPointer(shader.GetAttribLocation("aPosition"), 3, VertexAttribPointerType.Float, false, 3 * sizeof(float), 0);
  41. GL.EnableVertexAttribArray(0);
  42.  
  43. // DRAW EVERY RENDER
  44. VertexArrayObject = GL.GenVertexArray();
  45. GL.BindVertexArray(VertexArrayObject);
  46.  
  47. GL.BindBuffer(BufferTarget.ArrayBuffer, VertexBufferObject);
  48. GL.BufferSubData(BufferTarget.ArrayBuffer, (IntPtr)(0), vertices.Length * sizeof(float), vertices);
  49. //GL.BufferData(BufferTarget.ArrayBuffer, vertices.Length * sizeof(float), vertices, BufferUsageHint.StaticDraw);
  50.  
  51. GL.VertexAttribPointer(shader.GetAttribLocation("aPosition"), 3, VertexAttribPointerType.Float, false, 3 * sizeof(float), 0);
  52. GL.EnableVertexAttribArray(0);
  53.  
  54. base.OnLoad(e);
  55. }
  56.  
  57. protected override void OnRenderFrame(FrameEventArgs e)
  58. {
  59. GL.Clear(ClearBufferMask.ColorBufferBit);
  60.  
  61. vertices[3] = 0.2f;
  62.  
  63. /**
  64. shader.Use();
  65. GL.BindVertexArray(VertexArrayObject);
  66. GL.DrawArrays(PrimitiveType.Triangles, 0, 3);
  67. **/
  68.  
  69. shader.Use();
  70.  
  71. GL.BindBuffer(BufferTarget.ArrayBuffer, VertexBufferObject);
  72. GL.BufferSubData(BufferTarget.ArrayBuffer, (IntPtr)(0), vertices.Length * sizeof(float), vertices);
  73. //GL.BufferData(BufferTarget.ArrayBuffer, vertices.Length * sizeof(float), vertices, BufferUsageHint.StaticDraw);
  74.  
  75. GL.VertexAttribPointer(shader.GetAttribLocation("aPosition"), 3, VertexAttribPointerType.Float, false, 3 * sizeof(float), 0);
  76. GL.EnableVertexAttribArray(0);
  77.  
  78. GL.DrawArrays(PrimitiveType.Triangles, 0, 3);
  79.  
  80. Context.SwapBuffers();
  81. base.OnRenderFrame(e);
  82. }
  83.  
  84. protected override void OnUpdateFrame(FrameEventArgs e)
  85. {
  86. var input = Keyboard.GetState();
  87.  
  88. if (input.IsKeyDown(Key.Escape))
  89. {
  90. Exit();
  91. }
  92.  
  93. base.OnUpdateFrame(e);
  94. }
  95.  
  96. protected override void OnResize(EventArgs e)
  97. {
  98. GL.Viewport(0, 0, Width, Height);
  99. base.OnResize(e);
  100. }
  101.  
  102. protected override void OnUnload(EventArgs e)
  103. {
  104. GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
  105. GL.DeleteBuffer(VertexBufferObject);
  106.  
  107. shader.Dispose();
  108.  
  109. base.OnUnload(e);
  110. }
  111. }
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement