Add gear icon toolbar button with viewport options dropdown
Adds a ⚙ icon button to the right of the AA toggle in each viewport
tile's compact toolbar. Clicking it opens a dropdown with:
- Shading submenu: Smooth Shaded / Flat Shaded / Wireframe on Surface /
Wireframe / Unlit (new ShadingMode enum driving UsdImagingGLDrawMode)
- Lighting submenu: Camera Headlight / Scene Lights + Dome Light toggle
- Show Grid and Anti-Aliasing toggles (mirrored from icon buttons)
- Bounding Box submenu: None / Per Object / All Selection
- Background submenu: Dark Gray / Black / Light Gray / Midnight Blue
ShadingMode is persisted in viewport_settings.ini alongside the existing
per-tile settings (saved on shutdown, restored on startup).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -131,6 +131,7 @@ UsdSceneRenderer::UsdSceneRenderer()
|
||||
: m_showGrid(true)
|
||||
, m_aaEnabled(false)
|
||||
, m_backgroundColor(0.15f, 0.15f, 0.15f)
|
||||
, m_shadingMode(ShadingMode::SmoothShaded)
|
||||
, m_ambientLightOnly(true)
|
||||
, m_domeLightEnabled(false)
|
||||
, m_stageIsZup(false)
|
||||
@@ -616,11 +617,27 @@ void UsdSceneRenderer::Render(int width, int height)
|
||||
m_renderParams = pxr::UsdImagingGLRenderParams();
|
||||
m_renderParams.frame = m_currentTime;
|
||||
m_renderParams.complexity = 1.0f;
|
||||
m_renderParams.drawMode = pxr::UsdImagingGLDrawMode::DRAW_SHADED_SMOOTH;
|
||||
// Apply shading mode → drawMode + enableLighting
|
||||
switch (m_shadingMode) {
|
||||
case ShadingMode::FlatShaded:
|
||||
m_renderParams.drawMode = pxr::UsdImagingGLDrawMode::DRAW_SHADED_FLAT;
|
||||
m_renderParams.enableLighting = true; break;
|
||||
case ShadingMode::WireframeOnSurface:
|
||||
m_renderParams.drawMode = pxr::UsdImagingGLDrawMode::DRAW_WIREFRAME_ON_SURFACE;
|
||||
m_renderParams.enableLighting = true; break;
|
||||
case ShadingMode::Wireframe:
|
||||
m_renderParams.drawMode = pxr::UsdImagingGLDrawMode::DRAW_WIREFRAME;
|
||||
m_renderParams.enableLighting = false; break;
|
||||
case ShadingMode::Unlit:
|
||||
m_renderParams.drawMode = pxr::UsdImagingGLDrawMode::DRAW_SHADED_SMOOTH;
|
||||
m_renderParams.enableLighting = false; break;
|
||||
default: // SmoothShaded
|
||||
m_renderParams.drawMode = pxr::UsdImagingGLDrawMode::DRAW_SHADED_SMOOTH;
|
||||
m_renderParams.enableLighting = true; break;
|
||||
}
|
||||
m_renderParams.showGuides = true;
|
||||
m_renderParams.showProxy = true;
|
||||
m_renderParams.showRender = false;
|
||||
m_renderParams.enableLighting = true;
|
||||
m_renderParams.enableSampleAlphaToCoverage = true;
|
||||
m_renderParams.gammaCorrectColors = false;
|
||||
m_renderParams.cullStyle = pxr::UsdImagingGLCullStyle::CULL_STYLE_BACK_UNLESS_DOUBLE_SIDED;
|
||||
|
||||
@@ -31,6 +31,15 @@ enum class BBoxMode {
|
||||
AllSelection ///< One combined box for the entire selection
|
||||
};
|
||||
|
||||
/// Surface shading mode — maps to UsdImagingGLDrawMode + enableLighting.
|
||||
enum class ShadingMode {
|
||||
SmoothShaded, ///< Smooth shading with materials (default)
|
||||
FlatShaded, ///< Flat shading with materials
|
||||
WireframeOnSurface, ///< Wireframe overlay on solid surface
|
||||
Wireframe, ///< Wireframe only, no fill
|
||||
Unlit, ///< Smooth geometry, lighting disabled
|
||||
};
|
||||
|
||||
class UsdSceneRenderer {
|
||||
public:
|
||||
UsdSceneRenderer();
|
||||
@@ -199,6 +208,9 @@ public:
|
||||
bool GetDomeLightEnabled() const { return m_domeLightEnabled; }
|
||||
void SetDomeLightEnabled(bool val) { m_domeLightEnabled = val; }
|
||||
|
||||
ShadingMode GetShadingMode() const { return m_shadingMode; }
|
||||
void SetShadingMode(ShadingMode m) { m_shadingMode = m; m_forceRefresh = true; }
|
||||
|
||||
/// Default material ambient (kA, default 0.2 — matches viewSettingsDataModel.py).
|
||||
float GetDefaultMaterialAmbient() const { return m_defaultMaterialAmbient; }
|
||||
void SetDefaultMaterialAmbient(float v) { m_defaultMaterialAmbient = v; }
|
||||
@@ -298,6 +310,7 @@ private:
|
||||
pxr::GfVec3f m_backgroundColor;
|
||||
|
||||
// Lighting settings (mirrors stageView.py viewSettings)
|
||||
ShadingMode m_shadingMode; // draw mode + lighting flags
|
||||
bool m_ambientLightOnly; // camera headlight
|
||||
bool m_domeLightEnabled; // dome/IBL light
|
||||
bool m_stageIsZup; // used for dome light rotation
|
||||
|
||||
Reference in New Issue
Block a user