Skip to content

Commit 6ff99f8

Browse files
Hydrogent: fixed edge/point render modes
1 parent 8486688 commit 6ff99f8

File tree

12 files changed

+94
-25
lines changed

12 files changed

+94
-25
lines changed

Hydrogent/interface/HnTypes.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2023-2024 Diligent Graphics LLC
2+
* Copyright 2023-2025 Diligent Graphics LLC
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -37,7 +37,7 @@ namespace USD
3737
{
3838

3939
/// Renering mode
40-
enum HN_RENDER_MODE
40+
enum HN_RENDER_MODE : Uint8
4141
{
4242
/// Render solid geometry
4343
HN_RENDER_MODE_SOLID,

Hydrogent/interface/Tasks/HnBeginOITPassTask.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ class HnBeginOITPassTask final : public HnTask
7171

7272
virtual void Execute(pxr::HdTaskContext* TaskCtx) override final;
7373

74+
virtual bool IsActive(pxr::HdRenderIndex& RenderIndex) const override final;
75+
7476
private:
7577
void BindOITResources(HnRenderDelegate* RenderDelegate);
7678

Hydrogent/interface/Tasks/HnEndOITPassTask.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ class HnEndOITPassTask final : public HnTask
6666

6767
virtual void Execute(pxr::HdTaskContext* TaskCtx) override final;
6868

69+
virtual bool IsActive(pxr::HdRenderIndex& RenderIndex) const override final;
70+
6971
private:
7072
pxr::HdRenderIndex* m_RenderIndex = nullptr;
7173

Hydrogent/interface/Tasks/HnRenderRprimsTask.hpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@
2929
#include "HnTask.hpp"
3030
#include "HnTypes.hpp"
3131

32-
#include "../../../Common/interface/BasicMath.hpp"
32+
#include "../../../../DiligentCore/Common/interface/BasicMath.hpp"
33+
#include "../../../../DiligentCore/Primitives/interface/FlagEnum.h"
3334

3435
#include "pxr/imaging/hd/renderPass.h"
3536

@@ -43,16 +44,32 @@ class HnRenderPass;
4344

4445
struct HnRenderRprimsTaskParams
4546
{
47+
static_assert(HN_RENDER_MODE_COUNT == 3, "Did you add a new render mode? Please update the flags!");
48+
enum RENDER_MODE_FLAGS : Uint32
49+
{
50+
RENDER_MODE_FLAG_NONE = 0u,
51+
52+
RENDER_MODE_FLAG_SOLID = 1u << HN_RENDER_MODE_SOLID,
53+
54+
RENDER_MODE_FLAG_MESH_EDGES = 1u << HN_RENDER_MODE_MESH_EDGES,
55+
56+
RENDER_MODE_FLAG_POINTS = 1u << HN_RENDER_MODE_POINTS,
57+
58+
RENDER_MODE_FLAG_ALL = RENDER_MODE_FLAG_SOLID | RENDER_MODE_FLAG_MESH_EDGES | RENDER_MODE_FLAG_POINTS
59+
};
60+
RENDER_MODE_FLAGS RenderModes = RENDER_MODE_FLAG_ALL;
61+
4662
constexpr bool operator==(const HnRenderRprimsTaskParams& rhs) const
4763
{
48-
return true;
64+
return RenderModes == rhs.RenderModes;
4965
}
5066

5167
constexpr bool operator!=(const HnRenderRprimsTaskParams& rhs) const
5268
{
5369
return !(*this == rhs);
5470
}
5571
};
72+
DEFINE_FLAG_ENUM_OPERATORS(HnRenderRprimsTaskParams::RENDER_MODE_FLAGS);
5673

5774
/// Renders the Rprims by executing the render pass.
5875
/// The task should be executed after the HnSetupRenderingTask that prepares
@@ -79,7 +96,10 @@ class HnRenderRprimsTask final : public HnTask
7996
return m_RenderTags;
8097
}
8198

99+
virtual bool IsActive(pxr::HdRenderIndex& RenderIndex) const override final;
100+
82101
private:
102+
HnRenderRprimsTaskParams m_Params;
83103
pxr::TfTokenVector m_RenderTags;
84104
std::shared_ptr<HnRenderPass> m_RenderPass;
85105
};

