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.hpp
|
||||
hardware_state.hpp
|
||||
pass_imgui.cpp
|
||||
pass_imgui.hpp
|
||||
imgui_renderer.cpp
|
||||
imgui_renderer.hpp
|
||||
pass_resource_managers.cpp
|
||||
pass_resource_managers.hpp
|
||||
patch_atlas.cpp
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
|
||||
#include "blit_postimg_screens.hpp"
|
||||
#include "blit_rect.hpp"
|
||||
#include "imgui_renderer.hpp"
|
||||
#include "postprocess_wipe.hpp"
|
||||
#include "resource_management.hpp"
|
||||
#include "screen_capture.hpp"
|
||||
|
|
@ -44,6 +45,7 @@ struct HardwareState
|
|||
std::unique_ptr<BlitRectPass> crtsharp_blit_rect;
|
||||
std::unique_ptr<ScreenshotPass> screen_capture;
|
||||
std::unique_ptr<UpscaleBackbuffer> backbuffer;
|
||||
std::unique_ptr<ImguiRenderer> imgui_renderer;
|
||||
WipeFrames wipe_frames;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
// See the 'LICENSE' file for more details.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "pass_imgui.hpp"
|
||||
#include "imgui_renderer.hpp"
|
||||
|
||||
#include <imgui.h>
|
||||
#include <tcb/span.hpp>
|
||||
|
|
@ -19,14 +19,15 @@ using namespace srb2;
|
|||
using namespace srb2::hwr2;
|
||||
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_)
|
||||
{
|
||||
const char* defines[2] = {
|
||||
|
|
@ -61,6 +62,19 @@ void ImguiPass::prepass(Rhi& rhi)
|
|||
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();
|
||||
|
||||
ImDrawData* data = ImGui::GetDrawData();
|
||||
|
|
@ -99,7 +113,14 @@ void ImguiPass::prepass(Rhi& rhi)
|
|||
|
||||
DrawCmd draw_cmd;
|
||||
ImTextureID tex_id = cmd.GetTexID();
|
||||
draw_cmd.tex = tex_id;
|
||||
if (tex_id == 0)
|
||||
{
|
||||
draw_cmd.tex = default_tex_;
|
||||
}
|
||||
else
|
||||
{
|
||||
draw_cmd.tex = tex_id;
|
||||
}
|
||||
draw_cmd.v_offset = cmd.VtxOffset;
|
||||
draw_cmd.i_offset = cmd.IdxOffset;
|
||||
draw_cmd.elems = cmd.ElemCount;
|
||||
|
|
@ -112,11 +133,6 @@ void ImguiPass::prepass(Rhi& rhi)
|
|||
}
|
||||
draw_lists_.push_back(std::move(hwr2_list));
|
||||
}
|
||||
}
|
||||
|
||||
void ImguiPass::transfer(Rhi& rhi)
|
||||
{
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
|
||||
{
|
||||
unsigned char* pixels;
|
||||
|
|
@ -159,10 +175,7 @@ void ImguiPass::transfer(Rhi& rhi)
|
|||
draw_cmd.tex = draw_cmd.tex;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ImguiPass::graphics(Rhi& rhi)
|
||||
{
|
||||
rhi.bind_program(program_);
|
||||
RasterizerStateDesc rs;
|
||||
|
||||
|
|
@ -213,10 +226,7 @@ void ImguiPass::graphics(Rhi& rhi)
|
|||
rhi.draw_indexed(cmd.elems, cmd.i_offset);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ImguiPass::postpass(Rhi& rhi)
|
||||
{
|
||||
for (auto& list : draw_lists_)
|
||||
{
|
||||
rhi.destroy_buffer(list.vbo);
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
namespace srb2::hwr2
|
||||
{
|
||||
|
||||
class ImguiPass final
|
||||
class ImguiRenderer final
|
||||
{
|
||||
struct DrawCmd
|
||||
{
|
||||
|
|
@ -40,17 +40,15 @@ class ImguiPass final
|
|||
|
||||
rhi::Handle<rhi::Program> program_;
|
||||
rhi::Handle<rhi::Texture> font_atlas_;
|
||||
rhi::Handle<rhi::Texture> default_tex_;
|
||||
|
||||
std::vector<DrawList> draw_lists_;
|
||||
|
||||
public:
|
||||
ImguiPass();
|
||||
virtual ~ImguiPass();
|
||||
ImguiRenderer();
|
||||
virtual ~ImguiRenderer();
|
||||
|
||||
void prepass(rhi::Rhi& rhi);
|
||||
void transfer(rhi::Rhi& rhi);
|
||||
void graphics(rhi::Rhi& rhi);
|
||||
void postpass(rhi::Rhi& rhi);
|
||||
void render(rhi::Rhi& rhi);
|
||||
};
|
||||
|
||||
} // 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.screen_capture = std::make_unique<ScreenshotPass>();
|
||||
g_hw_state.backbuffer = std::make_unique<UpscaleBackbuffer>();
|
||||
g_hw_state.imgui_renderer = std::make_unique<ImguiRenderer>();
|
||||
g_hw_state.wipe_frames = {};
|
||||
|
||||
g_last_known_rhi = rhi;
|
||||
|
|
@ -323,6 +324,8 @@ void I_FinishUpdate(void)
|
|||
break;
|
||||
}
|
||||
|
||||
g_hw_state.imgui_renderer->render(*rhi);
|
||||
|
||||
rhi->pop_render_pass();
|
||||
|
||||
postframe_update(*rhi);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue