mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-05-04 09:59:44 -05:00
Cleanup ScreenSpaceFramebuffer (fix orientation issue)
Add Dashboard for on-screen information (#closes 201)
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user