Implemented textures

This commit is contained in:
2025-07-30 08:16:37 -04:00
parent 7a7bfc4930
commit 69146b5447
10 changed files with 8106 additions and 18 deletions

View File

@@ -7,6 +7,7 @@
#include "LogUtils.hpp"
#include "ShaderProgramBuilder.hpp"
#include "stb_image.h"
#include "TimestampLog.hpp"
namespace ugly {
@@ -58,9 +59,14 @@ App::App(GLFWwindow *window):
glfwSetKeyCallback(mpWindow, key_callback_s);
float vertices[] = {
.0f, .5f, 1.f, 0.f, 0.f,
.5f, -.5f, 0.f, 1.f, 0.f,
-.5f, -.5f, 0.f, 0.f, 1.f
// Position(3), Color(2), TexCoord(2)
-0.75f, 0.75f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, // Top-left
0.75f, 0.75f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // Top-right
0.75f, -0.75f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, // Bottom-right
0.75f, -0.75f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, // Bottom-right
-0.75f, -0.75f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, // Bottom-left
-0.75f, 0.75f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f // Top-left
};
GLuint vbo;
@@ -73,23 +79,46 @@ App::App(GLFWwindow *window):
.attachFromFile(GL_FRAGMENT_SHADER, "assets/shaders/shader.frag")
.link();
glUseProgram(shaderProgram);
mShaderProgram = shaderProgram;
GLuint tex;
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
int x, y, n;
auto data = stbi_load("assets/textures/bliss.jpg", &x, &y, &n, 3);
if(data == nullptr) {
log("stbi_load() failed!");
}
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, x, y, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);
stbi_image_free(data);
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 5*sizeof(float), 0);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 5*sizeof(float), (void*)(2*sizeof(float)));
glEnableVertexAttribArray(1);
GLint posAttrib = glGetAttribLocation(shaderProgram, "inPos");
GLint colorAttrib = glGetAttribLocation(shaderProgram, "inColor");
GLint coordAttrib = glGetAttribLocation(shaderProgram, "inCoord");
glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 7*sizeof(float), 0);
glVertexAttribPointer(colorAttrib, 3, GL_FLOAT, GL_FALSE, 7*sizeof(float), (void*)(2*sizeof(float)));
glVertexAttribPointer(coordAttrib, 2, GL_FLOAT, GL_FALSE, 7*sizeof(float), (void*)(5*sizeof(float)));
glEnableVertexAttribArray(posAttrib);
glEnableVertexAttribArray(colorAttrib);
glEnableVertexAttribArray(coordAttrib);
}
void App::game_loop() {
GLint timeUniform = glGetUniformLocation(mShaderProgram, "time");
auto startTime = glfwGetTime();
while(!glfwWindowShouldClose(mpWindow)) {
glfwPollEvents();
glUniform1f(timeUniform, glfwGetTime() - startTime);
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDrawArrays(GL_TRIANGLES, 0, 6);
glfwSwapBuffers(mpWindow);
}