GraphicsTest/main.cpp
2024-08-04 23:18:45 -05:00

75 lines
2.3 KiB
C++

#define STB_IMAGE_IMPLEMENTATION
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <stb_image.h>
#include <funcs.h>
#include <shader.h>
#include <NBEngine/Window.h>
#include "data.cpp"
unsigned int gridX = 8, gridY = 8;
unsigned int sizeX=500, sizeY=500;
float* tileCoords = makeGridPoints(gridX, gridY);
unsigned int* tileIndices = makeGridIndex(gridX, gridY);
int main() {
NB::NBWindow myWindow(800, 600, "Howdy Naif!");
auto window = myWindow.getWindow();
myWindow.init();
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
// Create Data
float* screenCoords = scaleGridPoints(gridX, gridY, (float)sizeX/(float)800, (float)sizeY/(float)600, tileCoords);
// Use and set shader
Shader myShader("../shaders/vert.vs", "../shaders/frag.fs");
myShader.use();
// Create Vertex Buffer and bind it to array buffer, then specifiy how to use that data
unsigned int VAO, VBO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, 5*gridX*gridY*sizeof(float), screenCoords, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5*sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5*sizeof(float), (void*)(3*sizeof(float)));
glEnableVertexAttribArray(1);
delete[] screenCoords;
// Element Buffers
unsigned int EBO;
glGenBuffers(1, &EBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 6*(gridX-1)*(gridY-1)*sizeof(unsigned int), tileIndices, GL_STATIC_DRAW);
myShader.use();
glBindVertexArray(VAO);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glProvokingVertex(GL_FIRST_VERTEX_CONVENTION);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
// Window loop
while(!glfwWindowShouldClose(window)) {
// Input checking
processInput(window);
// Rendering Loop
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glDrawElements(GL_TRIANGLES, (gridX-1)*(gridY-1)*6, GL_UNSIGNED_INT, 0);
// Events and buffer swap
glfwPollEvents();
glfwSwapBuffers(window);
}
glfwTerminate();
delete[] tileCoords;
//delete[] tileIndices;
return 0;
}