Advertisement
Verzingz

Untitled

Jun 2nd, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.25 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string>
  4. #include <fstream>
  5.  
  6. #include <GL\glew.h>
  7. #include <GLFW\glfw3.h>
  8.  
  9. std::string LoadFileToString(const char* filepath) {
  10. std::string fileData;
  11. std::ifstream stream(filepath, std::ios::in);
  12.  
  13. if (stream.is_open()) {
  14. std::string line = "";
  15.  
  16. while (getline(stream, line)) {
  17. fileData += "\n" + line;
  18. }
  19.  
  20. stream.close();
  21. }
  22.  
  23. return fileData;
  24. }
  25.  
  26. GLuint LoadShaders(const char* vertShaderPath, const char* fragShaderPath) {
  27. GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);
  28. GLuint fragShader = glCreateShader(GL_FRAGMENT_SHADER);
  29.  
  30. std::string vertShaderSource = LoadFileToString(vertShaderPath);
  31. std::string fragShaderSource = LoadFileToString(fragShaderPath);
  32.  
  33. const char* rawVertShaderSource = vertShaderSource.c_str();
  34. const char* rawFragShaderSource = fragShaderSource.c_str();
  35.  
  36. glShaderSource(vertShader, 1, &rawVertShaderSource, NULL);
  37. glShaderSource(fragShader, 1, &rawFragShaderSource, NULL);
  38.  
  39. glCompileShader(vertShader);
  40. glCompileShader(fragShader);
  41.  
  42. GLuint program = glCreateProgram();
  43. glAttachShader(program, vertShader);
  44. glAttachShader(program, fragShader);
  45. glLinkProgram(program);
  46.  
  47. return program;
  48. }
  49.  
  50. int main(int argv, char** argc) {
  51. if (glfwInit() == false) { // If GLFW Isn't Working
  52. // Did Not Succeed
  53. fprintf(stderr, "GLFW failed to initialise.");
  54. return -1; // Returns Error
  55. }
  56.  
  57. glfwWindowHint(GLFW_SAMPLES, 16); // Antialiasing
  58. glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // GLFW Version
  59. glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); // GLFW Version
  60. glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
  61.  
  62. GLFWwindow* window; // GLFW* window is a pointer to make the window. As below.
  63. window = glfwCreateWindow(800, 600, "My OpenGL", NULL, NULL); // Make The Window
  64.  
  65. if (!window) {
  66. fprintf(stderr, "Window failed to create");
  67. glfwTerminate();
  68. return -1;
  69. }
  70.  
  71. glfwMakeContextCurrent(window); // Show Window
  72. glewExperimental = true; // Allowes Us To Run
  73.  
  74. if (glewInit() != GLEW_OK) { // If GLEW Isn't OK
  75. fprintf(stderr, "GLEW failed to initialise");
  76. glfwTerminate();
  77. return -1;
  78. }
  79.  
  80. GLuint vaoID; // Open GL's ID's
  81. glGenVertexArrays(1, &vaoID); // Generate vertex arrays then sending it to the vaoID
  82. glBindVertexArray(vaoID); // Tells OpenGL that we're going to use this type of vertext array
  83.  
  84. static const GLfloat verts[] = {
  85. // X, Y, Z
  86. -1.0f, -1.0f, 0.0f,
  87. 1.0f, -1.0f, 0.0f,
  88. 0.0f, 1.0f, 0.0f
  89. };
  90.  
  91. GLuint program = LoadShaders("shader.vertshader", "shader.fragshader");
  92.  
  93. // Generate VBO
  94. GLuint vboID;
  95. glGenBuffers(1, &vboID);
  96. glBindBuffer(GL_ARRAY_BUFFER, vboID); // Current working buffer
  97. glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);
  98.  
  99. glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
  100.  
  101. do {
  102. glClear(GL_COLOR_BUFFER_BIT);
  103. glEnableVertexAttribArray(0);
  104. glBindBuffer(GL_ARRAY_BUFFER, vboID);
  105. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0); // 3 is xyz
  106.  
  107. glUseProgram(program);
  108. glDrawArrays(GL_TRIANGLES, 0, 3);
  109.  
  110. glDisableVertexAttribArray(0);
  111.  
  112. glfwSwapBuffers(window); // Buffers
  113. glfwPollEvents();
  114. } while (glfwWindowShouldClose(window) == false); // While Not Closed
  115.  
  116. return 0;
  117. }
  118.  
  119. /* Easier in C++ */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement