Switch to translating the quad using a translation matrix
This commit is contained in:
parent
ddf657d5ed
commit
8738f57c38
@ -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);
|
||||||
};
|
};
|
||||||
|
@ -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);
|
||||||
};
|
};
|
||||||
|
35
src/main.cc
35
src/main.cc
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user