Advertisement
Guest User

Untitled

a guest
Dec 17th, 2014
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.33 KB | None | 0 0
  1. #include <GL/glew.h>
  2. #include <glm/glm.hpp>
  3. #include <glm/gtx/transform.hpp>
  4. #include <glm/gtc/matrix_transform.hpp>
  5.  
  6. #include <cstdio>
  7.  
  8. #include "Game.h"
  9. #include "CShaderLoader.h"
  10.  
  11. GLuint program, vertexShader, fragmentShader, vbo, vao, ebo;
  12.  
  13. void loadShaders() {
  14. CShaderLoader vertexLoader = ("C:/opengl/shaders/shader.vert");
  15. CShaderLoader fragmentLoader = ("C:/opengl/shaders/shader.frag");
  16. const char* vertexSource = vertexLoader.loadFileToString();
  17. const char* fragmentSource = fragmentLoader.loadFileToString();
  18.  
  19. vertexShader = glCreateShader(GL_VERTEX_SHADER);
  20. glShaderSource(vertexShader, 1, &vertexSource, 0);
  21. glCompileShader(vertexShader);
  22.  
  23. fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
  24. glShaderSource(fragmentShader, 1, &fragmentSource, 0);
  25. glCompileShader(fragmentShader);
  26.  
  27. program = glCreateProgram();
  28. glAttachShader(program, vertexShader);
  29. glAttachShader(program, fragmentShader);
  30. glBindFragDataLocation(program, 0, "color");
  31. glLinkProgram(program);
  32. glUseProgram(program);
  33. }
  34.  
  35. void reportShaderErrors() {
  36. GLchar buffer[512];
  37. GLint status;
  38.  
  39. glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &status);
  40. glGetShaderInfoLog(vertexShader, 512, NULL, buffer);
  41. printf("Vertex Shader Compile Errors:\n%s\n", buffer);
  42.  
  43. glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &status);
  44. glGetShaderInfoLog(fragmentShader, 512, NULL, buffer);
  45. printf("Fragment Shader Compile Errors:\n%s\n", buffer);
  46. }
  47.  
  48. void loadData() {
  49. GLfloat vertices[] = {
  50. -1.0f, +1.0f, -1.0f, //Vertex 1
  51. 1.0f, 0.0f, 0.0f,
  52.  
  53. -1.0f, -1.0f, -1.0f, //Vertex 2
  54. 0.0f, 1.0f, 0.0f,
  55.  
  56. +1.0f, -1.0f, -1.0f, //Vertex 3
  57. 0.0f, 0.0f, 1.0f,
  58.  
  59. +1.0f, +1.0f, -1.0f, //Vertex 4
  60. 1.0f, 1.0f, 1.0f,
  61. };
  62.  
  63. glGenBuffers(1, &vbo);
  64. glBindBuffer(GL_ARRAY_BUFFER, vbo);
  65. glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  66.  
  67. glGenVertexArrays(1, &vao);
  68. glBindVertexArray(vao);
  69.  
  70. glEnableVertexAttribArray(0);
  71. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), 0);
  72. glEnableVertexAttribArray(1);
  73. glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3 * sizeof(float)));
  74.  
  75. GLuint indices[] = {
  76. 0, 1, 2, //front
  77. 2, 3, 0,
  78. };
  79.  
  80. glGenBuffers(1, &ebo);
  81. glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
  82. glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
  83. }
  84.  
  85. void mvp() {
  86. glm::mat4 model = glm::mat4(1.0f);
  87. glm::mat4 view = glm::lookAt(
  88. glm::vec3(4.0f, 3.0f, 3.0f),
  89. glm::vec3(0.0f, 0.0f, 0.0f),
  90. glm::vec3(0.0f, 1.0f, 0.0f)
  91. );
  92. glm::mat4 projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.0f);
  93. glm::mat4 mvp = projection * view * model;
  94.  
  95. GLuint matrixID = glGetUniformLocation(program, "MVP");
  96. glUniformMatrix4fv(matrixID, 1, GL_FALSE, &mvp[0][0]);
  97. }
  98.  
  99. void Game::initialize() {
  100. glewExperimental = GL_TRUE;
  101. glewInit();
  102. glEnable(GL_DEPTH_TEST);
  103.  
  104. loadData();
  105. mvp();
  106. loadShaders();
  107. reportShaderErrors();
  108. }
  109.  
  110. void Game::paint() {
  111. glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  112. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  113.  
  114. glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
  115. }
  116.  
  117. #version 330
  118.  
  119. layout(location=0) in vec3 position;
  120. layout(location=1) in vec3 vertColor;
  121.  
  122. out vec3 fragColor;
  123.  
  124. uniform mat4 MVP;
  125.  
  126. void main()
  127. {
  128. fragColor = vertColor;
  129. gl_Position = MVP * vec4(position, 1.0);
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement