Switch to translating the quad using a translation matrix

This commit is contained in:
Abdelrahman Said 2024-09-22 15:56:07 +01:00
parent ddf657d5ed
commit 8738f57c38
3 changed files with 23 additions and 20 deletions

View File

@ -3,8 +3,6 @@
in vec3 vert_colours; in vec3 vert_colours;
out vec4 color; out vec4 color;
uniform float u_offset;
void main() { void main() {
color = vec4(vert_colours.r, vert_colours.g + u_offset, vert_colours.b, 1.0f); color = vec4(vert_colours.r, vert_colours.g, vert_colours.b, 1.0f);
}; };

View File

@ -3,11 +3,11 @@
layout(location=0) in vec3 position; layout(location=0) in vec3 position;
layout(location=1) in vec3 vert_colour; layout(location=1) in vec3 vert_colour;
uniform float u_offset; uniform mat4 u_model;
out vec3 vert_colours; out vec3 vert_colours;
void main() { void main() {
vert_colours = vert_colour; vert_colours = vert_colour;
gl_Position = vec4(position.x, position.y + u_offset, position.z, 1.0f); gl_Position = u_model * vec4(position, 1.0f);
}; };

View File

@ -1,9 +1,13 @@
#include "glad/glad.h" #include "glad/glad.h"
#include "glm/gtc/type_ptr.hpp"
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include <SDL2/SDL_error.h> #include <SDL2/SDL_error.h>
#include <SDL2/SDL_video.h> #include <SDL2/SDL_video.h>
#include <SDL2/SDL_events.h> #include <SDL2/SDL_events.h>
#include <SDL2/SDL_keycode.h> #include <SDL2/SDL_keycode.h>
#include <glm/vec3.hpp>
#include <glm/mat4x4.hpp>
#include <glm/ext.hpp>
#include <cstdint> #include <cstdint>
#include <cstdio> #include <cstdio>
#include <string> #include <string>
@ -41,13 +45,13 @@ struct App {
// OpenGL refers to as element, hence the name Element Buffer Object // OpenGL refers to as element, hence the name Element Buffer Object
GLuint ebo; GLuint ebo;
float offset_modifier;
// offset value passed to shaders as uniform
float offset;
// offset uniform index
GLint u_offset_idx;
GLuint shader_program; GLuint shader_program;
float speed;
// Model matrix to be sent as uniform to the vertex shader
glm::mat4 model_mat;
GLint u_model_idx;
bool running; bool running;
}; };
@ -119,7 +123,8 @@ int init(App &app) {
glGetString(GL_SHADING_LANGUAGE_VERSION) glGetString(GL_SHADING_LANGUAGE_VERSION)
); );
app.offset_modifier = 0.02f; app.speed = 0.02f;
app.model_mat = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f));
return EXIT_CODE_SUCCESS; return EXIT_CODE_SUCCESS;
} }
@ -200,10 +205,10 @@ void create_graphics_pipeline(App &app) {
app.shader_program = create_shader_program(vs_source, fs_source); app.shader_program = create_shader_program(vs_source, fs_source);
const char *u_offset = "u_offset"; const char *u_model = "u_model";
app.u_offset_idx = glGetUniformLocation(app.shader_program, u_offset); app.u_model_idx = glGetUniformLocation(app.shader_program, u_model);
if (app.u_offset_idx < 0) { if (app.u_model_idx < 0) {
printf("Can't find uniform %s", u_offset); printf("Failed to find uniform %s\n", u_model);
} }
} }
@ -218,9 +223,9 @@ void run_main_loop(App &app) {
break; break;
case SDL_KEYDOWN: case SDL_KEYDOWN:
if (app.event.key.keysym.sym == SDLK_UP) { if (app.event.key.keysym.sym == SDLK_UP) {
app.offset += app.offset_modifier; app.model_mat = glm::translate(app.model_mat, glm::vec3(0.0f, app.speed, 0.0f));
} else if (app.event.key.keysym.sym == SDLK_DOWN) { } else if (app.event.key.keysym.sym == SDLK_DOWN) {
app.offset -= app.offset_modifier; app.model_mat = glm::translate(app.model_mat, glm::vec3(0.0f, -app.speed, 0.0f));
} }
} }
} }
@ -234,8 +239,8 @@ void run_main_loop(App &app) {
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
glUseProgram(app.shader_program); glUseProgram(app.shader_program);
if (app.u_offset_idx >= 0) { if (app.u_model_idx >= 0) {
glUniform1f(app.u_offset_idx, app.offset); glUniformMatrix4fv(app.u_model_idx, 1, GL_FALSE, glm::value_ptr(app.model_mat));
} }
// End pre draw setup // End pre draw setup