Skip to content

Commit

Permalink
Lanierd/hydra 685 (#245)
Browse files Browse the repository at this point in the history
* HYDRA-685 : Remove direct calls to "delete"

* Remove unused rendererPlugin variable
  • Loading branch information
lanierd-adsk authored Feb 10, 2025
1 parent 7947c57 commit e336a59
Show file tree
Hide file tree
Showing 9 changed files with 44 additions and 60 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,8 @@ void FilteringSceneIndicesChainManager::destroyFilteringSceneIndicesChain(Viewpo

auto renderIndexProxy = viewportInformationAndSceneIndicesPerViewportData.GetRenderIndexProxy();
TF_AXIOM(renderIndexProxy);
auto renderIndex = renderIndexProxy->GetRenderIndex();
TF_AXIOM(renderIndex);
renderIndex->RemoveSceneIndex(lastSceneIndex);//Remove the whole chain from the render index
auto& renderIndex = renderIndexProxy->GetRenderIndex();
renderIndex.RemoveSceneIndex(lastSceneIndex);//Remove the whole chain from the render index

//Remove a ref on it which should cascade the same on its references
#ifdef CODE_COVERAGE_WORKAROUND
Expand Down Expand Up @@ -120,8 +119,8 @@ void FilteringSceneIndicesChainManager::updateFilteringSceneIndicesChain(const s
destroyFilteringSceneIndicesChain(viewportInformationAndSceneIndicesPerViewportData);
createFilteringSceneIndicesChain(viewportInformationAndSceneIndicesPerViewportData);
const auto& lastSceneIndex = viewportInformationAndSceneIndicesPerViewportData.GetLastFilteringSceneIndex();
TF_AXIOM(lastSceneIndex && renderIndexProxy && renderIndexProxy->GetRenderIndex());
renderIndexProxy->GetRenderIndex()->InsertSceneIndex(lastSceneIndex, SdfPath::AbsoluteRootPath());
TF_AXIOM(lastSceneIndex && renderIndexProxy);
renderIndexProxy->GetRenderIndex().InsertSceneIndex(lastSceneIndex, SdfPath::AbsoluteRootPath());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,8 @@ bool ViewportInformationAndSceneIndicesPerViewportDataManager::AddViewportInform
const HdSceneIndexBaseRefPtr lastFilteringSceneIndex = FilteringSceneIndicesChainManager::get().createFilteringSceneIndicesChain(*newElement,
inputSceneIndexForCustomFiltering);
//Insert the last filtering scene index into the render index
auto renderIndex = renderIndexProxy->GetRenderIndex();
TF_AXIOM(renderIndex);
renderIndex->InsertSceneIndex(lastFilteringSceneIndex, SdfPath::AbsoluteRootPath());
auto& renderIndex = renderIndexProxy->GetRenderIndex();
renderIndex.InsertSceneIndex(lastFilteringSceneIndex, SdfPath::AbsoluteRootPath());

return dataProducerSceneIndicesAdded;
}
Expand All @@ -113,10 +112,10 @@ void ViewportInformationAndSceneIndicesPerViewportDataManager::RemoveViewportInf

if(renderIndexProxy){
//Destroy the custom filtering scene indices chain
auto renderIndex = renderIndexProxy->GetRenderIndex();
auto& renderIndex = renderIndexProxy->GetRenderIndex();
const auto& filteringSceneIndex = findResult->GetLastFilteringSceneIndex();
if (renderIndex && filteringSceneIndex){
renderIndex->RemoveSceneIndex(filteringSceneIndex);//Remove the whole chain from the render index
if (filteringSceneIndex){
renderIndex.RemoveSceneIndex(filteringSceneIndex);//Remove the whole chain from the render index
}
}

Expand Down Expand Up @@ -314,10 +313,10 @@ void ViewportInformationAndSceneIndicesPerViewportDataManager::RemoveAllViewport

if(renderIndexProxy){
//Destroy the custom filtering scene indices chain
auto renderIndex = renderIndexProxy->GetRenderIndex();
auto& renderIndex = renderIndexProxy->GetRenderIndex();
const auto& filteringSceneIndex = viewportInfoAndData.GetLastFilteringSceneIndex();
if (renderIndex && filteringSceneIndex){
renderIndex->RemoveSceneIndex(filteringSceneIndex);//Remove the whole chain from the render index
if (filteringSceneIndex){
renderIndex.RemoveSceneIndex(filteringSceneIndex);//Remove the whole chain from the render index
}
}
}
Expand Down
10 changes: 3 additions & 7 deletions lib/flowViewport/sceneIndex/fvpRenderIndexProxy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,9 @@ _GetInputScene(const HdPrefixingSceneIndexRefPtr &prefixingScene)

namespace FVP_NS_DEF {

RenderIndexProxy::RenderIndexProxy(PXR_NS::HdRenderIndex* renderIndex) :
RenderIndexProxy::RenderIndexProxy(PXR_NS::HdRenderIndex& renderIndex) :
_renderIndex(renderIndex), _mergingSceneIndex(PXR_NS::HdMergingSceneIndex::New())
{
TF_AXIOM(_renderIndex);
TF_AXIOM(_mergingSceneIndex);
_mergingSceneIndex->SetDisplayName("Data Producer Merging Scene Index");
}
Expand Down Expand Up @@ -134,7 +133,7 @@ HdSceneIndexBaseRefPtr RenderIndexProxy::GetMergingSceneIndex() const
return _mergingSceneIndex;
}

HdRenderIndex* RenderIndexProxy::GetRenderIndex() const
HdRenderIndex& RenderIndexProxy::GetRenderIndex() const
{
return _renderIndex;
}
Expand All @@ -143,10 +142,7 @@ std::string RenderIndexProxy::GetRendererDisplayName() const
{
static std::string empty;

if (! _renderIndex){
return empty;
}
auto rd = _renderIndex->GetRenderDelegate();
auto rd = _renderIndex.GetRenderDelegate();
if (! rd){
return empty;
}
Expand Down
6 changes: 3 additions & 3 deletions lib/flowViewport/sceneIndex/fvpRenderIndexProxy.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ class RenderIndexProxy
public:

FVP_API
RenderIndexProxy(PXR_NS::HdRenderIndex* renderIndex);
RenderIndexProxy(PXR_NS::HdRenderIndex& renderIndex);

FVP_API
void InsertSceneIndex(
Expand All @@ -88,15 +88,15 @@ class RenderIndexProxy

///Get the render index
FVP_API
PXR_NS::HdRenderIndex* GetRenderIndex() const;
PXR_NS::HdRenderIndex& GetRenderIndex() const;

///Get the render delegate display name
FVP_API
std::string GetRendererDisplayName() const;

private:

PXR_NS::HdRenderIndex* const _renderIndex{nullptr};
PXR_NS::HdRenderIndex& _renderIndex;
PXR_NS::HdMergingSceneIndexRefPtr _mergingSceneIndex;
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -922,7 +922,7 @@ bool MayaHydraSceneIndex::AddPickHitToSelectionList(

HdChangeTracker& MayaHydraSceneIndex::GetChangeTracker()
{
return _renderIndex->GetChangeTracker();
return _renderIndex.GetChangeTracker();
}

SdfPath MayaHydraSceneIndex::GetDelegateID(TfToken name)
Expand Down
14 changes: 4 additions & 10 deletions lib/mayaHydra/hydraExtensions/sceneIndex/mayaHydraSceneIndex.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,26 +68,20 @@ struct MayaHydraInitData
MayaHydraInitData(
TfToken nameIn,
HdEngine& engineIn,
HdRenderIndex* renderIndexIn,
HdRendererPlugin* rendererPluginIn,
HdxTaskController* taskControllerIn,
HdRenderIndex& renderIndexIn,
const SdfPath& delegateIDIn,
bool isHdStIn)
: name(nameIn)
, engine(engineIn)
, renderIndex(renderIndexIn)
, rendererPlugin(rendererPluginIn)
, taskController(taskControllerIn)
, delegateID(delegateIDIn)
, isHdSt(isHdStIn)
{
}

TfToken name;
HdEngine& engine;
HdRenderIndex* renderIndex;
HdRendererPlugin* rendererPlugin;
HdxTaskController* taskController;
HdRenderIndex& renderIndex;
SdfPath delegateID;
bool isHdSt;
};
Expand Down Expand Up @@ -196,7 +190,7 @@ class MAYAHYDRALIB_API MayaHydraSceneIndex : public HdRetainedSceneIndex

HdChangeTracker& GetChangeTracker();

HdRenderIndex& GetRenderIndex() { return *_renderIndex; }
HdRenderIndex& GetRenderIndex() { return _renderIndex; }

SdfPath GetDelegateID(TfToken name);

Expand Down Expand Up @@ -321,7 +315,7 @@ class MAYAHYDRALIB_API MayaHydraSceneIndex : public HdRetainedSceneIndex
SdfPath _ID;
MayaHydraParams _params;

HdRenderIndex* _renderIndex = nullptr;
HdRenderIndex& _renderIndex;

// Adapters
AdapterMap<MayaHydraLightAdapterPtr> _lightAdapters;
Expand Down
2 changes: 2 additions & 0 deletions lib/mayaHydra/mayaPlugin/plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,8 @@ PLUGIN_EXPORT MStatus uninitializePlugin(MObject obj)
if (auto* renderer = MHWRender::MRenderer::theRenderer()) {
for (unsigned int i = 0; i < _renderOverrides.size(); i++) {
renderer->deregisterOverride(_renderOverrides[i]);
// Using delete because we cannot use smart pointers in the static _renderOverrides
// vector, see declaration of _renderOverrides for explanation
delete _renderOverrides[i];
}
}
Expand Down
40 changes: 17 additions & 23 deletions lib/mayaHydra/mayaPlugin/renderOverride.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -361,9 +361,8 @@ MtohRenderOverride::~MtohRenderOverride()
constexpr bool fullReset = true;
ClearHydraResources(fullReset);

for (auto operation : _operations) {
delete operation;
}
_operations.clear();

MMessage::removeCallbacks(_callbacks);
_callbacks.clear();
for (auto& panelAndCallbacks : _renderPanelCallbacks) {
Expand Down Expand Up @@ -1083,12 +1082,13 @@ void MtohRenderOverride::_InitHydraResources(const MHWRender::MDrawContext& draw
return;
GetMayaHydraLibInterface().RegisterTerminalSceneIndex(_renderIndex->GetTerminalSceneIndex());

_taskController = new HdxTaskController(
_taskController = std::make_unique<HdxTaskController>(
_renderIndex,
_ID.AppendChild(TfToken(TfStringPrintf(
"_UsdImaging_%s_%p",
TfMakeValidIdentifier(_rendererDesc.rendererName.GetText()).c_str(),
this))));
this)))
);
_taskController->SetEnableShadows(true);
// Initialize the AOV system to render color for Storm
if (_isUsingHdSt) {
Expand All @@ -1098,9 +1098,7 @@ void MtohRenderOverride::_InitHydraResources(const MHWRender::MDrawContext& draw
MayaHydraInitData mhInitData(
TfToken("MayaHydraSceneIndex"),
_engine,
_renderIndex,
_rendererPlugin,
_taskController,
*_renderIndex,
MAYA_NATIVE_ROOT,
_isUsingHdSt
);
Expand All @@ -1112,7 +1110,7 @@ void MtohRenderOverride::_InitHydraResources(const MHWRender::MDrawContext& draw
// - Maya scene producer, which needs the render index proxy to insert
// itself.

_renderIndexProxy = std::make_shared<Fvp::RenderIndexProxy>(_renderIndex);
_renderIndexProxy = std::make_shared<Fvp::RenderIndexProxy>(*_renderIndex);

_mayaHydraSceneIndex = MayaHydraSceneIndex::New(mhInitData, !_hasDefaultLighting);
TF_VERIFY(_mayaHydraSceneIndex, "Maya Hydra scene index not found, check mayaHydra plugin installation.");
Expand Down Expand Up @@ -1228,10 +1226,7 @@ void MtohRenderOverride::ClearHydraResources(bool fullReset)
// invalid.
_engine.ClearTaskContextData();

if (_taskController != nullptr) {
delete _taskController;
_taskController = nullptr;
}
_taskController.reset();

if (_renderIndex != nullptr) {
GetMayaHydraLibInterface().UnregisterTerminalSceneIndex(_renderIndex->GetTerminalSceneIndex());
Expand Down Expand Up @@ -1474,25 +1469,24 @@ MStatus MtohRenderOverride::setup(const MString& destination)
}

if (_operations.empty()) {
// Clear and draw pre scene elelments (grid not pushed into hydra)
_operations.push_back(new MayaHydraPreRender("HydraRenderOverride_PreScene"));
// Clear and draw pre scene elements (grid not pushed into hydra)
_operations.push_back(std::make_unique<MayaHydraPreRender>("HydraRenderOverride_PreScene"));

// The main hydra render
// For the data server, This also invokes scene update then sync scene delegate after scene
// update
_operations.push_back(new MayaHydraRender("HydraRenderOverride_DataServer", this));
// For the data server, This also invokes scene update then sync scene delegate after scene update
_operations.push_back(std::make_unique<MayaHydraRender>("HydraRenderOverride_DataServer", this));

// Draw post scene elements (cameras, CVs, shapes not pushed into hydra)
_operations.push_back(new MayaHydraPostRender("HydraRenderOverride_PostScene"));
_operations.push_back(std::make_unique<MayaHydraPostRender>("HydraRenderOverride_PostScene"));

// Draw HUD elements
_operations.push_back(new MHWRender::MHUDRender());
_operations.push_back(std::make_unique<MHWRender::MHUDRender>());

// Set final buffer options
auto* presentTarget = new MHWRender::MPresentTarget("HydraRenderOverride_Present");
auto presentTarget = std::make_unique<MHWRender::MPresentTarget>("HydraRenderOverride_Present");
presentTarget->setPresentDepth(true);
presentTarget->setTargetBackBuffer(MHWRender::MPresentTarget::kCenterBuffer);
_operations.push_back(presentTarget);
_operations.push_back(std::move(presentTarget));
}

return MS::kSuccess;
Expand All @@ -1513,7 +1507,7 @@ bool MtohRenderOverride::startOperationIterator()
MHWRender::MRenderOperation* MtohRenderOverride::renderOperation()
{
if (_currentOperation >= 0 && _currentOperation < static_cast<int>(_operations.size())) {
return _operations[_currentOperation];
return _operations[_currentOperation].get();
}
return nullptr;
}
Expand Down
4 changes: 2 additions & 2 deletions lib/mayaHydra/mayaPlugin/renderOverride.h
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ class MtohRenderOverride : public MHWRender::MRenderOverride,
MtohRendererDescription _rendererDesc;

std::shared_ptr<MayaHydraSceneIndexRegistry> _sceneIndexRegistry;
std::vector<MHWRender::MRenderOperation*> _operations;
std::vector<std::unique_ptr<MHWRender::MRenderOperation>> _operations;
MCallbackIdArray _callbacks;
MCallbackId _timerCallback = 0;
PanelCallbacksList _renderPanelCallbacks;
Expand All @@ -273,7 +273,7 @@ class MtohRenderOverride : public MHWRender::MRenderOverride,
HdDriver _hgiDriver;
HdEngine _engine;
HdRendererPlugin* _rendererPlugin = nullptr;
HdxTaskController* _taskController = nullptr;
std::unique_ptr<HdxTaskController> _taskController;
HdPluginRenderDelegateUniqueHandle _renderDelegate = nullptr;
Fvp::RenderIndexProxyPtr _renderIndexProxy{nullptr};
HdSceneIndexBaseRefPtr _lastFilteringSceneIndexBeforeCustomFiltering {nullptr};
Expand Down

0 comments on commit e336a59

Please sign in to comment.