summaryrefslogtreecommitdiffhomepage
path: root/src/main.cpp
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2022-11-24 21:44:59 -0500
committerrealtradam <[email protected]>2022-11-24 21:44:59 -0500
commitf2a9e986afe980c6b32f7f40d1fe2b0294d86d90 (patch)
tree252b7e7a2a8fa5ff71b1b7953ec9af2492a2ea2d /src/main.cpp
parentf0f30c12fe919862ade380513c02c9845598ac46 (diff)
downloadOgle-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.cpp198
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();