Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.10 KB | None | 0 0
  1. #include "libs.h"
  2.  
  3. Vertex vertices[] =
  4. {
  5.     //Position                          //Color                             //Texcoord
  6.     glm::vec3(-0.5f, 0.5f, 0.0f),       glm::vec3(1.0f, 0.0f, 0.0f),        glm::vec2(0.1f, 1.0f),
  7.     glm::vec3(-0.5f, -0.5f, 0.0f),      glm::vec3(0.0f, 1.0f, 0.0f),        glm::vec2(0.0f, 0.0f),
  8.     glm::vec3(0.5f, -0.5f, 0.0f),       glm::vec3(0.0f, 0.0f, 1.0f),        glm::vec2(1.0f, 0.0f),
  9. };
  10. unsigned nrOfVertices = sizeof(vertices) / sizeof(Vertex);
  11.  
  12. GLuint indices[] =
  13. {
  14.     0, 1, 2,
  15. };
  16. unsigned nrOfIndices = sizeof(indices) / sizeof(GLuint);
  17.  
  18. void updateInput(GLFWwindow* window)
  19. {
  20.     if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
  21.     {
  22.         glfwSetWindowShouldClose(window, GLFW_TRUE);
  23.     }
  24. }
  25.  
  26. void frameBuffer_resize_callback(GLFWwindow* window, int fBW, int fBH)
  27. {
  28.     glViewport(0, 0, fBW, fBH);
  29. }
  30.  
  31. bool loadShaders(GLuint &program)
  32. {
  33.     bool loadSuccess = true;
  34.     char infoLog[512];
  35.     GLint success;
  36.  
  37.     std::string temp = "";
  38.     std::string src = "";
  39.  
  40.     std::ifstream in_file;
  41.  
  42.     //VERTEX
  43.     in_file.open("vertex_core.glsl");
  44.  
  45.     if (in_file.is_open())
  46.     {
  47.         while (std::getline(in_file, temp))
  48.         {
  49.             src += temp + "\n";
  50.         }
  51.     }
  52.     else
  53.     {
  54.         std::cout << "ERROR::LOADSHADERS::COULD_NOT_OPEN_VERTEX_FILE" << std::endl;
  55.         loadSuccess = false;
  56.     }
  57.  
  58.     in_file.close();
  59.  
  60.     GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
  61.     const GLchar* vertSrc = src.c_str();
  62.     glShaderSource(vertexShader, 1, &vertSrc, NULL);
  63.     glCompileShader(vertexShader);
  64.  
  65.     glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
  66.     if (!success)
  67.     {
  68.         glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
  69.         std::cout << "ERROR::LOADSHADERS::COULD_NOT_COMPILE_VERTEX_FILE" << std::endl;
  70.         std::cout << infoLog << "\n";
  71.         loadSuccess = false;
  72.     }
  73.  
  74.     temp = "";
  75.     src = "";
  76.  
  77.     //Fragment
  78.     in_file.open("fragment_core.glsl");
  79.  
  80.     if (in_file.is_open())
  81.     {
  82.         while (std::getline(in_file, temp))
  83.         {
  84.             src += temp + "\n";
  85.         }
  86.     }
  87.     else
  88.     {
  89.         std::cout << "ERROR::LOADSHADERS::COULD_NOT_OPEN_FRAGMENT_FILE" << std::endl;
  90.         loadSuccess = false;
  91.     }
  92.  
  93.     in_file.close();
  94.  
  95.     GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
  96.     const GLchar* fragSrc = src.c_str();
  97.     glShaderSource(fragmentShader, 1, &fragSrc, NULL);
  98.     glCompileShader(fragmentShader);
  99.  
  100.     glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
  101.     if (!success)
  102.     {
  103.         glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);
  104.         std::cout << "ERROR::LOADSHADERS::COULD_NOT_COMPILE_FRAGMENT_FILE" << std::endl;
  105.         std::cout << infoLog << "\n";
  106.         loadSuccess = false;
  107.     }
  108.  
  109.     temp = "";
  110.     src = "";
  111.  
  112.     //Program
  113.     program = glCreateProgram();
  114.  
  115.     glAttachShader(program, vertexShader);
  116.     glAttachShader(program, fragmentShader);
  117.  
  118.     glLinkProgram(program);
  119.  
  120.     glGetProgramiv(program, GL_LINK_STATUS, &success);
  121.     if (!success)
  122.     {
  123.         glGetProgramInfoLog(program, 512, NULL, infoLog);
  124.         std::cout << "ERROR::LOADSHADERS::COULD_NOT_LINK_PROGRAM" << std::endl;
  125.         std::cout << infoLog << "\n";
  126.     }
  127.  
  128.     //End
  129.     glUseProgram(0);
  130.     glDeleteShader(vertexShader);
  131.     glDeleteShader(fragmentShader);
  132.  
  133.     return loadSuccess;
  134. }
  135.  
  136. int main()
  137. {
  138.     //INIT GLFW
  139.     glfwInit();
  140.  
  141.     //CREATE WINDOW
  142.     const int WINDOW_WIDTH = 640;
  143.     const int WINDOW_HEIGHT = 480;
  144.     int frameBufferWidth = 0;
  145.     int frameBufferHeight = 0;
  146.  
  147.     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
  148.     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
  149.     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 4);
  150.     glfwWindowHint(GLFW_RESIZABLE, GL_TRUE);
  151.  
  152.     GLFWwindow* window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "Labwork 3", NULL, NULL);
  153.  
  154.     glfwSetFramebufferSizeCallback(window, frameBuffer_resize_callback);
  155.     //glfwGetFramebufferSize(window, &frameBufferWidth, &frameBufferHeight);
  156.     //glViewport(0, 0, frameBufferWidth, frameBufferHeight);
  157.  
  158.     glfwMakeContextCurrent(window);
  159.  
  160.     //INIT GLEW
  161.     glewExperimental = GL_TRUE;
  162.  
  163.     //CHECK ERROR
  164.     if (glewInit() != GLEW_OK)
  165.     {
  166.         std::cout << "ERROR::MAIN.CPP::GLEW_INIT_FAILED" << std::endl;
  167.         glfwTerminate();
  168.     }
  169.  
  170.     //OPENGL OPTIONS
  171.     glEnable(GL_DEPTH_TEST);
  172.  
  173.     glEnable(GL_CULL_FACE);
  174.     glCullFace(GL_BACK);
  175.     glFrontFace(GL_CCW);
  176.  
  177.     glEnable(GL_BLEND);
  178.     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  179.  
  180.     glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  181.  
  182.     //SHADER INIT
  183.     GLuint core_program;
  184.     if (!loadShaders(core_program))
  185.     {
  186.         glfwTerminate();
  187.     }
  188.  
  189.     //MODEL
  190.  
  191.     //VAO, VBO, EBO
  192.     GLuint VAO;
  193.     glCreateVertexArrays(1, &VAO);
  194.     glBindVertexArray(VAO);
  195.  
  196.     //GEN VBO, BIND AND SEND DATA
  197.     GLuint VBO;
  198.     glGenBuffers(1, &VBO);
  199.     glBindBuffer(GL_ARRAY_BUFFER, VBO);
  200.     glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  201.  
  202.     //GEN EBO, BIND AND SENND DATA
  203.     GLuint EBO;
  204.     glGenBuffers(1, &EBO);
  205.     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
  206.     glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
  207.  
  208.     //SET VERTEXATTRIBPOINTER AND ENABLE
  209.     //Position
  210.     glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*)offsetof(Vertex, position));
  211.     glEnableVertexAttribArray(0);
  212.     //Color
  213.     glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*)offsetof(Vertex, color));
  214.     glEnableVertexAttribArray(1);
  215.     //Texcoord
  216.     glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*)offsetof(Vertex, texcoord));
  217.     glEnableVertexAttribArray(2);
  218.  
  219.     //BIND VAO 0
  220.     glBindVertexArray(0);
  221.  
  222.     //TEXTURE INIT
  223.     int image_width = 0;
  224.     int image_height = 0;
  225.     unsigned char* image = SOIL_load_image("Images/rock.png", &image_width, &image_height, NULL, SOIL_LOAD_RGBA);
  226.  
  227.     //MAIN LOOP
  228.     while (!glfwWindowShouldClose(window))
  229.     {
  230.         //UPDATE INPUT
  231.         glfwPollEvents();
  232.  
  233.         //UPDATE
  234.         updateInput(window);
  235.  
  236.         //CLEAR
  237.         glClearColor(0, 0, 0, 0);
  238.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
  239.  
  240.         //USE A PRROGRAM
  241.         glUseProgram(core_program);
  242.  
  243.         //BINDD VERTEX ARRAY OBJECT
  244.         glBindVertexArray(VAO);
  245.  
  246.         //DRAW
  247.         //glDrawArrays(GL_TRIANGLES, nrOfVertices,  0);
  248.         glDrawElements(GL_TRIANGLES, nrOfIndices, GL_UNSIGNED_INT, 0);
  249.  
  250.         //END
  251.         glfwSwapBuffers(window);
  252.         glFlush();
  253.     }
  254.  
  255.     //END OF PROGRAM
  256.     glfwDestroyWindow(window);
  257.     glfwTerminate();
  258.  
  259.     //DELETE PROGRAM
  260.     glDeleteProgram(core_program);
  261.  
  262.     return 0;
  263. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement