Now current renderbuffer size is available from the RenderState.

This commit is contained in:
Relintai 2024-03-31 08:57:59 +02:00
parent a1586d48ac
commit 28a66b0e09
4 changed files with 49 additions and 5 deletions

View File

@ -39,6 +39,7 @@
#include "core/vector4.h" #include "core/vector4.h"
#include "render_core/application.h" #include "render_core/application.h"
#include "render_core/input.h" #include "render_core/input.h"
#include "render_core/render_state.h"
//--STRIP //--STRIP
/* /*
@ -426,6 +427,8 @@ bool AppWindow::create_from_handle(void *handle, bool full_Screen, float canvas_
width = get_width(); width = get_width();
height = get_height(); height = get_height();
RenderState::window_update_render_rect_size(width, height);
// cursor(flags & WINDOW_NO_MOUSE ? false : true); // cursor(flags & WINDOW_NO_MOUSE ? false : true);
glfwSetDropCallback(_window, drop_callback); glfwSetDropCallback(_window, drop_callback);

View File

@ -5,6 +5,7 @@
#include <stdio.h> #include <stdio.h>
#include "render_core/app_window.h" #include "render_core/app_window.h"
#include "render_core/render_state.h"
//--STRIP //--STRIP
int FrameBuffer::get_texture_flags() const { int FrameBuffer::get_texture_flags() const {
@ -285,11 +286,15 @@ void FrameBuffer::blit_depth_to(const uint32_t p_destination_framebuffer, const
} }
void FrameBuffer::set_as_viewport() { void FrameBuffer::set_as_viewport() {
glViewport(0, 0, _fbo_width, _fbo_height); RenderState::current_framebuffer = Ref<FrameBuffer>(this);
RenderState::render_rect = Rect2i(0, 0, _fbo_width, _fbo_height);
RenderState::apply_render_rect();
} }
void FrameBuffer::reset_as_viewport() { void FrameBuffer::reset_as_viewport() {
glViewport(0, 0, AppWindow::get_singleton()->get_width(), AppWindow::get_singleton()->get_height()); RenderState::current_framebuffer.unref();
RenderState::render_rect = Rect2i(0, 0, AppWindow::get_singleton()->get_width(), AppWindow::get_singleton()->get_height());
RenderState::apply_render_rect();
} }
float FrameBuffer::get_aspect() const { float FrameBuffer::get_aspect() const {

View File

@ -1,5 +1,6 @@
//--STRIP //--STRIP
#include "render_core/render_state.h" #include "render_core/render_state.h"
#include "render_core/frame_buffer.h"
//--STRIP //--STRIP
Transform RenderState::camera_transform_3d; Transform RenderState::camera_transform_3d;
@ -8,3 +9,24 @@ Projection RenderState::projection_matrix_3d;
Transform2D RenderState::model_view_matrix_2d; Transform2D RenderState::model_view_matrix_2d;
Transform RenderState::projection_matrix_2d; Transform RenderState::projection_matrix_2d;
Rect2i RenderState::render_rect;
Ref<FrameBuffer> RenderState::current_framebuffer;
void RenderState::apply_render_rect() {
glViewport(render_rect.position.x, render_rect.position.y, render_rect.size.x, render_rect.size.y);
}
void RenderState::window_update_render_rect_size(const int p_width, const int p_height) {
if (current_framebuffer.is_valid()) {
return;
}
render_rect = Rect2i(0, 0, p_width, p_height);
}
RenderState::RenderState() {
}
RenderState::~RenderState() {
}

View File

@ -5,12 +5,16 @@
//--STRIP //--STRIP
#include "core/projection.h" #include "core/projection.h"
#include "core/rect2i.h"
#include "core/transform.h" #include "core/transform.h"
#include "core/vector3.h"
#include "core/transform_2d.h" #include "core/transform_2d.h"
#include "core/vector2.h" #include "core/vector2.h"
#include "core/vector3.h"
#include "object/reference.h"
//--STRIP //--STRIP
class FrameBuffer;
class RenderState { class RenderState {
public: public:
static Transform camera_transform_3d; static Transform camera_transform_3d;
@ -20,7 +24,17 @@ public:
static Transform2D model_view_matrix_2d; static Transform2D model_view_matrix_2d;
static Transform projection_matrix_2d; static Transform projection_matrix_2d;
static Rect2i render_rect;
static Ref<FrameBuffer> current_framebuffer;
//TODO should probably add the current shader here, and active material etc. //TODO should probably add the current shader here, and active material etc.
static void apply_render_rect();
static void window_update_render_rect_size(const int p_width, const int p_height);
RenderState();
~RenderState();
}; };
//--STRIP //--STRIP