gear/viewport.c
2024-04-28 12:53:57 +12:00

65 lines
1.5 KiB
C

#include "viewport.h"
#include <raylib.h>
#include <rlcimgui.h>
#include <imgui_impl_raylib.h>
#include <stddef.h>
extern Camera camera;
RenderTexture viewport;
RenderTexture new_viewport;
bool swap_viewport = false;
void InitViewport() {
viewport = LoadRenderTexture(800, 600);
}
void UpdateViewport() {
if(swap_viewport) {
UnloadRenderTexture(viewport);
viewport = new_viewport;
swap_viewport = false;
}
}
void BeginViewport() {
BeginTextureMode(viewport);
}
void EndViewport() {
EndTextureMode();
}
void RenderViewport() {
igPushStyleVar_Vec2(ImGuiStyleVar_WindowPadding, (ImVec2){0.0f, 0.0f});
igBegin("Viewport", NULL, ImGuiWindowFlags_NoScrollbar);
{
if(igIsWindowHovered(0)) {
if(IsMouseButtonDown(MOUSE_BUTTON_RIGHT)) {
if(!IsCursorHidden())
DisableCursor();
UpdateCamera(&camera, CAMERA_FREE);
} else {
if(IsCursorHidden())
EnableCursor();
}
} else {
if(IsCursorHidden())
EnableCursor();
}
ImVec2 area;
igGetContentRegionAvail(&area);
if(viewport.texture.width != area.x || viewport.texture.height != area.y) {
new_viewport = LoadRenderTexture(area.x, area.y);
swap_viewport = true;
}
rligImageRenderTexture(&viewport);
}
igEnd();
igPopStyleVar(1);
}