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

@@ -3,12 +3,11 @@
layout (location = 0) in vec2 aPos; layout (location = 0) in vec2 aPos;
layout (location = 1) in vec2 texCoord; layout (location = 1) in vec2 texCoord;
uniform mat4 projection; uniform mat4 MVP;
uniform mat4 view;
out vec2 TexCoord; out vec2 TexCoord;
void main() { 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; TexCoord = texCoord;
} }

View File

@@ -45,6 +45,12 @@ glm::mat4 OrtographicCamera::getProjectionMatrix() {
return projection; return projection;
} }
glm::mat4 OrtographicCamera::getCombinedMatrix() {
glm::mat4 combined;
combined = getProjectionMatrix() * getViewMatrix();
return combined;
}
void OrtographicCamera::update() { void OrtographicCamera::update() {
} }

View File

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

View File

@@ -9,6 +9,7 @@ DarkRP2D::~DarkRP2D() {
delete obj; delete obj;
delete inputHandler; delete inputHandler;
delete camera; delete camera;
delete renderer;
} }
void DarkRP2D::create () { void DarkRP2D::create () {
@@ -18,6 +19,8 @@ void DarkRP2D::create () {
assets->loadShader("vert.shader","frag.shader",nullptr,"defaultShader"); assets->loadShader("vert.shader","frag.shader",nullptr,"defaultShader");
assets->loadShader("bitmapvert.shader","bitmapfrag.shader",nullptr,"bitmapShader"); assets->loadShader("bitmapvert.shader","bitmapfrag.shader",nullptr,"bitmapShader");
renderer = new Renderer();
std::vector<Vertex2D> vertices({ 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(0.0f,1.0f)},
Vertex2D{glm::vec2(0.5f,-0.5f), glm::vec2(1.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"); font = new BitmapFont("arial.ttf");
camera = new OrtographicCamera(); camera = new OrtographicCamera();
glClearColor(1.f,1.f,1.f,1.f);
} }
void DarkRP2D::loop(unsigned int delta) { void DarkRP2D::loop(unsigned int delta) {
@@ -72,14 +73,13 @@ void DarkRP2D::update(unsigned int delta) {
} }
void DarkRP2D::render(unsigned int delta) { void DarkRP2D::render(unsigned int delta) {
glClear(GL_COLOR_BUFFER_BIT); renderer->clear();
//Drawing //Drawing
Shader defaultShader = assets->getShader("defaultShader"); Shader defaultShader = assets->getShader("defaultShader");
defaultShader.SetMatrix4("view",camera->getViewMatrix(),true); defaultShader.SetMatrix4("MVP",camera->getCombinedMatrix(),true);
defaultShader.SetMatrix4("projection",camera->getProjectionMatrix(),true);
//Draw Mesh //Draw Mesh
obj->draw(); renderer->draw(*obj,defaultShader);
//texttest //texttest
Shader bitmapShader = assets->getShader("bitmapShader"); Shader bitmapShader = assets->getShader("bitmapShader");

View File

@@ -6,6 +6,7 @@ class DarkRP2D;
#include <vector> #include <vector>
#include "Assets.h" #include "Assets.h"
#include "Renderer.h"
#include "Mesh.h" #include "Mesh.h"
#include "InputHandler.h" #include "InputHandler.h"
#include "BitmapFont.h" #include "BitmapFont.h"
@@ -15,6 +16,7 @@ class DarkRP2D {
private: private:
SDL_Window* gWindow; SDL_Window* gWindow;
Assets *assets; Assets *assets;
Renderer* renderer;
Mesh *obj; Mesh *obj;
InputHandler *inputHandler; InputHandler *inputHandler;
BitmapFont *font; BitmapFont *font;

View File

@@ -43,11 +43,14 @@ Mesh::~Mesh() {
glDeleteBuffers(1,&VAO); glDeleteBuffers(1,&VAO);
} }
void Mesh::draw() { unsigned int Mesh::getIndicesCount() const {
//Bind Texture return indices.size();
texture.Bind(); }
//draw Mesh
glBindVertexArray(this->VAO); void Mesh::bindVAO() const {
glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, 0); glBindVertexArray(this->VAO);
glBindVertexArray(0); }
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(std::vector<Vertex2D> vertices, std::vector<unsigned int> indices,Texture2D textures);
~Mesh(); ~Mesh();
void draw(); unsigned int getIndicesCount() const;
void bindVAO() const;
void bindTexture() const;
}; };
#endif #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