diff --git a/main.cpp b/main.cpp index eee3867..e3dbf07 100644 --- a/main.cpp +++ b/main.cpp @@ -1,18 +1,134 @@ +#include #include "glad/glad.h" #include "GLFW/glfw3.h" -int main(int argc, char** const argv){ +void frameBufferSizeChange(GLFWwindow *window, int width, int height) { + glViewport(0, 0, width, height); +} + +void processInput(GLFWwindow *window) { + if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) { + glfwSetWindowShouldClose(window, true); + } +} + +void CheckShader(unsigned int shaderIndex, bool isPorgram = false) { + int successful; + char logInfo[512]; + if (isPorgram) { + glad_glGetProgramiv(shaderIndex, GL_LINK_STATUS, &successful); + } else { + glad_glGetShaderiv(shaderIndex, GL_COMPILE_STATUS, &successful); + } + if (!successful){ + if(isPorgram){ + glad_glGetProgramInfoLog(shaderIndex, 512, nullptr, logInfo); + }else{ + glad_glGetShaderInfoLog(shaderIndex, 512, nullptr, logInfo); + } + std::cout<(error); + } + + float vertices[] = { + -0.5, 0.5f, 0.0f, + 0.5f, 0.5f, 0.0f, + 0.5f, -0.5f, 0.0f, + -0.5f, -0.5f, 0.0f, + }; + + unsigned int indices[] = { + 0, 1, 3, + 1, 2, 3, + }; + + unsigned int VAO, VBO, EBO; + glGenVertexArrays(1, &VAO); + glGenBuffers(1, &VBO); + glGenBuffers(1, &EBO); + + glBindVertexArray(VAO); + glBindBuffer(GL_ARRAY_BUFFER, VBO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); + + glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void *) 0); + + glEnableVertexAttribArray(0); + glBindVertexArray(0); + + + unsigned int vertexShader, fragmentShader, shaderProgram; + vertexShader = glCreateShader(GL_VERTEX_SHADER); + fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); + shaderProgram = glCreateProgram(); + glShaderSource(vertexShader, 1, &vertexShaderSource, nullptr); + CheckShader(vertexShader); + glShaderSource(fragmentShader, 1, &fragmentShaderSource, nullptr); + CheckShader(fragmentShader); + + glAttachShader(shaderProgram, vertexShader); + glAttachShader(shaderProgram, fragmentShader); + glLinkProgram(shaderProgram); + CheckShader(shaderProgram, true); + + glDeleteShader(vertexShader); + glDeleteShader(fragmentShader); + + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + + while (!glfwWindowShouldClose(window)) { + processInput(window); + + glClearColor(.2f, .3f, .3f, 1.0f); + glClear(GL_COLOR_BUFFER_BIT); + + glUseProgram(shaderProgram); + glBindVertexArray(VAO); +// glDrawArrays(GL_TRIANGLES, 0, 3); + glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); + glfwSwapBuffers(window); + glfwPollEvents(); + } + + glDeleteVertexArrays(1, &VAO); + glDeleteBuffers(1, &VBO); + glDeleteProgram(shaderProgram); + + glfwTerminate(); return 0; } \ No newline at end of file