Subscenes
This commit is contained in:
@ -10,6 +10,7 @@ target_sources(${DAWN_TARGET_NAME}
|
||||
BackBufferRenderTarget.cpp
|
||||
StandardRenderPipeline.cpp
|
||||
Texture.cpp
|
||||
TextureRenderTarget.cpp
|
||||
)
|
||||
|
||||
# Subdirs
|
||||
|
@ -10,6 +10,8 @@
|
||||
#include "util/memory.hpp"
|
||||
|
||||
namespace Dawn {
|
||||
class TextureRenderTarget;
|
||||
|
||||
typedef GLuint textureslot_t;
|
||||
|
||||
class Texture : public ITexture {
|
||||
@ -34,5 +36,7 @@ namespace Dawn {
|
||||
void bind(textureslot_t slot);
|
||||
|
||||
~Texture();
|
||||
|
||||
friend class TextureRenderTarget;
|
||||
};
|
||||
}
|
87
src/dawnopengl/display/TextureRenderTarget.cpp
Normal file
87
src/dawnopengl/display/TextureRenderTarget.cpp
Normal file
@ -0,0 +1,87 @@
|
||||
// Copyright (c) 2023 Dominic Masters
|
||||
//
|
||||
// This software is released under the MIT License.
|
||||
// https://opensource.org/licenses/MIT
|
||||
|
||||
#include "TextureRenderTarget.hpp"
|
||||
|
||||
using namespace Dawn;
|
||||
|
||||
TextureRenderTarget::TextureRenderTarget(float_t width, float_t height) {
|
||||
this->setSize(width, height);
|
||||
}
|
||||
|
||||
Texture * TextureRenderTarget::getTexture() {
|
||||
return &this->texture;
|
||||
}
|
||||
|
||||
void TextureRenderTarget::setSize(float_t width, float_t height) {
|
||||
assertTrue(width > 0);
|
||||
assertTrue(height > 0);
|
||||
assertTrue(width != this->getWidth());
|
||||
assertTrue(height != this->getHeight());
|
||||
|
||||
// Delete old buffers.
|
||||
if(this->rboId != -1) glDeleteRenderbuffers(1, &this->rboId);
|
||||
if(this->fboId != -1) glDeleteFramebuffers(1, &this->fboId);
|
||||
|
||||
// Resize texture
|
||||
this->texture.setSize((int32_t)width, (int32_t) height);
|
||||
this->eventRenderTargetResized.invoke(this, width, height);
|
||||
|
||||
// Create Frame Buffer
|
||||
glGenFramebuffers(1, &this->fboId);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, this->fboId);
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
|
||||
GL_TEXTURE_2D, this->texture.id, 0
|
||||
);
|
||||
|
||||
// Create Render Buffer
|
||||
glGenRenderbuffers(1, &this->rboId);
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, this->rboId);
|
||||
glRenderbufferStorage(
|
||||
GL_RENDERBUFFER, GL_DEPTH24_STENCIL8,
|
||||
this->texture.width, this->texture.height
|
||||
);
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, 0);
|
||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT,
|
||||
GL_RENDERBUFFER, this->rboId
|
||||
);
|
||||
|
||||
// Validate things went correct.
|
||||
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
|
||||
assertUnreachable();
|
||||
}
|
||||
}
|
||||
|
||||
float_t TextureRenderTarget::getWidth() {
|
||||
return (float_t)this->texture.getWidth();
|
||||
}
|
||||
|
||||
float_t TextureRenderTarget::getHeight() {
|
||||
return (float_t)this->texture.getHeight();
|
||||
}
|
||||
|
||||
void TextureRenderTarget::setClearColor(struct Color color) {
|
||||
this->clearColor = color;
|
||||
}
|
||||
|
||||
void TextureRenderTarget::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 TextureRenderTarget::bind() {
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, this->fboId);
|
||||
glViewport(0, 0, this->texture.getWidth(), this->texture.getHeight());
|
||||
}
|
||||
|
||||
TextureRenderTarget::~TextureRenderTarget() {
|
||||
if(this->rboId != -1) glDeleteRenderbuffers(1, &this->rboId);
|
||||
if(this->fboId != -1) glDeleteFramebuffers(1, &this->fboId);
|
||||
}
|
37
src/dawnopengl/display/TextureRenderTarget.hpp
Normal file
37
src/dawnopengl/display/TextureRenderTarget.hpp
Normal file
@ -0,0 +1,37 @@
|
||||
// Copyright (c) 2023 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/Texture.hpp"
|
||||
|
||||
namespace Dawn {
|
||||
class RenderManager;
|
||||
|
||||
class TextureRenderTarget : public RenderTarget {
|
||||
private:
|
||||
GLuint fboId = -1;
|
||||
GLuint rboId = -1;
|
||||
|
||||
Texture texture;
|
||||
struct Color clearColor = COLOR_CORNFLOWER_BLUE;
|
||||
|
||||
public:
|
||||
TextureRenderTarget(float_t width, float_t height);
|
||||
|
||||
Texture * getTexture();
|
||||
|
||||
void setSize(float_t width, float_t height);
|
||||
|
||||
float_t getWidth() override;
|
||||
float_t getHeight() override;
|
||||
void setClearColor(struct Color color) override;
|
||||
void clear(flag8_t clearFlags) override;
|
||||
void bind() override;
|
||||
|
||||
~TextureRenderTarget();
|
||||
};
|
||||
}
|
@ -99,9 +99,9 @@ namespace Dawn {
|
||||
this->setBoolean(this->paramHasTexture, false);
|
||||
}
|
||||
|
||||
void setUICamera(glm::mat4 view, glm::mat4 projection) {
|
||||
this->setMatrix(this->paramView, view);
|
||||
void setUICamera(glm::mat4 projection, glm::mat4 view) {
|
||||
this->setMatrix(this->paramProjection, projection);
|
||||
this->setMatrix(this->paramView, view);
|
||||
}
|
||||
|
||||
void setUIModel(glm::mat4 model) {
|
||||
|
Reference in New Issue
Block a user