Converted a couple more things to shared pointers.
This commit is contained in:
@ -5,32 +5,29 @@
|
||||
|
||||
#pragma once
|
||||
#include "util/flag.hpp"
|
||||
#include "RenderTarget.hpp"
|
||||
|
||||
#define RENDER_MANAGER_RENDER_FLAG_DEPTH_TEST FLAG_DEFINE(0)
|
||||
#define RENDER_MANAGER_RENDER_FLAG_BLEND FLAG_DEFINE(1)
|
||||
typedef flag_t renderflag_t;
|
||||
|
||||
namespace Dawn {
|
||||
class DawnGame;
|
||||
class RenderPipeline;
|
||||
class ShaderManager;
|
||||
class RenderTarget;
|
||||
|
||||
class IRenderManager {
|
||||
protected:
|
||||
renderflag_t renderFlags = 0;
|
||||
flag_t renderFlags = 0;
|
||||
|
||||
public:
|
||||
DawnGame *game;
|
||||
std::weak_ptr<DawnGame> game;
|
||||
|
||||
/**
|
||||
* Default constructor for a render manager instance.
|
||||
*
|
||||
* @param game Game that this render manager belongs to.
|
||||
*/
|
||||
IRenderManager(DawnGame *game) {
|
||||
assertNotNull(game, "IRenderManager::IRenderManager: Game cannot be null");
|
||||
this->game = game;
|
||||
IRenderManager() {
|
||||
}
|
||||
|
||||
/**
|
||||
@ -39,7 +36,7 @@ namespace Dawn {
|
||||
*
|
||||
* @return Shared pointer to the backbuffer render target.
|
||||
*/
|
||||
virtual RenderTarget * getBackBuffer() = 0;
|
||||
virtual std::shared_ptr<RenderTarget> getBackBuffer() = 0;
|
||||
|
||||
/**
|
||||
* Returns the current render pipeline intended to be used for rendering
|
||||
@ -61,14 +58,14 @@ namespace Dawn {
|
||||
*
|
||||
* @param renderFlags Render flags to use.
|
||||
*/
|
||||
virtual void setRenderFlags(renderflag_t renderFlags) = 0;
|
||||
virtual void setRenderFlags(flag_t renderFlags) = 0;
|
||||
|
||||
/**
|
||||
* Initialize / Start the Render Manager.
|
||||
*
|
||||
* @param game Game instance this render manager belongs to.
|
||||
*/
|
||||
virtual void init() = 0;
|
||||
virtual void init(std::weak_ptr<DawnGame> game) = 0;
|
||||
|
||||
/**
|
||||
* Perform a synchronous frame update on the render manager.
|
||||
|
@ -23,8 +23,11 @@ void RenderPipeline::init() {
|
||||
}
|
||||
|
||||
void RenderPipeline::render() {
|
||||
if(this->renderManager->game->scene != nullptr) {
|
||||
this->renderScene(this->renderManager->game->scene);
|
||||
auto game = this->renderManager->game.lock();
|
||||
assertNotNull(game, "RenderPipeline::render: Game cannot be null");
|
||||
|
||||
if(game->scene != nullptr) {
|
||||
this->renderScene(game->scene);
|
||||
}
|
||||
}
|
||||
|
||||
@ -58,7 +61,7 @@ void RenderPipeline::renderScene(Scene *scene) {
|
||||
// First, render all non-backbuffer cameras.
|
||||
auto it = cameras.begin();
|
||||
while(it != cameras.end()) {
|
||||
RenderTarget *cameraTarget = (*it)->getRenderTarget();
|
||||
auto cameraTarget = (*it)->getRenderTarget();
|
||||
|
||||
// Leave the backbuffer camera(s) to last, so we skip them. we do this so
|
||||
// that children framebuffers contain the CURRENT frame, not LAST frame.
|
||||
|
@ -19,7 +19,7 @@ namespace Dawn {
|
||||
int32_t start = 0;
|
||||
int32_t count = -1;
|
||||
float_t w = 0;
|
||||
renderflag_t renderFlags = RENDER_MANAGER_RENDER_FLAG_DEPTH_TEST;
|
||||
flag_t renderFlags = RENDER_MANAGER_RENDER_FLAG_DEPTH_TEST;
|
||||
enum MeshDrawMode drawMode = MESH_DRAW_MODE_TRIANGLES;
|
||||
|
||||
// Parameters
|
||||
|
Reference in New Issue
Block a user