Added new shader types
This commit is contained in:
parent
e99b623fec
commit
2a12a1f119
@ -26,8 +26,15 @@ void Input::HandleKeys(Window *window, int keys, int code, int action, int mods)
|
||||
}
|
||||
|
||||
void Input::HandleMousePosition(Window *window, double xpos, double ypos) {
|
||||
double relx = xpos - instance->lastx;
|
||||
double rely = ypos - instance->lasty;
|
||||
double relx, rely;
|
||||
if (instance->firstMousePositionUpdate) {
|
||||
relx = 0.0;
|
||||
rely = 0.0;
|
||||
instance->firstMousePositionUpdate = false;
|
||||
} else {
|
||||
relx = xpos - instance->lastx;
|
||||
rely = ypos - instance->lasty;
|
||||
}
|
||||
for (MousePositionHandler mousePositionHandler : instance->mousePositionHandlers) {
|
||||
mousePositionHandler(window, xpos, ypos, relx, rely);
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ public:
|
||||
std::vector<KeyHandler> keyHandlers;
|
||||
std::vector<MousePositionHandler> mousePositionHandlers;
|
||||
private:
|
||||
bool firstMousePositionUpdate = true;
|
||||
double lastx, lasty;
|
||||
Input();
|
||||
static void HandleKeys(Window *window, int key, int code, int action, int mods);
|
||||
|
@ -84,3 +84,7 @@ void Shader::UpdateModel(Matrix model) {
|
||||
void Shader::UpdateProjection(Matrix projection) {
|
||||
glUniformMatrix4fv(glGetUniformLocation(id, "PROJECTION"), 1, GL_FALSE, glm::value_ptr(projection));
|
||||
}
|
||||
|
||||
Name Shader::GetName() const {
|
||||
return "Unnamed Shader";
|
||||
}
|
||||
|
@ -19,6 +19,8 @@ public:
|
||||
void UpdateView(Matrix view);
|
||||
void UpdateModel(Matrix model);
|
||||
void UpdateProjection(Matrix projection);
|
||||
|
||||
virtual Name GetName() const;
|
||||
};
|
||||
|
||||
#endif /* SHADER_H */
|
||||
|
7
core/Shaders/FlatShader.cpp
Normal file
7
core/Shaders/FlatShader.cpp
Normal file
@ -0,0 +1,7 @@
|
||||
#include "FlatShader.h"
|
||||
|
||||
FlatShader::FlatShader() : Shader("shaders/flat.vert", "shaders/flat.frag") {}
|
||||
|
||||
void FlatShader::UpdateColor(Vector3 color) {
|
||||
glUniform3f(glGetUniformLocation(id, "color"), color.r, color.g, color.b);
|
||||
}
|
7
core/Shaders/FlatShader.h
Normal file
7
core/Shaders/FlatShader.h
Normal file
@ -0,0 +1,7 @@
|
||||
#include "Shader.h"
|
||||
|
||||
class FlatShader : public Shader {
|
||||
public:
|
||||
FlatShader();
|
||||
void UpdateColor(Vector3 color);
|
||||
};
|
@ -8,7 +8,7 @@
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#include "Shader.h"
|
||||
#include "Shaders/FlatShader.h"
|
||||
#include "Ball.h"
|
||||
#include "Camera.h"
|
||||
#include "Input.h"
|
||||
@ -22,7 +22,7 @@ const int height = 600;
|
||||
|
||||
Node *root;
|
||||
|
||||
void render(Node *curr, Shader shader, Matrix model) {
|
||||
void render(Node *curr, Shader *shader, Matrix model) {
|
||||
if (curr->IsDrawable()) {
|
||||
if (curr->IsTransformable()) {
|
||||
Spatial *spatial = dynamic_cast<Spatial*>(curr);
|
||||
@ -30,7 +30,7 @@ void render(Node *curr, Shader shader, Matrix model) {
|
||||
model = glm::rotate(model, spatial->transform.rotation.y, Vector3(0.0f, 1.0f, 0.0f));
|
||||
model = glm::rotate(model, spatial->transform.rotation.z, Vector3(0.0f, 0.0f, 1.0f));
|
||||
model = glm::translate(model, spatial->transform.position);
|
||||
shader.UpdateModel(model);
|
||||
shader->UpdateModel(model);
|
||||
}
|
||||
Drawable *drawable = dynamic_cast<Drawable*>(curr);
|
||||
drawable->Draw();
|
||||
@ -72,11 +72,12 @@ int main() {
|
||||
|
||||
Camera defaultCamera;
|
||||
|
||||
Shader shader("shaders/flat.vert", "shaders/flat.frag");
|
||||
shader.Use();
|
||||
FlatShader *shader = new FlatShader();
|
||||
shader->Use();
|
||||
shader->UpdateColor(Vector3(0.0f, 1.0f, 0.0f));
|
||||
|
||||
Matrix projection = glm::perspective(glm::radians(45.0f), 800.0f/600.0f, 0.1f, 100.0f);
|
||||
shader.UpdateProjection(projection);
|
||||
shader->UpdateProjection(projection);
|
||||
|
||||
// TODO Allow multiple scripting languages
|
||||
Lua *lua = new Lua();
|
||||
@ -97,7 +98,7 @@ int main() {
|
||||
view = glm::rotate(view, -camera->transform.rotation.y, Vector3(0.0f, 1.0f, 0.0f));
|
||||
view = glm::rotate(view, -camera->transform.rotation.z, Vector3(0.0f, 0.0f, 1.0f));
|
||||
view = glm::translate(view, -camera->transform.position);
|
||||
shader.UpdateView(view);
|
||||
shader->UpdateView(view);
|
||||
|
||||
// Render the scene tree
|
||||
render(root, shader, Matrix(1.0f));
|
||||
|
@ -2,6 +2,7 @@
|
||||
#define TYPES_H
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
#include <GL/glew.h>
|
||||
#include <GLFW/glfw3.h>
|
||||
@ -10,6 +11,7 @@
|
||||
typedef GLFWwindow Window;
|
||||
typedef glm::vec3 Vector3;
|
||||
typedef glm::mat4 Matrix;
|
||||
typedef std::string Name;
|
||||
typedef GLfloat cfloat;
|
||||
typedef GLuint Id;
|
||||
|
||||
|
@ -1,10 +1,9 @@
|
||||
#version 330 core
|
||||
|
||||
// uniform vec3 color;
|
||||
uniform vec3 color;
|
||||
|
||||
out vec4 FragColor;
|
||||
|
||||
void main() {
|
||||
//FragColor = vec4(color, 1.0);
|
||||
FragColor = vec4(1.0, 0.0, 0.0, 1.0);
|
||||
FragColor = vec4(color, 1.0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user