Added Rendrerer class and camera optimization
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
17
src/Mesh.cpp
17
src/Mesh.cpp
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
18
src/Renderer.cpp
Normal 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
14
src/Renderer.h
Normal 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
|
||||||
Reference in New Issue
Block a user