Working on RenderTarget example

This commit is contained in:
2022-10-19 00:43:16 -07:00
parent a86574128d
commit f0cbae4cf8
17 changed files with 235 additions and 26 deletions

View File

@ -0,0 +1,46 @@
// Copyright (c) 2022 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#include "BackBufferRenderTarget.hpp"
using namespace Dawn;
BackBufferRenderTarget::BackBufferRenderTarget(
std::weak_ptr<RenderManager> renderManager
) {
this->renderManager = renderManager;
}
float_t BackBufferRenderTarget::getWidth() {
return this->width;
}
float_t BackBufferRenderTarget::getHeight() {
return this->height;
}
void BackBufferRenderTarget::setSize(float_t width, float_t height) {
this->width = width;
this->height = height;
}
void BackBufferRenderTarget::setClearColor(struct Color color) {
this->clearColor = color;
}
void BackBufferRenderTarget::clear(flag8_t clearFlags) {
glClearColor(
this->clearColor.r,
this->clearColor.g,
this->clearColor.b,
this->clearColor.a
);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
void BackBufferRenderTarget::bind() {
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glViewport(0, 0, (GLsizei)this->width, (GLsizei)this->height);
}

View File

@ -0,0 +1,32 @@
// 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/RenderTarget.hpp"
#include "display/RenderManager.hpp"
namespace Dawn {
class BackBufferRenderTarget : public RenderTarget {
private:
std::weak_ptr<RenderManager> renderManager;
float_t width = 1;
float_t height = 1;
struct Color clearColor = COLOR_CORNFLOWER_BLUE;
public:
BackBufferRenderTarget(std::weak_ptr<RenderManager> renderManager);
float_t getWidth() override;
float_t getHeight() override;
void setSize(float_t width, float_t height);
void setClearColor(struct Color color);
void clear(flag8_t clearFlags) override;
void bind() override;
};
}

View File

@ -7,6 +7,7 @@
target_sources(${DAWN_TARGET_NAME}
PRIVATE
RenderManager.cpp
BackBufferRenderTarget.cpp
)
# Subdirs

View File

@ -6,26 +6,28 @@
#include "dawnopengl.hpp"
#include "game/DawnGame.hpp"
#include "display/RenderManager.hpp"
#include "display/BackBufferRenderTarget.hpp"
using namespace Dawn;
RenderManager::RenderManager(std::weak_ptr<DawnGame> game) {
this->game = game;
this->renderTarget=std::make_shared<BackBufferRenderTarget>(weak_from_this());
}
void RenderManager::init() {
glClearColor(
0.39215686274f,
0.58431372549f,
0.9294117647f,
1.0f
);
}
glViewport(0, 0, 1280, 720);
std::shared_ptr<RenderTarget> RenderManager::getBackBuffer() {
return this->renderTarget;
}
void RenderManager::update() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
this->getBackBuffer()->bind();
this->getBackBuffer()->clear(
RENDER_TARGET_CLEAR_FLAG_COLOR |
RENDER_TARGET_CLEAR_FLAG_DEPTH
);
}
RenderManager::~RenderManager() {

View File

@ -0,0 +1,36 @@
// Copyright (c) 2022 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#pragma once
#include "display/_RenderManager.hpp"
namespace Dawn {
class BackBufferRenderTarget;
class RenderManager :
public IRenderManager,
public std::enable_shared_from_this<RenderManager>
{
public:
std::shared_ptr<BackBufferRenderTarget> renderTarget;
/**
* 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;
void init() override;
void update() override;
/**
* Destroy a previously initialized RenderManager.
*/
~RenderManager();
};
}