Cleanup ScreenSpaceFramebuffer (fix orientation issue)

Add Dashboard for on-screen information (#closes 201)
This commit is contained in:
Alexander Bock
2017-11-26 14:46:54 -05:00
parent 026f51735b
commit 8e0fde947d
13 changed files with 307 additions and 46 deletions
@@ -82,7 +82,7 @@ ScreenSpaceFramebuffer::~ScreenSpaceFramebuffer() {}
bool ScreenSpaceFramebuffer::initializeGL() {
ScreenSpaceRenderable::initializeGL();
createFragmentbuffer();
createFramebuffer();
return isReady();
}
@@ -90,7 +90,9 @@ bool ScreenSpaceFramebuffer::initializeGL() {
bool ScreenSpaceFramebuffer::deinitializeGL() {
ScreenSpaceRenderable::deinitializeGL();
_framebuffer->activate();
_framebuffer->detachAll();
_framebuffer->deactivate();
removeAllRenderFunctions();
return true;
@@ -103,7 +105,7 @@ void ScreenSpaceFramebuffer::render() {
float xratio = _originalViewportSize.x / (size.z-size.x);
float yratio = _originalViewportSize.y / (size.w-size.y);;
if (!_renderFunctions.empty()) {
if (!_renderFunctions.empty() || !_renderFunctionsShared.empty()) {
glViewport(
static_cast<GLint>(-size.x * xratio),
static_cast<GLint>(-size.y * yratio),
@@ -113,10 +115,12 @@ void ScreenSpaceFramebuffer::render() {
GLint defaultFBO = _framebuffer->getActiveObject();
_framebuffer->activate();
glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glClearColor(0.f, 0.f, 0.f, 0.f);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_ALPHA_TEST);
for (const auto& renderFunction : _renderFunctions) {
renderFunction();
}
for (const auto& renderFunction : _renderFunctionsShared) {
(*renderFunction)();
}
_framebuffer->deactivate();
@@ -131,15 +135,15 @@ void ScreenSpaceFramebuffer::render() {
glm::mat4 rotation = rotationMatrix();
glm::mat4 translation = translationMatrix();
glm::mat4 scale = scaleMatrix();
scale = glm::scale(scale, glm::vec3((1.0/xratio), -(1.0/yratio), 1.0f));
glm::mat4 scale = glm::scale(
scaleMatrix(),
glm::vec3((1.f / xratio), (1.f / yratio), 1.f)
);
glm::mat4 modelTransform = rotation*translation*scale;
draw(modelTransform);
}
}
void ScreenSpaceFramebuffer::update() {}
bool ScreenSpaceFramebuffer::isReady() const {
bool ready = true;
if (!_shader) {
@@ -155,17 +159,22 @@ void ScreenSpaceFramebuffer::setSize(glm::vec4 size) {
_size.set(size);
}
void ScreenSpaceFramebuffer::addRenderFunction(std::function<void()> renderFunction) {
_renderFunctions.push_back(std::move(renderFunction));
}
void ScreenSpaceFramebuffer::addRenderFunction(
std::shared_ptr<std::function<void()>> renderFunction)
{
_renderFunctions.push_back(renderFunction);
_renderFunctionsShared.push_back(std::move(renderFunction));
}
void ScreenSpaceFramebuffer::removeAllRenderFunctions() {
_renderFunctions.clear();
_renderFunctionsShared.clear();
}
void ScreenSpaceFramebuffer::createFragmentbuffer() {
void ScreenSpaceFramebuffer::createFramebuffer() {
_framebuffer = std::make_unique<ghoul::opengl::FramebufferObject>();
_framebuffer->activate();
_texture = std::make_unique<ghoul::opengl::Texture>(glm::uvec3(