/
redgpu
/
ezEngine
Обзор
Документация
Войти
/
redgpu
/
ezEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
Code/Editor/EditorEngineProcessFramework/PickingRenderPass/PickingRenderPass.h
78 строк
3 KB
Sanakan8472
Render Graph (#1948)
03 июн 2026, 10:19
Не верифицирован
03 июн 2026, 10:19
60bb12c
Код
Авторство
О чём код?
#pragma once #include <EditorEngineProcessFramework/EngineProcess/ViewRenderSettings.h> #include <RendererCore/Pipeline/RenderPipelinePass.h> #include <RendererFoundation/Resources/ReadbackHelper.h> #include <RendererFoundation/Resources/RenderTargetSetup.h> class EZ_EDITORENGINEPROCESSFRAMEWORK_DLL ezPickingRenderPass : public ezRenderPipelinePass { EZ_ADD_DYNAMIC_REFLECTION(ezPickingRenderPass, ezRenderPipelinePass); public: ezPickingRenderPass(); ~ezPickingRenderPass(); ezGALTextureHandle GetPickingIdRT() const; ezGALTextureHandle GetPickingDepthRT() const; virtual ezStatus AddRenderPasses(const ezViewData& viewData, const ezCamera& camera, ezRenderGraph& ref_graph, const ezArrayPtr<const ezRenderPipelinePinConnection> inputs, ezArrayPtr<ezRenderPipelinePinConnection> outputs) override; virtual void ReadBackProperties(ezView* pView) override; bool m_bPickSelected = true; bool m_bPickTransparent = true; ezVec2 m_PickingPosition = ezVec2(-1); ezUInt32 m_PickingIdOut = 0; float m_PickingDepthOut = 0.0f; ezVec2 m_MarqueePickPosition0 = ezVec2(-1); ezVec2 m_MarqueePickPosition1 = ezVec2(-1); ezUInt32 m_uiMarqueeActionID = 0xFFFFFFFF; // used to prevent reusing an old result for a new marquee action ezUInt32 m_uiWindowWidth = 0; ezUInt32 m_uiWindowHeight = 0; private: void CreateTarget(); void DestroyTarget(); void ReadBackPropertiesSinglePick(ezView* pView); void ReadBackPropertiesMarqueePick(ezView* pView); void ProcessPickingRenderData(ezExtractedRenderData& extractedRenderData); private: ezRectFloat m_TargetRect; const ezRTTI* m_pGridRenderDataType = nullptr; ezGALTextureHandle m_hPickingIdRT; ezGALTextureHandle m_hPickingDepthRT; ezRenderGraphTextureHandle m_hPickingIdGraphRT; ezRenderGraphTextureHandle m_hPickingDepthGraphRT; ezHashSet<ezGameObjectHandle> m_SelectionSet; // Readback struct PickingReadback { ezGALReadbackTextureHelper m_PickingReadback; ezGALReadbackTextureHelper m_PickingDepthReadback; bool m_bReadbackInProgress = false; ezUInt32 m_uiWindowWidth = 0; ezUInt32 m_uiWindowHeight = 0; /// we need this matrix to compute the world space position of picked pixels ezMat4 m_mPickingInverseViewProjectionMatrix = ezMat4::MakeZero(); }; PickingReadback m_PendingReadback; // Picking Results ezMat4 m_mPickingInverseViewProjectionMatrix = ezMat4::MakeZero(); /// stores the 2D depth buffer image (32 Bit depth precision), to compute pixel positions from ezDynamicArray<float> m_PickingResultsDepth; /// Stores the 32 Bit picking ID values of each pixel. This can lead back to the ezComponent, etc. that rendered to that pixel ezDynamicArray<ezUInt32> m_PickingResultsID; ezUInt32 m_uiProcessorId = ezInvalidIndex; };