mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Restore imgui rendering
Was lost when pass architecture was removed; now it should work again.
This commit is contained in:
parent
fc05db7441
commit
d2b3b15213
5 changed files with 38 additions and 25 deletions
|
|
@ -5,8 +5,8 @@ target_sources(SRB2SDL2 PRIVATE
|
||||||
blit_rect.cpp
|
blit_rect.cpp
|
||||||
blit_rect.hpp
|
blit_rect.hpp
|
||||||
hardware_state.hpp
|
hardware_state.hpp
|
||||||
pass_imgui.cpp
|
imgui_renderer.cpp
|
||||||
pass_imgui.hpp
|
imgui_renderer.hpp
|
||||||
pass_resource_managers.cpp
|
pass_resource_managers.cpp
|
||||||
pass_resource_managers.hpp
|
pass_resource_managers.hpp
|
||||||
patch_atlas.cpp
|
patch_atlas.cpp
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@
|
||||||
|
|
||||||
#include "blit_postimg_screens.hpp"
|
#include "blit_postimg_screens.hpp"
|
||||||
#include "blit_rect.hpp"
|
#include "blit_rect.hpp"
|
||||||
|
#include "imgui_renderer.hpp"
|
||||||
#include "postprocess_wipe.hpp"
|
#include "postprocess_wipe.hpp"
|
||||||
#include "resource_management.hpp"
|
#include "resource_management.hpp"
|
||||||
#include "screen_capture.hpp"
|
#include "screen_capture.hpp"
|
||||||
|
|
@ -44,6 +45,7 @@ struct HardwareState
|
||||||
std::unique_ptr<BlitRectPass> crtsharp_blit_rect;
|
std::unique_ptr<BlitRectPass> crtsharp_blit_rect;
|
||||||
std::unique_ptr<ScreenshotPass> screen_capture;
|
std::unique_ptr<ScreenshotPass> screen_capture;
|
||||||
std::unique_ptr<UpscaleBackbuffer> backbuffer;
|
std::unique_ptr<UpscaleBackbuffer> backbuffer;
|
||||||
|
std::unique_ptr<ImguiRenderer> imgui_renderer;
|
||||||
WipeFrames wipe_frames;
|
WipeFrames wipe_frames;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
// See the 'LICENSE' file for more details.
|
// See the 'LICENSE' file for more details.
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
#include "pass_imgui.hpp"
|
#include "imgui_renderer.hpp"
|
||||||
|
|
||||||
#include <imgui.h>
|
#include <imgui.h>
|
||||||
#include <tcb/span.hpp>
|
#include <tcb/span.hpp>
|
||||||
|
|
@ -19,14 +19,15 @@ using namespace srb2;
|
||||||
using namespace srb2::hwr2;
|
using namespace srb2::hwr2;
|
||||||
using namespace srb2::rhi;
|
using namespace srb2::rhi;
|
||||||
|
|
||||||
ImguiPass::ImguiPass()
|
ImguiRenderer::ImguiRenderer()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
ImguiPass::~ImguiPass() = default;
|
ImguiRenderer::~ImguiRenderer() = default;
|
||||||
|
|
||||||
void ImguiPass::prepass(Rhi& rhi)
|
void ImguiRenderer::render(Rhi& rhi)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!program_)
|
if (!program_)
|
||||||
{
|
{
|
||||||
const char* defines[2] = {
|
const char* defines[2] = {
|
||||||
|
|
@ -61,6 +62,19 @@ void ImguiPass::prepass(Rhi& rhi)
|
||||||
io.Fonts->SetTexID(font_atlas_);
|
io.Fonts->SetTexID(font_atlas_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!default_tex_)
|
||||||
|
{
|
||||||
|
uint32_t pixel = 0xFFFFFFFF;
|
||||||
|
default_tex_ = rhi.create_texture({
|
||||||
|
TextureFormat::kRGBA,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
TextureWrapMode::kRepeat,
|
||||||
|
TextureWrapMode::kRepeat
|
||||||
|
});
|
||||||
|
rhi.update_texture(default_tex_, {0, 0, 1, 1}, rhi::PixelFormat::kRGBA8, tcb::as_bytes(tcb::span(&pixel, 1)));
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::Render();
|
ImGui::Render();
|
||||||
|
|
||||||
ImDrawData* data = ImGui::GetDrawData();
|
ImDrawData* data = ImGui::GetDrawData();
|
||||||
|
|
@ -99,7 +113,14 @@ void ImguiPass::prepass(Rhi& rhi)
|
||||||
|
|
||||||
DrawCmd draw_cmd;
|
DrawCmd draw_cmd;
|
||||||
ImTextureID tex_id = cmd.GetTexID();
|
ImTextureID tex_id = cmd.GetTexID();
|
||||||
|
if (tex_id == 0)
|
||||||
|
{
|
||||||
|
draw_cmd.tex = default_tex_;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
draw_cmd.tex = tex_id;
|
draw_cmd.tex = tex_id;
|
||||||
|
}
|
||||||
draw_cmd.v_offset = cmd.VtxOffset;
|
draw_cmd.v_offset = cmd.VtxOffset;
|
||||||
draw_cmd.i_offset = cmd.IdxOffset;
|
draw_cmd.i_offset = cmd.IdxOffset;
|
||||||
draw_cmd.elems = cmd.ElemCount;
|
draw_cmd.elems = cmd.ElemCount;
|
||||||
|
|
@ -112,11 +133,6 @@ void ImguiPass::prepass(Rhi& rhi)
|
||||||
}
|
}
|
||||||
draw_lists_.push_back(std::move(hwr2_list));
|
draw_lists_.push_back(std::move(hwr2_list));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void ImguiPass::transfer(Rhi& rhi)
|
|
||||||
{
|
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
|
||||||
|
|
||||||
{
|
{
|
||||||
unsigned char* pixels;
|
unsigned char* pixels;
|
||||||
|
|
@ -159,10 +175,7 @@ void ImguiPass::transfer(Rhi& rhi)
|
||||||
draw_cmd.tex = draw_cmd.tex;
|
draw_cmd.tex = draw_cmd.tex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void ImguiPass::graphics(Rhi& rhi)
|
|
||||||
{
|
|
||||||
rhi.bind_program(program_);
|
rhi.bind_program(program_);
|
||||||
RasterizerStateDesc rs;
|
RasterizerStateDesc rs;
|
||||||
|
|
||||||
|
|
@ -213,10 +226,7 @@ void ImguiPass::graphics(Rhi& rhi)
|
||||||
rhi.draw_indexed(cmd.elems, cmd.i_offset);
|
rhi.draw_indexed(cmd.elems, cmd.i_offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void ImguiPass::postpass(Rhi& rhi)
|
|
||||||
{
|
|
||||||
for (auto& list : draw_lists_)
|
for (auto& list : draw_lists_)
|
||||||
{
|
{
|
||||||
rhi.destroy_buffer(list.vbo);
|
rhi.destroy_buffer(list.vbo);
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
namespace srb2::hwr2
|
namespace srb2::hwr2
|
||||||
{
|
{
|
||||||
|
|
||||||
class ImguiPass final
|
class ImguiRenderer final
|
||||||
{
|
{
|
||||||
struct DrawCmd
|
struct DrawCmd
|
||||||
{
|
{
|
||||||
|
|
@ -40,17 +40,15 @@ class ImguiPass final
|
||||||
|
|
||||||
rhi::Handle<rhi::Program> program_;
|
rhi::Handle<rhi::Program> program_;
|
||||||
rhi::Handle<rhi::Texture> font_atlas_;
|
rhi::Handle<rhi::Texture> font_atlas_;
|
||||||
|
rhi::Handle<rhi::Texture> default_tex_;
|
||||||
|
|
||||||
std::vector<DrawList> draw_lists_;
|
std::vector<DrawList> draw_lists_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ImguiPass();
|
ImguiRenderer();
|
||||||
virtual ~ImguiPass();
|
virtual ~ImguiRenderer();
|
||||||
|
|
||||||
void prepass(rhi::Rhi& rhi);
|
void render(rhi::Rhi& rhi);
|
||||||
void transfer(rhi::Rhi& rhi);
|
|
||||||
void graphics(rhi::Rhi& rhi);
|
|
||||||
void postpass(rhi::Rhi& rhi);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace srb2::hwr2
|
} // namespace srb2::hwr2
|
||||||
|
|
@ -87,6 +87,7 @@ static void reset_hardware_state(Rhi* rhi)
|
||||||
g_hw_state.crtsharp_blit_rect = std::make_unique<BlitRectPass>(BlitRectPass::BlitMode::kCrtSharp);
|
g_hw_state.crtsharp_blit_rect = std::make_unique<BlitRectPass>(BlitRectPass::BlitMode::kCrtSharp);
|
||||||
g_hw_state.screen_capture = std::make_unique<ScreenshotPass>();
|
g_hw_state.screen_capture = std::make_unique<ScreenshotPass>();
|
||||||
g_hw_state.backbuffer = std::make_unique<UpscaleBackbuffer>();
|
g_hw_state.backbuffer = std::make_unique<UpscaleBackbuffer>();
|
||||||
|
g_hw_state.imgui_renderer = std::make_unique<ImguiRenderer>();
|
||||||
g_hw_state.wipe_frames = {};
|
g_hw_state.wipe_frames = {};
|
||||||
|
|
||||||
g_last_known_rhi = rhi;
|
g_last_known_rhi = rhi;
|
||||||
|
|
@ -323,6 +324,8 @@ void I_FinishUpdate(void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_hw_state.imgui_renderer->render(*rhi);
|
||||||
|
|
||||||
rhi->pop_render_pass();
|
rhi->pop_render_pass();
|
||||||
|
|
||||||
postframe_update(*rhi);
|
postframe_update(*rhi);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue