diff options
| author | realtradam <[email protected]> | 2022-11-24 21:44:59 -0500 |
|---|---|---|
| committer | realtradam <[email protected]> | 2022-11-24 21:44:59 -0500 |
| commit | f2a9e986afe980c6b32f7f40d1fe2b0294d86d90 (patch) | |
| tree | 252b7e7a2a8fa5ff71b1b7953ec9af2492a2ea2d /src/main.cpp | |
| parent | f0f30c12fe919862ade380513c02c9845598ac46 (diff) | |
| download | Ogle-f2a9e986afe980c6b32f7f40d1fe2b0294d86d90.tar.gz Ogle-f2a9e986afe980c6b32f7f40d1fe2b0294d86d90.zip | |
implemented proper batch rendering of quads and textures
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 198 |
1 files changed, 77 insertions, 121 deletions
diff --git a/src/main.cpp b/src/main.cpp index 2655f8c..c634ab5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,24 +3,10 @@ #include "input.hpp" #include "shader.hpp" -#include "texture.hpp" +#include "batch.hpp" #include <iostream> #include <cmath> -//#include <unistd.h> // use to print working directory -//#include <stdio.h> - -float vertices[] = { - // positions // colors // texture coords - 0.5f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, // top right - 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, // bottom right - -0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, // bottom left - -0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f // top left -}; -unsigned int indices[] = { // note that we start from 0! - 0, 1, 3, // first triangle - 1, 2, 3 // second triangle -}; void framebuffer_size_callback(GLFWwindow* window, int width, int height) { @@ -28,7 +14,6 @@ void framebuffer_size_callback(GLFWwindow* window, int width, int height) } int main() { - //printf("Current working dir: %s\n", get_current_dir_name()); glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // 4.6 is highest glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); @@ -55,90 +40,18 @@ int main() { Shader shader = Shader("src/shaders/default.vert", "src/shaders/default.frag"); - unsigned int VBO, VAO, EBO; - glGenBuffers(1, &VBO); // generate the buffer - glGenBuffers(1, &EBO); - - glGenVertexArrays(1, &VAO); // generate array - glBindVertexArray(VAO); // bind array to apply "settings" to it - - glBindBuffer(GL_ARRAY_BUFFER, VBO); // bind(activate) the buffer to the ARRAY_BUFFER - glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); // upload the data - - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); - - // position attribute - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0); // configure how the vertex array looks - glEnableVertexAttribArray(0); - // color attribute - glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3 * sizeof(float))); // configure how the vertex array looks - glEnableVertexAttribArray(1); - //texture attribute - glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float))); // configure how the vertex array looks - glEnableVertexAttribArray(2); //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); // wireframe mode - //{ - // int nrAttributes; - // glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nrAttributes); - // std::cout << "Maximum nr of vertex attributes supported: " << nrAttributes << std::endl; - //} - - // Image/Texture stuffs -// unsigned int texture1, texture2; -// glGenTextures(1, &texture1); -// glBindTexture(GL_TEXTURE_2D, texture1); -// // set the texture wrapping/filtering options (on the currently bound texture object) -// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); -// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); -// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); -// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); -// // load and generate the texture -// { -// int width, height, nrChannels; -// unsigned char *data = stbi_load("assets/container.jpg", &width, &height, &nrChannels, 0); -// if (data) -// { -// glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data); -// glGenerateMipmap(GL_TEXTURE_2D); -// } -// else -// { -// std::cout << "Failed to load texture" << std::endl; -// } -// stbi_image_free(data); -// } -// glGenTextures(2, &texture2); -// glBindTexture(GL_TEXTURE_2D, texture2); -// // set the texture wrapping/filtering options (on the currently bound texture object) -// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); -// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); -// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); -// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); -// // load and generate the texture -// { -// int width, height, nrChannels; -// unsigned char *data = stbi_load("assets/awesomeface.png", &width, &height, &nrChannels, 0); -// if (data) -// { -// glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); -// glGenerateMipmap(GL_TEXTURE_2D); -// } -// else -// { -// std::cout << "Failed to load texture" << std::endl; -// } -// stbi_image_free(data); -// } - Texture texture3 = Texture("assets/awesomeface.png", VAO, VBO); + Batch batch = Batch(); + Texture texture = Texture("assets/awesomeface.png"); shader.use(); - shader.setInt("texture1", 0); - shader.setInt("texture2", 1); float pi = 2.0f * acos(0.0f); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + // game loop while(!glfwWindowShouldClose(window)) { @@ -148,36 +61,79 @@ int main() { glClear(GL_COLOR_BUFFER_BIT); - //glUseProgram(shaderProgram); // this will activate the shader and use them for all subsequent shader and render calls shader.use(); - float timeValue = glfwGetTime(); - float greenValue = 1.0f;//(sin(timeValue) / 2.0f) + 0.5f; - shader.set4f("ourColor", 1.0f - greenValue, greenValue, (greenValue / 2.0f) + 0.25f, 1.0f); - - shader.set1f("offset_x", greenValue - 0.5); - - float sin_move0 = sin((timeValue) / 2.0f) / 2.0f; - float cos_move0 = cos((timeValue) / 2.0f) / 2.0f; - float sin_move1 = sin((timeValue + (1*pi)) / 2.0f) / 2.0f; - float cos_move1 = cos((timeValue + (1*pi)) / 2.0f) / 2.0f; - float sin_move2 = sin((timeValue + (2*pi)) / 2.0f) / 2.0f; - float cos_move2 = cos((timeValue + (2*pi)) / 2.0f) / 2.0f; - float sin_move3 = sin((timeValue + (3*pi)) / 2.0f) / 2.0f; - float cos_move3 = cos((timeValue + (3*pi)) / 2.0f) / 2.0f; - //glActiveTexture(GL_TEXTURE0); - //glBindTexture(GL_TEXTURE_2D, texture1); - //glActiveTexture(GL_TEXTURE1); - //glBindTexture(GL_TEXTURE_2D, texture2); - //glBindVertexArray(VAO); // activate the preconfigured settings - //glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); // :) - - texture3.draw(cos_move0, sin_move0, 0.5, 0.5); - texture3.draw(cos_move1, sin_move1, 0.5, 0.5); - texture3.draw(cos_move2, sin_move2, 0.5, 0.5); - texture3.draw(cos_move3, sin_move3, 0.5, 0.5); - //drawTexture(texture1, VAO, VBO, -0.5, -0.5, 0.5, 0.5); - glBindVertexArray(0); + batch.drawRectangle( + -0.5, + -0.5, + 1.0, + 1.0, + glm::vec4(0.3,0.3,1.0,1.0) + ); + batch.drawRectangle( + 0.5, + 0.5, + 1.0, + 1.0, + glm::vec4(1.0,0.3,0.3,1.0) + ); + batch.drawRectangle( + -0.5, + 0.5, + 1.0, + 1.0, + glm::vec4(1.0,0.3,1.0,1.0) + ); + batch.drawRectangle( + 0.5, + -0.5, + 1.0, + 1.0, + glm::vec4(1.0,1.0,0.3,1.0) + ); + batch.drawTexture( + texture, + -0.5, + -0.5, + 1.0, + 1.0, + glm::vec4(1.0,1.0,1.0,0.3) + ); + batch.drawTexture( + texture, + 0.5, + 0.5, + 1.0, + 1.0, + glm::vec4(1.0,1.0,1.0,0.3) + ); + batch.drawTexture( + texture, + -0.5, + 0.5, + 1.0, + 1.0, + glm::vec4(1.0,1.0,1.0,0.3) + ); + batch.drawTexture( + texture, + 0.5, + -0.5, + 1.0, + 1.0, + glm::vec4(1.0,1.0,1.0,0.3) + ); + batch.drawTexture( + texture, + 0.0, + 0.0, + 1.0, + 1.0, + glm::vec4(1.0,1.0,1.0,0.5) + ); + + batch.flush_batch(); // does the drawing + glfwSwapBuffers(window); glfwPollEvents(); |