Hydrogent/interface/Tasks/HnTask.hpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2023-2024 Diligent Graphics LLC
2+
* Copyright 2023-2025 Diligent Graphics LLC
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -50,6 +50,11 @@ class HnTask : public pxr::HdTask
5050
public:
5151
HnTask(const pxr::SdfPath& Id);
5252

53+
virtual bool IsActive(pxr::HdRenderIndex& RenderIndex) const
54+
{
55+
return true;
56+
}
57+
5358
protected:
5459
HnFrameRenderTargets* GetFrameRenderTargets(pxr::HdTaskContext* TaskCtx) const;
5560
HnRenderPassState* GetRenderPassState(pxr::HdTaskContext* TaskCtx, const pxr::TfToken& Name) const;

Hydrogent/interface/Tasks/HnTaskManager.hpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <vector>
3131

3232
#include "Tasks/HnTask.hpp"
33+
#include "Tasks/HnRenderRprimsTask.hpp"
3334

3435
#include "../../../../DiligentCore/Platforms/Basic/interface/DebugUtilities.hpp"
3536

@@ -201,7 +202,6 @@ class HnTaskManager
201202
TaskParamsType&& Params);
202203

203204
void SetFrameParams(const HnBeginFrameTaskParams& Params);
204-
void SetRenderRprimParams(const HnRenderRprimsTaskParams& Params);
205205
void SetPostProcessParams(const HnPostProcessTaskParams& Params);
206206
void SetReadRprimIdParams(const HnReadRprimIdTaskParams& Params);
207207
void SetRenderBoundBoxParams(const HnRenderBoundBoxTaskParams& Params);
@@ -253,7 +253,10 @@ class HnTaskManager
253253
void CreateBeginFrameTask();
254254
void CreateBeginMainPassTask();
255255
void CreateRenderShadowsTask(const HnShadowMapManager& ShadowMapMgr);
256-
void CreateRenderRprimsTask(const pxr::TfToken& MaterialTag, TaskUID UID, const HnRenderPassParams& RenderPassParams);
256+
void CreateRenderRprimsTask(const pxr::TfToken& MaterialTag,
257+
TaskUID UID,
258+
const HnRenderPassParams& RenderPassParams,
259+
const HnRenderRprimsTaskParams& TaskParams = {});
257260
void CreateRenderEnvMapTask(const pxr::TfToken& RenderPassName);
258261
void CreateRenderBoundBoxTask(const pxr::TfToken& RenderPassName);
259262
void CreateBeginOITPassTask();

Hydrogent/src/Tasks/HnBeginFrameTask.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -690,7 +690,6 @@ void HnBeginFrameTask::Execute(pxr::HdTaskContext* TaskCtx)
690690

691691
HnRenderDelegate* RenderDelegate = static_cast<HnRenderDelegate*>(m_RenderIndex->GetRenderDelegate());
692692
HnRenderParam* RenderParam = static_cast<HnRenderParam*>(RenderDelegate->GetRenderParam());
693-
USD_Renderer& Renderer = *RenderDelegate->GetUSDRenderer();
694693
IDeviceContext* pCtx = RenderDelegate->GetDeviceContext();
695694

696695
ScopedDebugGroup DebugGroup{pCtx, "Begin Frame"};

Hydrogent/src/Tasks/HnBeginOITPassTask.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,15 @@ void HnBeginOITPassTask::Sync(pxr::HdSceneDelegate* Delegate,
5555
*DirtyBits = pxr::HdChangeTracker::Clean;
5656
}
5757

58+
bool HnBeginOITPassTask::IsActive(pxr::HdRenderIndex& RenderIndex) const
59+
{
60+
pxr::HdRenderDelegate* RenderDelegate = RenderIndex.GetRenderDelegate();
61+
const HnRenderParam* RenderParam = static_cast<const HnRenderParam*>(RenderDelegate->GetRenderParam());
62+
const HN_RENDER_MODE RenderMode = RenderParam->GetRenderMode();
63+
64+
return RenderMode == HN_RENDER_MODE_SOLID;
65+
}
66+
5867
void HnBeginOITPassTask::Prepare(pxr::HdTaskContext* TaskCtx,
5968
pxr::HdRenderIndex* RenderIndex)
6069
{
@@ -188,8 +197,9 @@ void HnBeginOITPassTask::Execute(pxr::HdTaskContext* TaskCtx)
188197
const bool IsWebGPUDevice = pDevice->GetDeviceInfo().IsWebGPUDevice();
189198
IDeviceContext* pCtx = RenderDelegate->GetDeviceContext();
190199

191-
const HnRenderParam* RenderParam = static_cast<HnRenderParam*>(RenderDelegate->GetRenderParam());
192-
const Uint32 OITResourcesVersion = RenderParam->GetAttribVersion(HnRenderParam::GlobalAttrib::OITResources);
200+
const HnRenderParam* RenderParam = static_cast<HnRenderParam*>(RenderDelegate->GetRenderParam());
201+
VERIFY_EXPR(RenderParam->GetRenderMode() == HN_RENDER_MODE_SOLID);
202+
const Uint32 OITResourcesVersion = RenderParam->GetAttribVersion(HnRenderParam::GlobalAttrib::OITResources);
193203
if (m_BoundOITResourcesVersion != OITResourcesVersion)
194204
{
195205
BindOITResources(RenderDelegate);

Hydrogent/src/Tasks/HnEndOITPassTask.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,15 @@ void HnEndOITPassTask::Sync(pxr::HdSceneDelegate* Delegate,
5353
*DirtyBits = pxr::HdChangeTracker::Clean;
5454
}
5555

56+
bool HnEndOITPassTask::IsActive(pxr::HdRenderIndex& RenderIndex) const
57+
{
58+
pxr::HdRenderDelegate* RenderDelegate = RenderIndex.GetRenderDelegate();
59+
const HnRenderParam* RenderParam = static_cast<const HnRenderParam*>(RenderDelegate->GetRenderParam());
60+
const HN_RENDER_MODE RenderMode = RenderParam->GetRenderMode();
61+
62+
return RenderMode == HN_RENDER_MODE_SOLID;
63+
}
64+
5665
void HnEndOITPassTask::Prepare(pxr::HdTaskContext* TaskCtx,
5766
pxr::HdRenderIndex* RenderIndex)
5867
{
@@ -89,6 +98,7 @@ void HnEndOITPassTask::Prepare(pxr::HdTaskContext* TaskCtx,
8998
}
9099

91100
HnRenderParam* RenderParam = static_cast<HnRenderParam*>(RenderDelegate->GetRenderParam());
101+
VERIFY_EXPR(RenderParam->GetRenderMode() == HN_RENDER_MODE_SOLID);
92102
if (m_OITResourcesVersion != RenderParam->GetAttribVersion(HnRenderParam::GlobalAttrib::OITResources))
93103
{
94104
m_ApplyOITAttenuationSRB.Release();

Hydrogent/src/Tasks/HnRenderRprimsTask.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "HnRenderPassState.hpp"
3030
#include "HnRenderPass.hpp"
3131
#include "HnTokens.hpp"
32+
#include "HnRenderParam.hpp"
3233

3334
#include "pxr/imaging/hd/renderDelegate.h"
3435

@@ -100,6 +101,7 @@ void HnRenderRprimsTask::Sync(pxr::HdSceneDelegate* Delegate,
100101
HnRenderRprimsTaskParams Params;
101102
if (GetTaskParams(Delegate, Params))
102103
{
104+
m_Params = Params;
103105
}
104106
}
105107

@@ -121,6 +123,15 @@ void HnRenderRprimsTask::Prepare(pxr::HdTaskContext* TaskCtx,
121123
{
122124
}
123125

126+
bool HnRenderRprimsTask::IsActive(pxr::HdRenderIndex& RenderIndex) const
127+
{
128+
pxr::HdRenderDelegate* RenderDelegate = RenderIndex.GetRenderDelegate();
129+
const HnRenderParam* RenderParam = static_cast<const HnRenderParam*>(RenderDelegate->GetRenderParam());
130+
const HN_RENDER_MODE RenderMode = RenderParam->GetRenderMode();
131+
132+
return (m_Params.RenderModes & (1u << RenderMode)) != 0;
133+
}
134+
124135
void HnRenderRprimsTask::Execute(pxr::HdTaskContext* TaskCtx)
125136
{
126137
if (m_RenderPass)

0 commit comments

Comments
 (0)