Fixed all my pointers
This commit is contained in:
@ -7,10 +7,9 @@
|
||||
|
||||
using namespace Dawn;
|
||||
|
||||
BackBufferRenderTarget::BackBufferRenderTarget(
|
||||
std::weak_ptr<RenderManager> renderManager
|
||||
) {
|
||||
this->renderManager = renderManager;
|
||||
BackBufferRenderTarget::BackBufferRenderTarget(RenderManager &renderManager) :
|
||||
renderManager(renderManager)
|
||||
{
|
||||
}
|
||||
|
||||
float_t BackBufferRenderTarget::getWidth() {
|
||||
|
@ -6,18 +6,19 @@
|
||||
#pragma once
|
||||
#include "dawnopengl.hpp"
|
||||
#include "display/RenderTarget.hpp"
|
||||
#include "display/RenderManager.hpp"
|
||||
|
||||
namespace Dawn {
|
||||
class RenderManager;
|
||||
|
||||
class BackBufferRenderTarget : public RenderTarget {
|
||||
private:
|
||||
std::weak_ptr<RenderManager> renderManager;
|
||||
RenderManager &renderManager;
|
||||
float_t width = 1;
|
||||
float_t height = 1;
|
||||
float_t height = 1;
|
||||
struct Color clearColor = COLOR_CORNFLOWER_BLUE;
|
||||
|
||||
public:
|
||||
BackBufferRenderTarget(std::weak_ptr<RenderManager> renderManager);
|
||||
BackBufferRenderTarget(RenderManager &renderManager);
|
||||
|
||||
float_t getWidth() override;
|
||||
float_t getHeight() override;
|
||||
|
@ -8,6 +8,7 @@ target_sources(${DAWN_TARGET_NAME}
|
||||
PRIVATE
|
||||
RenderManager.cpp
|
||||
BackBufferRenderTarget.cpp
|
||||
StandardRenderPipeline.cpp
|
||||
)
|
||||
|
||||
# Subdirs
|
||||
|
@ -6,28 +6,31 @@
|
||||
#include "dawnopengl.hpp"
|
||||
#include "game/DawnGame.hpp"
|
||||
#include "display/RenderManager.hpp"
|
||||
#include "display/BackBufferRenderTarget.hpp"
|
||||
#include "display/StandardRenderPipeline.hpp"
|
||||
|
||||
using namespace Dawn;
|
||||
|
||||
RenderManager::RenderManager(std::weak_ptr<DawnGame> game) {
|
||||
this->game = game;
|
||||
this->renderTarget=std::make_shared<BackBufferRenderTarget>(weak_from_this());
|
||||
RenderManager::RenderManager(DawnGame &game) :
|
||||
IRenderManager(game),
|
||||
backBuffer(*this)
|
||||
{
|
||||
this->standardRenderPipeline=std::make_shared<StandardRenderPipeline>(*this);
|
||||
}
|
||||
|
||||
void RenderManager::init() {
|
||||
this->standardRenderPipeline->init();
|
||||
}
|
||||
|
||||
std::shared_ptr<RenderTarget> RenderManager::getBackBuffer() {
|
||||
return this->renderTarget;
|
||||
RenderTarget & RenderManager::getBackBuffer() {
|
||||
return this->backBuffer;
|
||||
}
|
||||
|
||||
RenderPipeline & RenderManager::getRenderPipeline() {
|
||||
return *this->standardRenderPipeline;
|
||||
}
|
||||
|
||||
void RenderManager::update() {
|
||||
this->getBackBuffer()->bind();
|
||||
this->getBackBuffer()->clear(
|
||||
RENDER_TARGET_CLEAR_FLAG_COLOR |
|
||||
RENDER_TARGET_CLEAR_FLAG_DEPTH
|
||||
);
|
||||
this->getRenderPipeline().render();
|
||||
}
|
||||
|
||||
RenderManager::~RenderManager() {
|
||||
|
@ -5,26 +5,24 @@
|
||||
|
||||
#pragma once
|
||||
#include "display/_RenderManager.hpp"
|
||||
#include "display/BackBufferRenderTarget.hpp"
|
||||
|
||||
namespace Dawn {
|
||||
class BackBufferRenderTarget;
|
||||
class StandardRenderPipeline;
|
||||
|
||||
class RenderManager :
|
||||
public IRenderManager,
|
||||
public std::enable_shared_from_this<RenderManager>
|
||||
{
|
||||
class RenderManager : public IRenderManager {
|
||||
private:
|
||||
std::shared_ptr<StandardRenderPipeline> standardRenderPipeline;
|
||||
|
||||
public:
|
||||
std::shared_ptr<BackBufferRenderTarget> renderTarget;
|
||||
|
||||
BackBufferRenderTarget backBuffer;
|
||||
|
||||
/**
|
||||
* Construct a new RenderManager for a game instance.
|
||||
*
|
||||
* @param game Game instance this render manager belongs to.
|
||||
*/
|
||||
RenderManager(std::weak_ptr<DawnGame> game);
|
||||
|
||||
std::shared_ptr<RenderTarget> getBackBuffer() override;
|
||||
RenderManager(DawnGame &game);
|
||||
RenderTarget & getBackBuffer() override;
|
||||
RenderPipeline & getRenderPipeline() override;
|
||||
void init() override;
|
||||
void update() override;
|
||||
|
||||
|
55
src/dawnopengl/display/StandardRenderPipeline.cpp
Normal file
55
src/dawnopengl/display/StandardRenderPipeline.cpp
Normal file
@ -0,0 +1,55 @@
|
||||
// Copyright (c) 2022 Dominic Masters
|
||||
//
|
||||
// This software is released under the MIT License.
|
||||
// https://opensource.org/licenses/MIT
|
||||
|
||||
#include "StandardRenderPipeline.hpp"
|
||||
#include "scene/components/Components.hpp"
|
||||
|
||||
using namespace Dawn;
|
||||
|
||||
StandardRenderPipeline::StandardRenderPipeline(RenderManager &renderManager) :
|
||||
RenderPipeline(renderManager)
|
||||
{
|
||||
}
|
||||
|
||||
void StandardRenderPipeline::renderScene(Scene &scene) {
|
||||
RenderTarget &backBuffer = this->renderManager.getBackBuffer();
|
||||
auto cameras = scene.findComponents<Camera>();
|
||||
std::shared_ptr<Camera> backBufferCamera = nullptr;
|
||||
|
||||
// First, render all non-backbuffer cameras.
|
||||
auto it = cameras.begin();
|
||||
while(it != cameras.end()) {
|
||||
RenderTarget &cameraTarget = (*it)->getRenderTarget();
|
||||
|
||||
// Leave the backbuffer camera(s) to last, so we skip them.
|
||||
if(&cameraTarget == &backBuffer) {
|
||||
backBufferCamera = *it;
|
||||
} else {
|
||||
this->renderSceneCamera(scene, **it);
|
||||
}
|
||||
|
||||
++it;
|
||||
}
|
||||
|
||||
// Now render the backbuffer camera.
|
||||
if(backBufferCamera == nullptr) return;
|
||||
this->renderSceneCamera(scene, *backBufferCamera);
|
||||
}
|
||||
|
||||
void StandardRenderPipeline::renderSceneCamera(Scene &scene, Camera &camera) {
|
||||
RenderTarget &renderTarget = camera.getRenderTarget();
|
||||
renderTarget.bind();
|
||||
renderTarget.clear(
|
||||
RENDER_TARGET_CLEAR_FLAG_DEPTH |
|
||||
RENDER_TARGET_CLEAR_FLAG_COLOR
|
||||
);
|
||||
|
||||
auto meshes = scene.findComponents<MeshRenderer>();
|
||||
auto it = meshes.begin();
|
||||
while(it != meshes.end()) {
|
||||
(*it)->mesh->draw(MESH_DRAW_MODE_TRIANGLES, 0, -1);
|
||||
++it;
|
||||
}
|
||||
}
|
18
src/dawnopengl/display/StandardRenderPipeline.hpp
Normal file
18
src/dawnopengl/display/StandardRenderPipeline.hpp
Normal file
@ -0,0 +1,18 @@
|
||||
// Copyright (c) 2022 Dominic Masters
|
||||
//
|
||||
// This software is released under the MIT License.
|
||||
// https://opensource.org/licenses/MIT
|
||||
|
||||
#pragma once
|
||||
#include "dawnopengl.hpp"
|
||||
#include "display/RenderPipeline.hpp"
|
||||
|
||||
namespace Dawn {
|
||||
class StandardRenderPipeline : public RenderPipeline {
|
||||
public:
|
||||
StandardRenderPipeline(RenderManager &renderManager);
|
||||
|
||||
void renderScene(Scene &scene) override;
|
||||
void renderSceneCamera(Scene &scene, Camera &camera) override;
|
||||
};
|
||||
}
|
@ -8,19 +8,19 @@
|
||||
|
||||
using namespace Dawn;
|
||||
|
||||
void TriangleMesh::createTriangleMesh(std::shared_ptr<Mesh> mesh) {
|
||||
mesh->createBuffers(3, 3);
|
||||
mesh->bufferPositions(0, std::array<glm::vec3, 3>{{
|
||||
void TriangleMesh::createTriangleMesh(Mesh &mesh) {
|
||||
mesh.createBuffers(3, 3);
|
||||
mesh.bufferPositions(0, std::array<glm::vec3, 3>{{
|
||||
glm::vec3(-1, 0, 0),
|
||||
glm::vec3(0, 1, 0),
|
||||
glm::vec3(1, 0, 0)
|
||||
}});
|
||||
mesh->bufferCoordinates(0, std::array<glm::vec2, 3>{{
|
||||
mesh.bufferCoordinates(0, std::array<glm::vec2, 3>{{
|
||||
glm::vec2(0, 0),
|
||||
glm::vec2(0, 1),
|
||||
glm::vec2(1, 0)
|
||||
}});
|
||||
mesh->bufferIndices(0, std::array<meshindice_t,3>{{
|
||||
mesh.bufferIndices(0, std::array<meshindice_t,3>{{
|
||||
0, 1, 2
|
||||
}});
|
||||
}
|
Reference in New Issue
Block a user