Add ImguiPipelinePass

This commit is contained in:
SweetId
2023-11-16 17:23:55 +05:30
parent c5bffa9c98
commit 741b593033
6 changed files with 485 additions and 347 deletions

View File

@@ -0,0 +1,65 @@
#pragma once
#include <NazaraImgui/Config.hpp>
#include <Nazara/Renderer/ShaderBinding.hpp>
#include <imgui.h>
namespace Nz
{
class CommandBufferBuilder;
class RenderBuffer;
class RenderDevice;
class RenderFrame;
class RenderPipeline;
class NAZARA_IMGUI_API ImguiDrawer
{
public:
ImguiDrawer(RenderDevice& renderDevice);
ImguiDrawer(const ImguiDrawer&) = delete;
ImguiDrawer(ImguiDrawer&&) noexcept = default;
~ImguiDrawer();
ImguiDrawer& operator=(const ImguiDrawer&) = delete;
ImguiDrawer& operator=(ImguiDrawer&&) = delete;
void Prepare(RenderFrame& renderFrame);
void Reset(RenderFrame& renderFrame);
void Draw(CommandBufferBuilder& builder);
private:
bool LoadTexturedPipeline();
bool LoadUntexturedPipeline();
RenderDevice& m_renderDevice;
struct DrawCall
{
size_t vertex_offset, indice_offset;
std::vector<ImDrawCmd> cmdBuffer;
};
std::vector<DrawCall> m_drawCalls;
struct
{
std::shared_ptr<RenderPipeline> pipeline;
std::unordered_map<Texture*, ShaderBindingPtr> textureShaderBindings;
Nz::ShaderBindingPtr uboShaderBinding;
std::shared_ptr<TextureSampler> textureSampler;
} m_texturedPipeline;
struct
{
std::shared_ptr<RenderPipeline> pipeline;
Nz::ShaderBindingPtr uboShaderBinding;
} m_untexturedPipeline;
std::shared_ptr<RenderBuffer> m_vertexBuffer;
std::shared_ptr<RenderBuffer> m_indexBuffer;
std::shared_ptr<RenderBuffer> m_uboBuffer;
};
}

View File

@@ -0,0 +1,27 @@
#pragma once
#include <NazaraImgui/Config.hpp>
#include <Nazara/Core/ParameterList.hpp>
#include <Nazara/Graphics/FramePipelinePass.hpp>
namespace Nz
{
class PassData;
class NAZARA_IMGUI_API ImguiPipelinePass
: public FramePipelinePass
{
public:
ImguiPipelinePass(PassData& passData, std::string passName, const ParameterList& parameters = {});
ImguiPipelinePass(const ImguiPipelinePass&) = delete;
ImguiPipelinePass(ImguiPipelinePass&&) = delete;
~ImguiPipelinePass() = default;
void Prepare(FrameData& frameData) override;
FramePass& RegisterToFrameGraph(FrameGraph& frameGraph, const PassInputOuputs& inputOuputs) override;
private:
std::string m_passName;
};
}

View File

@@ -4,6 +4,7 @@
#include <Nazara/Graphics/Graphics.hpp>
#include <Nazara/Math/Rect.hpp>
#include <NazaraImgui/Config.hpp>
#include <NazaraImgui/ImguiDrawer.hpp>
#include <imgui.h>
#include <unordered_set>
@@ -11,8 +12,6 @@
namespace Nz
{
class Cursor;
class RenderFrame;
class RenderTarget;
class RenderWindow;
class Texture;
class Window;
@@ -39,6 +38,9 @@ namespace Nz
void Update(Nz::Window& window, float dt);
void Render(Nz::RenderTarget* renderTarget, Nz::RenderFrame& frame);
inline ImguiDrawer& GetImguiDrawer() { return m_imguiDrawer; }
inline const ImguiDrawer& GetImguiDrawer() const { return m_imguiDrawer; }
// User-defined
void AddHandler(ImguiHandler* handler);
void RemoveHandler(ImguiHandler* handler);
@@ -63,35 +65,16 @@ namespace Nz
std::shared_ptr<Nz::Cursor> GetMouseCursor(ImGuiMouseCursor cursorType);
void UpdateMouseCursor(Nz::Window& window);
bool LoadTexturedPipeline();
bool LoadUntexturedPipeline();
void UpdateFontTexture();
void RenderDrawLists(Nz::RenderTarget* renderTarget, Nz::RenderFrame& frame, ImDrawData* drawData);
ImGuiContext* m_currentContext;
std::string m_clipboardText;
bool m_bWindowHasFocus;
bool m_bMouseMoved;
struct
{
std::shared_ptr<Nz::RenderPipeline> pipeline;
std::unordered_map<Nz::Texture*, Nz::ShaderBindingPtr> textureShaderBindings;
Nz::ShaderBindingPtr uboShaderBinding;
std::shared_ptr<Nz::TextureSampler> textureSampler;
} m_texturedPipeline;
struct
{
std::shared_ptr<Nz::RenderPipeline> pipeline;
Nz::ShaderBindingPtr uboShaderBinding;
} m_untexturedPipeline;
std::shared_ptr<Nz::RenderBuffer> m_uboBuffer;
ImguiDrawer m_imguiDrawer;
std::shared_ptr<Nz::Texture> m_fontTexture;
std::unordered_set<ImguiHandler*> m_handlers;
static Imgui* s_instance;