b5c1e50438
Render layers built on the existing USD sublayer architecture: each layer is a file-backed SdfLayer mounted as a sublayer and tagged via custom layer data, with membership stored in a UsdCollectionAPI on a hidden /RenderLayerData prim. Activating a layer applies its overrides and isolates it to its members. "Default" is virtual -- it means all render-layer sublayers muted. See docs/adr/0002-render-layer.md for the design and rationale. - RenderLayerManager: create/delete/rename/activate, membership, mute-based isolation. Sdf-level APIs are used while a layer is muted (Usd-level APIs can't see muted layers) and Usd-level APIs when active. - Commands: create/delete/rename/activate and add/remove members, all undoable. - RenderLayerPanel: layer list with one-click activation and a membership editor for the selected prims. - StageEditorPanel / SceneHierarchyPanel: badge render-layer-owned sublayers, disable their mute/remove controls (they're managed from the Render Layer panel so the two can't desync), and lock the edit target while a non-Default layer is active. - ConnectShaderAttrs/DisconnectShaderAttr: take an explicit editLayer captured at construction, so undo targets the same layer as execute even if the ambient edit target changed in between (e.g. a render-layer switch). Note: SceneHierarchyPanel.h also carries declarations for the sublayers section added in the following commit. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
45 lines
1.4 KiB
C++
45 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include "../CommandHistory.h"
|
|
#include "../RenderLayerManager.h"
|
|
#include <pxr/usd/sdf/path.h>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
namespace UsdLayerManager {
|
|
|
|
/// Adds one or more prim paths to a render layer's membership (Sdf-level, so
|
|
/// this works whether or not layerId is currently active). Re-runs viewport
|
|
/// isolation if layerId happens to be the active layer.
|
|
class RenderLayerAddMembersCommand : public ICommand {
|
|
public:
|
|
RenderLayerAddMembersCommand(RenderLayerManager* mgr, std::string layerId,
|
|
std::vector<pxr::SdfPath> paths);
|
|
void Execute() override;
|
|
void Undo() override;
|
|
std::string GetDescription() const override { return m_description; }
|
|
|
|
private:
|
|
RenderLayerManager* m_mgr;
|
|
std::string m_layerId;
|
|
std::vector<pxr::SdfPath> m_paths;
|
|
std::string m_description;
|
|
};
|
|
|
|
class RenderLayerRemoveMembersCommand : public ICommand {
|
|
public:
|
|
RenderLayerRemoveMembersCommand(RenderLayerManager* mgr, std::string layerId,
|
|
std::vector<pxr::SdfPath> paths);
|
|
void Execute() override;
|
|
void Undo() override;
|
|
std::string GetDescription() const override { return m_description; }
|
|
|
|
private:
|
|
RenderLayerManager* m_mgr;
|
|
std::string m_layerId;
|
|
std::vector<pxr::SdfPath> m_paths;
|
|
std::string m_description;
|
|
};
|
|
|
|
} // namespace UsdLayerManager
|