Add ImguiPipelinePass
This commit is contained in:
65
include/NazaraImgui/ImguiDrawer.hpp
Normal file
65
include/NazaraImgui/ImguiDrawer.hpp
Normal 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;
|
||||
};
|
||||
}
|
||||
27
include/NazaraImgui/ImguiPipelinePass.hpp
Normal file
27
include/NazaraImgui/ImguiPipelinePass.hpp
Normal 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;
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user