Advertisement
duel_05

main.cpp_ache

Sep 29th, 2019
315
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.91 KB | None | 0 0
  1. #include "libs.h"
  2.  
  3.  
  4. Vertex vertices[] = {
  5.  
  6.     //POSITION
  7.     glm::vec3(0.0f, 0.5f, 0.f),
  8.     glm::vec3(-0.5f, -0.5f, 0.f),
  9.     glm::vec3(0.5f, -0.5f, 0.f),
  10.  
  11.     //COLOR
  12.     glm::vec3(1.f, 0.f, 0.f),
  13.     glm::vec3(0.0f, 1.f, 0.f),
  14.     glm::vec3(0.0f, 0.f, 1.f),
  15.  
  16.     //TEXCOORDS
  17.     glm::vec2(0.f, 1.f),
  18.     glm::vec2(0.f, 0.f),
  19.     glm::vec2(1.f, 0.f)
  20.  
  21. };
  22.  
  23.   unsigned nrOfVertices = sizeof(vertices) / sizeof(Vertex);
  24.  
  25. GLuint indices[] = {
  26.  
  27.     0, 1, 2 //no comma here
  28.  
  29. };
  30.  
  31.  
  32.  
  33.  
  34.  
  35. bool loadShaders(GLuint &program) {
  36.  
  37.  
  38.     bool loadSuccess = true;
  39.     int infoLog(512);
  40.     GLint success;
  41.  
  42.     std::string temp = "";
  43.     std::string src = "";
  44.     std::ifstream in_file;
  45.  
  46.  
  47.     //VERTEX
  48.     in_file.open("fragment.glsl");
  49.  
  50.  
  51.     if (in_file.is_open())
  52.     {
  53.         while (std::getline(in_file, temp))
  54.         {
  55.             src += temp + "\n";
  56.         }
  57.     }
  58.     else
  59.     {
  60.         {
  61.             std::cout << "ERROR::LOADSHADERS::COULD_NOT_OPEN";
  62.             return false;
  63.         }
  64.  
  65.         in_file.close();
  66.  
  67.         //COMPILE SHADER
  68.         GLuint vertexShader = glCreateShader(GL_FRAGMENT_SHADER);
  69.         const GLchar* vertSrc = src.c_str();
  70.         glShaderSource(vertexShader, 1, &vertSrc, NULL);
  71.         glCompileShader(vertexShader);
  72.  
  73.         glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
  74.         if (!success)
  75.         {
  76.             //glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
  77.             std::cout << "ERROR::LOADSHADERS::COULD_NOT_COMPILE_SHADERS" << "\n";
  78.             //std::cout << infoLog << "\n";
  79.             return false;
  80.         }
  81.  
  82.         temp = "";
  83.         src = "";
  84.  
  85.         //FRAGMENT
  86.  
  87.         in_file.open("vertex_core.glsl");
  88.  
  89.  
  90.         if (in_file.is_open())
  91.         {
  92.             while (std::getline(in_file, temp))
  93.             {
  94.                 src += temp + "\n";
  95.             }
  96.         }
  97.         else
  98.         {
  99.             std::cout << "ERROR::LOADSHADERS::COULD_NOT_OPEN" << "\n";
  100.             return false;
  101.         }
  102.  
  103.         in_file.close();
  104.  
  105.         //COMPILE SHADER
  106.         GLuint fragment = glCreateShader(GL_FRAGMENT_SHADER);
  107.         const GLchar* fragSrc = src.c_str();
  108.         glShaderSource(fragment, 1, &fragSrc, NULL);
  109.         glCompileShader(fragment);
  110.  
  111.         glGetShaderiv(fragment, GL_COMPILE_STATUS, &success);
  112.         if (!success)
  113.         {
  114. //          glGetShaderInfoLog(fragment, 512, NULL, infoLog);
  115.             std::cout << "ERROR::LOADSHADERS::COULD_NOT_COMPILE_SHADERS" << "\n";
  116.             //std::cout << infoLog << "\n";
  117.             return false;
  118.         }
  119.  
  120.         temp = "";
  121.         src = "";
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.         //Program
  129.         program = glCreateProgram();
  130.  
  131.         glAttachShader(program, vertexShader);
  132.         glAttachShader(program, fragment);
  133.  
  134.         glLinkProgram(program);
  135.  
  136.         glGetProgramiv(program, GL_LINK_STATUS, &success);
  137.  
  138.         if (!success)
  139.         {
  140. //          glGetProgramInfoLog(program, 512, NULL, infoLog);
  141.             std::cout << "ERROR::LINKSHADERS::COULD_NOT_LINK_SHADERS" << "\n";
  142.         //  std::cout << infoLog << "\n";
  143.         }
  144.  
  145.  
  146.         //END
  147.         glUseProgram(0);
  148.         glDeleteShader(vertexShader);
  149.         glDeleteShader(fragment);
  150.  
  151.         return loadSuccess;
  152.     }
  153. }
  154.  
  155.  
  156.  
  157. bool updateInput(GLFWwindow* window) {
  158.  
  159.     if (glfwGetKey(window, GLFW_KEY_DELETE) == GLFW_PRESS)
  160.     {
  161.         glfwTerminate();
  162.         return true;
  163.     }
  164.     return false;
  165.  
  166. }
  167.  
  168.  
  169. int main() {
  170.  
  171.     if (!glfwInit()) {
  172.         fprintf(stderr, "Failed to initialize GLFW\n");
  173.         return -1;
  174.     }
  175.  
  176.     const int WINDOW_WIDTH = 1920;
  177.     const int WINDOW_HEIGHT = 1080;
  178.     const int framebufferwidth = 0;
  179.     const int framebufferheight = 0;
  180.  
  181.     glfwWindowHint(GLFW_SAMPLES, 4);
  182.     glfwWindowHint(GLFW_OPENGL_PROFILE,
  183.         GLFW_OPENGL_CORE_PROFILE);
  184.     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
  185.     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 4);
  186.     glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.     GLFWmonitor* monitor = glfwGetPrimaryMonitor();
  198.    
  199.     //if you use the above GLFWmonitor, and replace the first NULL on the window instantiation, it allows a strange version of fullscreen.
  200.     //NOTE TO SELF: try to modify and use this new-founded trick to make a fullscreen feature in games
  201.  
  202.  
  203.     GLFWwindow* window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "Ache Engine", monitor, NULL);
  204.  
  205.     #pragma region CREATE WINDOW
  206.        
  207.     try
  208.     {
  209.    
  210.         //for mac support
  211.         //glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
  212.  
  213.  
  214.        
  215.         glfwGetFramebufferSize(window, framebufferwidth, framebufferheight);
  216.         glViewport(0, 0, framebufferwidth, framebufferheight);
  217.  
  218.         glfwMakeContextCurrent(window); //IMPORTANT FOR GLEW
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.         glewExperimental = GL_TRUE;
  229.  
  230.         if (glewInit() != GLEW_OK)
  231.         {
  232.             std::cout << "error initializing glew\n";
  233.             //glfwTerminate();
  234.  
  235.         }
  236.  
  237.  
  238.  
  239.         //OPENGL OPTIONS/SETTINGS
  240.  
  241.  
  242.         glEnable(GL_DEPTH_TEST);
  243.         glEnable(GL_CULL_FACE);
  244.         glCullFace(GL_BACK);
  245.         glFrontFace(GL_CCW);
  246.  
  247.  
  248.         glEnable(GL_BLEND);
  249.         glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  250.  
  251.         //to fill a drawn shapes whole body with a color
  252.         glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  253.         //to fill a drawn shapes outline with a color
  254.             //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  255.  
  256.  
  257.         //SHADERS
  258.  
  259.         #pragma region SHADERS_01
  260.    
  261.         bool b = loadShaders(core_program);
  262.         if (b == false)
  263.         {
  264.             glfwTerminate();
  265.                
  266.         }
  267.         else
  268.         {
  269.                 //DO NOTHING
  270.         }
  271.         #pragma endregion
  272.  
  273.  
  274.         //VAO, VBO, EBO
  275.         try
  276.         {
  277.             glCreateVertexArrays(1, &VAO);
  278.             glBindVertexArray(VAO);
  279.  
  280.             GLuint VBO;
  281.             glGenBuffers(1, &VBO);
  282.             glBindBuffer(GL_ARRAY_BUFFER, VBO);
  283.             glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  284.  
  285.  
  286.             GLuint EBO;
  287.             glGenBuffers(1, &EBO);
  288.             glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
  289.             glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
  290.  
  291.             GLuint attribloc = glGetAttribLocation(core_program, "vertex_position");
  292.  
  293.             //POSITION
  294.             glVertexAttribPointer(attribloc, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*)offsetof(Vertex, position));
  295.             glEnableVertexAttribArray(attribloc);
  296.  
  297.  
  298.             //COLOR
  299.             glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*)offsetof(Vertex, color));
  300.             glEnableVertexAttribArray(1);
  301.  
  302.  
  303.             //TEXCOORD
  304.             glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*)offsetof(Vertex, texcoord));
  305.             glEnableVertexAttribArray(2);
  306.  
  307.  
  308.  
  309.             glBindVertexArray(0);
  310.         }
  311.         catch (const std::exception&)
  312.         {
  313.                
  314.         }
  315.        
  316.  
  317.  
  318.     }
  319.     catch (const std::exception&)
  320.     {
  321.            
  322.     }
  323.    
  324.  
  325.     #pragma endregion
  326.  
  327.     #pragma region GAME LOOP
  328.  
  329.  
  330.     glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);
  331.  
  332.     do {
  333.         // Clear the screen. It's not mentioned before Tutorial 02, but it can cause flickering, so it's there nonetheless.
  334.         glClear(GL_COLOR_BUFFER_BIT);
  335.  
  336.  
  337.  
  338.         //DRAW THINGS HERE
  339.         // Draw nothing, see you in tutorial 2 !
  340.  
  341.         // Swap buffers
  342.         glfwSwapBuffers(window);
  343.         glfwPollEvents();
  344.  
  345.     } // Check if the ESC key was pressed or the window was closed
  346.  
  347.  
  348.     while (glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS & glfwWindowShouldClose(window) == 0)
  349.         ; {
  350.              
  351.  
  352.         updateInput(window);
  353.  
  354.         glUseProgram(core_program);
  355.  
  356.  
  357.         //BIND VERTEX ARRAY OBJECT
  358.          
  359.  
  360.         glBindVertexArray(VAO);
  361.  
  362.         glDrawElements(GL_TRIANGLES, nrOfVertices, GL_UNSIGNED_INT, 0);
  363.  
  364.  
  365.  
  366.  
  367.  
  368.     }
  369.  
  370.  
  371.     #pragma endregion
  372.  
  373.  
  374.  
  375.  
  376.  
  377.     glfwDestroyWindow(window);
  378.     glDeleteProgram(core_program);
  379.  
  380.     glfwTerminate();
  381.  
  382.  
  383.     return 0;
  384. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement