Skip to content

File ViewportController.cpp

File List > controllers > ViewportController.cpp

Go to the documentation of this file

#include "ViewportController.h"

#include "xdz_math.h"

#include "events/ViewportEvents.h"
#include "events/EditorEvents.h"

int GetSelectID(const FrameBuffer* info_fb, GLuint x, GLuint y)
{
    if (-glm::vec2(5, 5) < glm::vec2(x, y) && glm::vec2(x, y) < info_fb->GetFrameBufferSize() * glm::vec2(1, 2))
        //return GetActiveEnvironment()->envir_frameBuffer->ReadPix(x - viewport_offset.x, y - viewport_offset.y, ID_FB).GetID();
        return info_fb->ReadPix(x, y, ID_FB).GetID();
    else
        return -1;
}

void ViewportController::bind(EventPool& pool)
{
    pool.subscribe<ViewportSelectedEvent>([this, &pool](ViewportSelectedEvent e) {
        if (!id_fb) return;
        const int id = GetSelectID(id_fb, e.pix_x, e.pix_y);
        pool.emit(ObjectSelectedEvent{ id, e.increment });
        });

    pool.subscribe<ViewportResizeEvent>([this, &pool](const ViewportResizeEvent& e) {
        // only forward the event to editor
        pool.emit(RenderSurfaceResizedEvent{ e.width, e.height });
        });

    pool.subscribe<FrameBufferResetEvent>([this, &pool](const FrameBufferResetEvent& e) {
        id_fb = static_cast<FrameBuffer*>(e.pass);
        viewport_fb = static_cast<FrameBuffer*>(e.result);

        const GLuint tex_id = viewport_fb->GetFBTextureID(COMBINE_FB);
        pool.emit(ViewportImageResetEvent{ tex_id });
        });
}