Added Rendrerer class and camera optimization

This commit is contained in:
Julian Nießner
2018-05-08 11:43:47 +02:00
parent d9eb21a3e8
commit 1a6966f03a
9 changed files with 62 additions and 18 deletions

View File

@@ -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() {
}

View File

@@ -24,6 +24,7 @@ class OrtographicCamera {
glm::mat4 getViewMatrix();
glm::mat4 getProjectionMatrix();
glm::mat4 getCombinedMatrix();
void update();
};

View File

@@ -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<Vertex2D> 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");

View File

@@ -6,6 +6,7 @@ class DarkRP2D;
#include <vector>
#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;

View File

@@ -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();
}

View File

@@ -25,8 +25,9 @@ class Mesh {
Mesh(std::vector<Vertex2D> vertices, std::vector<unsigned int> indices,Texture2D textures);
~Mesh();
void draw();
unsigned int getIndicesCount() const;
void bindVAO() const;
void bindTexture() const;
};
#endif

18
src/Renderer.cpp Normal file
View File

@@ -0,0 +1,18 @@
#include "Renderer.h"
#include <GL/glew.h>
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);
}

14
src/Renderer.h Normal file
View File

@@ -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