Advertisement
atm959

main.cpp

Jun 6th, 2017
318
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.64 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <iostream>
  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::fstream stream(filePath, std::ios::in);
  12.     if (stream.is_open()) {
  13.         std::string line = "";
  14.         while (getline(stream, line)) {
  15.             fileData += "\n" + line;
  16.         }
  17.         stream.close();
  18.     }
  19.     return fileData;
  20. }
  21.  
  22. GLuint loadShaders(const char* vertShaderPath, const char* fragShaderPath) {
  23.     GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);
  24.     GLuint fragShader = glCreateShader(GL_FRAGMENT_SHADER);
  25.     std::string vertShaderSource = loadFileToString(vertShaderPath);
  26.     std::string fragShaderSource = loadFileToString(fragShaderPath);
  27.     const char* rawVertShader = vertShaderSource.c_str();
  28.     const char* rawFragShader = fragShaderSource.c_str();
  29.     glShaderSource(vertShader, 1, &rawVertShader, NULL);
  30.     glShaderSource(fragShader, 1, &rawFragShader, NULL);
  31.     glCompileShader(vertShader);
  32.     glCompileShader(fragShader);
  33.     GLuint program = glCreateProgram();
  34.     glAttachShader(program, vertShader);
  35.     glAttachShader(program, fragShader);
  36.     glLinkProgram(program);
  37.     return program;
  38. }
  39.  
  40. int main(int argc, char** argv) {
  41.     if (!glfwInit()) { //Init GLFW
  42.         fprintf(stderr, "GLFW failed to init.");
  43.         return -1;
  44.     }
  45.  
  46.     glfwWindowHint(GLFW_SAMPLES, 4);
  47.     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
  48.     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
  49.     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
  50.  
  51.     GLFWwindow* window;
  52.     window = glfwCreateWindow(640, 480, "3D Game", NULL, NULL);
  53.     if (!window) {
  54.         fprintf(stderr, "Failed to create window.");
  55.         glfwTerminate();
  56.         return -1;
  57.     }
  58.     glfwMakeContextCurrent(window);
  59.  
  60.     glewExperimental = true;
  61.     if (glewInit() != GLEW_OK) {
  62.         fprintf(stderr, "GLEW failed to init.");
  63.         glfwTerminate();
  64.         return -1;
  65.     }
  66.  
  67.     GLuint vaoID;
  68.     glGenVertexArrays(1, &vaoID);
  69.     glBindVertexArray(vaoID);
  70.  
  71.     static const GLfloat verts[] = {
  72.         //X,     Y,    Z
  73.         -1.0f, -1.0f, 0.0f,
  74.          1.0f, -1.0f, 0.0f,
  75.          0.0f,  1.0f, 0.0f
  76.     };
  77.  
  78.     GLuint program = loadShaders("shader.vsh", "shader.fsh");
  79.  
  80.     GLuint vboID;
  81.     glGenBuffers(1, &vboID);
  82.     glBindBuffer(GL_ARRAY_BUFFER, vboID);
  83.     glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);
  84.  
  85.     while (!glfwWindowShouldClose(window)) {
  86.         glEnableVertexAttribArray(0);
  87.         glBindBuffer(GL_ARRAY_BUFFER, vboID);
  88.         glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
  89.         glUseProgram(program);
  90.         glDrawArrays(GL_TRIANGLES, 0, 3);
  91.         glDisableVertexAttribArray(0);
  92.  
  93.         glfwSwapBuffers(window);
  94.         glfwPollEvents();
  95.     }
  96.  
  97.     glfwTerminate(); //Terminate GLFW.
  98.     return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement