Working on RenderTarget example
This commit is contained in:
46
src/dawnopengl/display/BackBufferRenderTarget.cpp
Normal file
46
src/dawnopengl/display/BackBufferRenderTarget.cpp
Normal 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);
|
||||
}
|
32
src/dawnopengl/display/BackBufferRenderTarget.hpp
Normal file
32
src/dawnopengl/display/BackBufferRenderTarget.hpp
Normal 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;
|
||||
};
|
||||
}
|
@ -7,6 +7,7 @@
|
||||
target_sources(${DAWN_TARGET_NAME}
|
||||
PRIVATE
|
||||
RenderManager.cpp
|
||||
BackBufferRenderTarget.cpp
|
||||
)
|
||||
|
||||
# Subdirs
|
||||
|
@ -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() {
|
||||
|
36
src/dawnopengl/display/RenderManager.hpp
Normal file
36
src/dawnopengl/display/RenderManager.hpp
Normal 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();
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user