Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "libs.h"
- Vertex vertices[] =
- {
- //Position //Color //Texcoord
- glm::vec3(-0.5f, 0.5f, 0.0f), glm::vec3(1.0f, 0.0f, 0.0f), glm::vec2(0.1f, 1.0f),
- glm::vec3(-0.5f, -0.5f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f), glm::vec2(0.0f, 0.0f),
- glm::vec3(0.5f, -0.5f, 0.0f), glm::vec3(0.0f, 0.0f, 1.0f), glm::vec2(1.0f, 0.0f),
- };
- unsigned nrOfVertices = sizeof(vertices) / sizeof(Vertex);
- GLuint indices[] =
- {
- 0, 1, 2,
- };
- unsigned nrOfIndices = sizeof(indices) / sizeof(GLuint);
- void updateInput(GLFWwindow* window)
- {
- if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
- {
- glfwSetWindowShouldClose(window, GLFW_TRUE);
- }
- }
- void frameBuffer_resize_callback(GLFWwindow* window, int fBW, int fBH)
- {
- glViewport(0, 0, fBW, fBH);
- }
- bool loadShaders(GLuint &program)
- {
- bool loadSuccess = true;
- char infoLog[512];
- GLint success;
- std::string temp = "";
- std::string src = "";
- std::ifstream in_file;
- //VERTEX
- in_file.open("vertex_core.glsl");
- if (in_file.is_open())
- {
- while (std::getline(in_file, temp))
- {
- src += temp + "\n";
- }
- }
- else
- {
- std::cout << "ERROR::LOADSHADERS::COULD_NOT_OPEN_VERTEX_FILE" << std::endl;
- loadSuccess = false;
- }
- in_file.close();
- GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
- const GLchar* vertSrc = src.c_str();
- glShaderSource(vertexShader, 1, &vertSrc, NULL);
- glCompileShader(vertexShader);
- glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
- if (!success)
- {
- glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
- std::cout << "ERROR::LOADSHADERS::COULD_NOT_COMPILE_VERTEX_FILE" << std::endl;
- std::cout << infoLog << "\n";
- loadSuccess = false;
- }
- temp = "";
- src = "";
- //Fragment
- in_file.open("fragment_core.glsl");
- if (in_file.is_open())
- {
- while (std::getline(in_file, temp))
- {
- src += temp + "\n";
- }
- }
- else
- {
- std::cout << "ERROR::LOADSHADERS::COULD_NOT_OPEN_FRAGMENT_FILE" << std::endl;
- loadSuccess = false;
- }
- in_file.close();
- GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
- const GLchar* fragSrc = src.c_str();
- glShaderSource(fragmentShader, 1, &fragSrc, NULL);
- glCompileShader(fragmentShader);
- glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
- if (!success)
- {
- glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);
- std::cout << "ERROR::LOADSHADERS::COULD_NOT_COMPILE_FRAGMENT_FILE" << std::endl;
- std::cout << infoLog << "\n";
- loadSuccess = false;
- }
- temp = "";
- src = "";
- //Program
- program = glCreateProgram();
- glAttachShader(program, vertexShader);
- glAttachShader(program, fragmentShader);
- glLinkProgram(program);
- glGetProgramiv(program, GL_LINK_STATUS, &success);
- if (!success)
- {
- glGetProgramInfoLog(program, 512, NULL, infoLog);
- std::cout << "ERROR::LOADSHADERS::COULD_NOT_LINK_PROGRAM" << std::endl;
- std::cout << infoLog << "\n";
- }
- //End
- glUseProgram(0);
- glDeleteShader(vertexShader);
- glDeleteShader(fragmentShader);
- return loadSuccess;
- }
- int main()
- {
- //INIT GLFW
- glfwInit();
- //CREATE WINDOW
- const int WINDOW_WIDTH = 640;
- const int WINDOW_HEIGHT = 480;
- int frameBufferWidth = 0;
- int frameBufferHeight = 0;
- glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
- glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
- glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 4);
- glfwWindowHint(GLFW_RESIZABLE, GL_TRUE);
- GLFWwindow* window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "Labwork 3", NULL, NULL);
- glfwSetFramebufferSizeCallback(window, frameBuffer_resize_callback);
- //glfwGetFramebufferSize(window, &frameBufferWidth, &frameBufferHeight);
- //glViewport(0, 0, frameBufferWidth, frameBufferHeight);
- glfwMakeContextCurrent(window);
- //INIT GLEW
- glewExperimental = GL_TRUE;
- //CHECK ERROR
- if (glewInit() != GLEW_OK)
- {
- std::cout << "ERROR::MAIN.CPP::GLEW_INIT_FAILED" << std::endl;
- glfwTerminate();
- }
- //OPENGL OPTIONS
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_CULL_FACE);
- glCullFace(GL_BACK);
- glFrontFace(GL_CCW);
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
- //SHADER INIT
- GLuint core_program;
- if (!loadShaders(core_program))
- {
- glfwTerminate();
- }
- //MODEL
- //VAO, VBO, EBO
- GLuint VAO;
- glCreateVertexArrays(1, &VAO);
- glBindVertexArray(VAO);
- //GEN VBO, BIND AND SEND DATA
- GLuint VBO;
- glGenBuffers(1, &VBO);
- glBindBuffer(GL_ARRAY_BUFFER, VBO);
- glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
- //GEN EBO, BIND AND SENND DATA
- GLuint EBO;
- glGenBuffers(1, &EBO);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
- glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
- //SET VERTEXATTRIBPOINTER AND ENABLE
- //Position
- glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*)offsetof(Vertex, position));
- glEnableVertexAttribArray(0);
- //Color
- glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*)offsetof(Vertex, color));
- glEnableVertexAttribArray(1);
- //Texcoord
- glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*)offsetof(Vertex, texcoord));
- glEnableVertexAttribArray(2);
- //BIND VAO 0
- glBindVertexArray(0);
- //TEXTURE INIT
- int image_width = 0;
- int image_height = 0;
- unsigned char* image = SOIL_load_image("Images/rock.png", &image_width, &image_height, NULL, SOIL_LOAD_RGBA);
- //MAIN LOOP
- while (!glfwWindowShouldClose(window))
- {
- //UPDATE INPUT
- glfwPollEvents();
- //UPDATE
- updateInput(window);
- //CLEAR
- glClearColor(0, 0, 0, 0);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- //USE A PRROGRAM
- glUseProgram(core_program);
- //BINDD VERTEX ARRAY OBJECT
- glBindVertexArray(VAO);
- //DRAW
- //glDrawArrays(GL_TRIANGLES, nrOfVertices, 0);
- glDrawElements(GL_TRIANGLES, nrOfIndices, GL_UNSIGNED_INT, 0);
- //END
- glfwSwapBuffers(window);
- glFlush();
- }
- //END OF PROGRAM
- glfwDestroyWindow(window);
- glfwTerminate();
- //DELETE PROGRAM
- glDeleteProgram(core_program);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement