Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.97 KB | None | 0 0
  1. #include "mk.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. static GLFWwindow *Window;
  6. static Shader_t Shader;
  7. static GLuint Vao, Vbo;
  8. static Vertex_t Vertices[3];
  9.  
  10. static const GLchar WORLD_SHADER_VS[] = {
  11. "#version 330\n"
  12.  
  13. // per vertex:
  14. "in vec3 vPosition;"
  15.  
  16. "void main() {"
  17. " gl_Position = vec4(vPosition + vOffset, 1.0f);"
  18. "}"
  19. };
  20.  
  21. static const GLchar WORLD_SHADER_FS[] = {
  22. "#version 330\n"
  23.  
  24. "out vec3 oColor;"
  25.  
  26. "void main() {"
  27. " oColor = vec3(1.0f, 1.0f, 1.0f);"
  28. "}"
  29. };
  30.  
  31. static GLuint CompileShader(const GLchar *source, GLenum type)
  32. {
  33. GLuint shader = glCreateShader(type);
  34. if (!shader) return 0;
  35.  
  36. glShaderSource(shader, 1, &source, NULL);
  37. glCompileShader(shader);
  38.  
  39. GLint success;
  40. glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
  41. if (!success) {
  42. GLchar log[1024];
  43. glGetShaderInfoLog(shader, sizeof(log), NULL, log);
  44. fprintf(stderr, "[ERROR] CompileShader:\n%s\n", log);
  45.  
  46. glDeleteShader(shader);
  47. return 0;
  48. }
  49. return shader;
  50. }
  51.  
  52. void InitializeWindow(GLFWwindow *w)
  53. {
  54. Window = w;
  55. }
  56.  
  57. bool InitializeShaders()
  58. {
  59. Shader.VS = CompileShader(WORLD_SHADER_VS, GL_VERTEX_SHADER);
  60. if (!Shader.VS) return false;
  61.  
  62. Shader.FS = CompileShader(WORLD_SHADER_FS, GL_FRAGMENT_SHADER);
  63. if (!Shader.FS) return false;
  64.  
  65. Shader.Program = glCreateProgram();
  66. if (!Shader.Program) return false;
  67.  
  68. glAttachShader(Shader.Program, Shader.VS);
  69. glAttachShader(Shader.Program, Shader.FS);
  70. glLinkProgram(Shader.Program);
  71. glDetachShader(Shader.Program, Shader.VS);
  72. glDetachShader(Shader.Program, Shader.FS);
  73.  
  74. GLint success;
  75. glGetProgramiv(Shader.Program, GL_LINK_STATUS, &success);
  76. if (!success) {
  77. GLchar log[1024];
  78. glGetProgramInfoLog(Shader.Program, sizeof(log), NULL, log);
  79. fprintf(stderr, "[ERROR] InitializeShaders:\n%s\n", log);
  80. return false;
  81. }
  82. return true;
  83. }
  84.  
  85. bool InitializeMeshes()
  86. {
  87. Vertices[0].Position.x = -0.5f;
  88. Vertices[0].Position.y = -0.5f;
  89. Vertices[0].Position.z = 0.0f;
  90.  
  91. Vertices[1].Position.x = 0.0f;
  92. Vertices[1].Position.y = 0.5f;
  93. Vertices[1].Position.z = 0.0f;
  94.  
  95. Vertices[1].Position.x = 0.5f;
  96. Vertices[1].Position.y = -0.5f;
  97. Vertices[1].Position.z = 0.0f;
  98.  
  99. glGenBuffers(1, &Vao);
  100. glBindVertexArray(Vao);
  101.  
  102. glGenBuffers(1, &Vbo);
  103. glBindBuffer(GL_ARRAY_BUFFER, Vbo);
  104.  
  105. glBufferData(Vbo, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
  106.  
  107. glEnableVertexAttribArray(0);
  108. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
  109.  
  110. glBindBuffer(GL_ARRAY_BUFFER, 0);
  111. glBindVertexArray(0);
  112. return true;
  113. }
  114.  
  115. void RenderMeshes()
  116. {
  117. glUseProgram(Shader.Program);
  118.  
  119. glBindVertexArray(Vao);
  120. glBindBuffer(GL_ARRAY_BUFFER, Vbo);
  121.  
  122. glDrawArrays(GL_TRIANGLES, 0, 3);
  123.  
  124. glBindBuffer(GL_ARRAY_BUFFER, 0);
  125. glBindVertexArray(0);
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement