Added FrameBuffer test to the GameScene.

This commit is contained in:
Relintai 2024-01-19 22:05:10 +01:00
parent b142be6ab9
commit 79585f2914
2 changed files with 53 additions and 12 deletions

View File

@ -268,13 +268,42 @@ void GameScene::render() {
_mesh_utils_test_mi->render(); _mesh_utils_test_mi->render();
} else if (render_type == 12) { } else if (render_type == 12) {
render_immediate_3d(); render_immediate_3d();
} else if (render_type == 13) {
Renderer *r = Renderer::get_singleton();
r->set_face_culling(Renderer::FACE_CULLING_BACK);
Vector2i render_tex_size = _render_tex->get_size();
_frame_buffer->bind();
_frame_buffer->set_as_viewport();
r->camera_2d_projection_set_to_size(render_tex_size);
r->clear_screen(Color());
r->camera_3d_bind();
r->camera_3d_projection_set_to_perspective(_frame_buffer->get_aspect());
render_immediate_3d(false);
render_immediate(false);
_render_tex->update();
_frame_buffer->unbind();
_frame_buffer->reset_as_viewport();
r->camera_2d_projection_set_to_window();
r->clear_screen(Color(1, 0, 0));
r->draw_texture(_render_tex, Rect2(100, 100, render_tex_size.x, render_tex_size.y));
} }
} }
void GameScene::render_immediate() { void GameScene::render_immediate(bool clear_screen) {
Renderer *r = Renderer::get_singleton(); Renderer *r = Renderer::get_singleton();
r->clear_screen(Color()); if (clear_screen) {
r->camera_2d_projection_set_to_window(); r->clear_screen(Color());
r->camera_2d_projection_set_to_window();
}
r->draw_point(Vector2(15, 15)); r->draw_point(Vector2(15, 15));
r->draw_point(Vector2(18, 18), Color(1, 1, 0)); r->draw_point(Vector2(18, 18), Color(1, 1, 0));
@ -350,14 +379,16 @@ void GameScene::render_obj() {
//TextRenderer::get_singleton()->font_print("test"); //TextRenderer::get_singleton()->font_print("test");
} }
void GameScene::render_immediate_3d() { void GameScene::render_immediate_3d(bool clear_screen) {
Renderer *r = Renderer::get_singleton(); Renderer *r = Renderer::get_singleton();
r->clear_screen(Color()); if (clear_screen) {
r->camera_2d_projection_set_to_window(); r->clear_screen(Color());
r->camera_2d_projection_set_to_window();
r->camera_3d_bind(); r->camera_3d_bind();
r->camera_3d_projection_set_to_perspective(AppWindow::get_singleton()->get_aspect()); r->camera_3d_projection_set_to_perspective(AppWindow::get_singleton()->get_aspect());
}
static float rotmi = 0; static float rotmi = 0;
@ -501,7 +532,7 @@ void GameScene::socket_thread_func(void *data) {
} }
GameScene::GameScene() { GameScene::GameScene() {
render_type = 0; render_type = RENDER_TYPE_MAX - 1;
_thread_running = false; _thread_running = false;
_thread = NULL; _thread = NULL;
@ -677,6 +708,12 @@ GameScene::GameScene() {
_mesh_utils_test_mi = memnew(MeshInstance3D()); _mesh_utils_test_mi = memnew(MeshInstance3D());
_mesh_utils_test_mi->material = color_material; _mesh_utils_test_mi->material = color_material;
_mesh_utils_test_mi->mesh = _mesh_utils_test; _mesh_utils_test_mi->mesh = _mesh_utils_test;
_frame_buffer.instance();
_frame_buffer->create(960, 540);
_render_tex.instance();
_render_tex->set_frame_buffer(_frame_buffer);
} }
GameScene::~GameScene() { GameScene::~GameScene() {

View File

@ -18,6 +18,7 @@
#include "render_objects/sprite.h" #include "render_objects/sprite.h"
#include "render_objects/text_2d.h" #include "render_objects/text_2d.h"
#include "render_objects/tile_map.h" #include "render_objects/tile_map.h"
#include "render_core/frame_buffer.h"
class Thread; class Thread;
class Socket; class Socket;
@ -27,15 +28,15 @@ class GameScene : public Scene {
public: public:
enum RenderTypes { enum RenderTypes {
RENDER_TYPE_MAX = 13 RENDER_TYPE_MAX = 14
}; };
virtual void input_event(const Ref<InputEvent> &event); virtual void input_event(const Ref<InputEvent> &event);
virtual void update(float delta); virtual void update(float delta);
virtual void render(); virtual void render();
virtual void render_immediate(); virtual void render_immediate(bool clear_screen = true);
virtual void render_obj(); virtual void render_obj();
virtual void render_immediate_3d(); virtual void render_immediate_3d(bool clear_screen = true);
void toggle_thread(); void toggle_thread();
static void test_thread_func(void *d); static void test_thread_func(void *d);
@ -86,6 +87,9 @@ public:
Ref<Mesh> _mesh_utils_test; Ref<Mesh> _mesh_utils_test;
MeshInstance3D *_mesh_utils_test_mi; MeshInstance3D *_mesh_utils_test_mi;
Ref<FrameBuffer> _frame_buffer;
Ref<RenderTexture> _render_tex;
//ColoredMaterial *cmaterial; //ColoredMaterial *cmaterial;
}; };