diff --git a/shaders/vert.shader b/shaders/vert.shader index 19c660f..5c587af 100644 --- a/shaders/vert.shader +++ b/shaders/vert.shader @@ -3,12 +3,11 @@ layout (location = 0) in vec2 aPos; layout (location = 1) in vec2 texCoord; -uniform mat4 projection; -uniform mat4 view; +uniform mat4 MVP; out vec2 TexCoord; void main() { - gl_Position = projection * view * vec4(aPos.xy,0.0,1.0); + gl_Position = MVP * vec4(aPos.xy,0.0,1.0); TexCoord = texCoord; } diff --git a/src/Camera.cpp b/src/Camera.cpp index 91d5fa2..6cdd3b7 100644 --- a/src/Camera.cpp +++ b/src/Camera.cpp @@ -45,6 +45,12 @@ glm::mat4 OrtographicCamera::getProjectionMatrix() { return projection; } +glm::mat4 OrtographicCamera::getCombinedMatrix() { + glm::mat4 combined; + combined = getProjectionMatrix() * getViewMatrix(); + return combined; +} + void OrtographicCamera::update() { } \ No newline at end of file diff --git a/src/Camera.h b/src/Camera.h index c934057..fe0d730 100644 --- a/src/Camera.h +++ b/src/Camera.h @@ -24,6 +24,7 @@ class OrtographicCamera { glm::mat4 getViewMatrix(); glm::mat4 getProjectionMatrix(); + glm::mat4 getCombinedMatrix(); void update(); }; diff --git a/src/DarkRP2D.cpp b/src/DarkRP2D.cpp index 0a15b95..b26cae1 100644 --- a/src/DarkRP2D.cpp +++ b/src/DarkRP2D.cpp @@ -9,6 +9,7 @@ DarkRP2D::~DarkRP2D() { delete obj; delete inputHandler; delete camera; + delete renderer; } void DarkRP2D::create () { @@ -18,6 +19,8 @@ void DarkRP2D::create () { assets->loadShader("vert.shader","frag.shader",nullptr,"defaultShader"); assets->loadShader("bitmapvert.shader","bitmapfrag.shader",nullptr,"bitmapShader"); + renderer = new Renderer(); + std::vector vertices({ Vertex2D{glm::vec2(-0.5f,-0.5f), glm::vec2(0.0f,1.0f)}, Vertex2D{glm::vec2(0.5f,-0.5f), glm::vec2(1.0f,1.0f)}, @@ -34,8 +37,6 @@ void DarkRP2D::create () { font = new BitmapFont("arial.ttf"); camera = new OrtographicCamera(); - - glClearColor(1.f,1.f,1.f,1.f); } void DarkRP2D::loop(unsigned int delta) { @@ -72,14 +73,13 @@ void DarkRP2D::update(unsigned int delta) { } void DarkRP2D::render(unsigned int delta) { - glClear(GL_COLOR_BUFFER_BIT); + renderer->clear(); //Drawing Shader defaultShader = assets->getShader("defaultShader"); - defaultShader.SetMatrix4("view",camera->getViewMatrix(),true); - defaultShader.SetMatrix4("projection",camera->getProjectionMatrix(),true); + defaultShader.SetMatrix4("MVP",camera->getCombinedMatrix(),true); //Draw Mesh - obj->draw(); + renderer->draw(*obj,defaultShader); //texttest Shader bitmapShader = assets->getShader("bitmapShader"); diff --git a/src/DarkRP2D.h b/src/DarkRP2D.h index f117762..6d1794b 100644 --- a/src/DarkRP2D.h +++ b/src/DarkRP2D.h @@ -6,6 +6,7 @@ class DarkRP2D; #include #include "Assets.h" +#include "Renderer.h" #include "Mesh.h" #include "InputHandler.h" #include "BitmapFont.h" @@ -15,6 +16,7 @@ class DarkRP2D { private: SDL_Window* gWindow; Assets *assets; + Renderer* renderer; Mesh *obj; InputHandler *inputHandler; BitmapFont *font; diff --git a/src/Mesh.cpp b/src/Mesh.cpp index d9ba3f4..b395002 100644 --- a/src/Mesh.cpp +++ b/src/Mesh.cpp @@ -43,11 +43,14 @@ Mesh::~Mesh() { glDeleteBuffers(1,&VAO); } -void Mesh::draw() { - //Bind Texture - texture.Bind(); - //draw Mesh - glBindVertexArray(this->VAO); - glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, 0); - glBindVertexArray(0); +unsigned int Mesh::getIndicesCount() const { + return indices.size(); +} + +void Mesh::bindVAO() const { + glBindVertexArray(this->VAO); +} + +void Mesh::bindTexture() const { + texture.Bind(); } diff --git a/src/Mesh.h b/src/Mesh.h index b0918f7..7720978 100644 --- a/src/Mesh.h +++ b/src/Mesh.h @@ -25,8 +25,9 @@ class Mesh { Mesh(std::vector vertices, std::vector indices,Texture2D textures); ~Mesh(); - void draw(); - + unsigned int getIndicesCount() const; + void bindVAO() const; + void bindTexture() const; }; #endif diff --git a/src/Renderer.cpp b/src/Renderer.cpp new file mode 100644 index 0000000..c65bc41 --- /dev/null +++ b/src/Renderer.cpp @@ -0,0 +1,18 @@ +#include "Renderer.h" +#include + +Renderer::Renderer() { + glClearColor(1.f,1.f,1.f,1.f); +} + +void Renderer::draw(const Mesh& mesh, Shader& shader) { + //Bind texture of mesh + mesh.bindTexture(); + mesh.bindVAO(); + //draw Mesh + glDrawElements(GL_TRIANGLES, mesh.getIndicesCount(), GL_UNSIGNED_INT, 0); +} + +void Renderer::clear() const { + glClear(GL_COLOR_BUFFER_BIT); +} \ No newline at end of file diff --git a/src/Renderer.h b/src/Renderer.h new file mode 100644 index 0000000..c0b9bea --- /dev/null +++ b/src/Renderer.h @@ -0,0 +1,14 @@ +#ifndef RENDERER_H +#define RENDERER_H + +#include "Mesh.h" +#include "Shader.h" + +class Renderer { + public: + Renderer(); + void draw(const Mesh& mesh, Shader& shader); + void clear() const; +}; + +#endif \ No newline at end of file