void DeferredShadingMSAA::initUI() { // sample apps automatically have a tweakbar they can use. if (mTweakBar) { m_pUIApproachVar = mTweakBar->addEnum("Complex Pixel Detection Approach:", m_approach, APPROACH_OPTIONS, APPROACH_COUNT, UIReactionIDs::UIApproach); m_pUIBRDFVar = mTweakBar->addEnum("BRDF:", m_brdf, BRDF_OPTIONS, BRDF_COUNT, UIReactionIDs::UIBRDF); m_pUIAdaptiveShadingVar = mTweakBar->addValue("Adaptively Shade Complex Pixels", m_bAdaptiveShading, UIReactionIDs::UIAdaptiveShading); m_pUIMarkComplexPixelsVar = mTweakBar->addValue("Mark Complex Pixels", m_bMarkComplexPixels, UIReactionIDs::UIMarkComplexPixels); m_pUISeparateComplexPassVar = mTweakBar->addValue("Separate Complex Pixel Pass", m_bSeparateComplexPass, UIReactionIDs::UISeparateComplexPass); m_pUIPerSampleShadingVar = mTweakBar->addValue("Per-Sample Shading", m_bUsePerSamplePixelShader, UIReactionIDs::UIPerSampleShading); m_pUIExtendedModelLoaderVar = mTweakBar->addValue("Use Extended Model Loader", m_bUseExtendedModelLoader, UIReactionIDs::UIExtMeshLoader); mTweakBar->syncValues(); } // UI elements for displaying pass statistics if (mFPSText) { NvUIRect tr; mFPSText->GetScreenRect(tr); // base off of fps element. m_statsText = new NvUIText("", NvUIFontFamily::SANS, (mFPSText->GetFontSize()*2)/3, NvUITextAlign::RIGHT); m_statsText->SetColor(NV_PACKED_COLOR(0x30,0xD0,0xD0,0xB0)); m_statsText->SetShadow(); mUIWindow->Add(m_statsText, tr.left, tr.top+tr.height+8); } }
void MultiDrawIndirect::initUI() { if (mTweakBar) { mTweakBar->addPadding(); if (isMobilePlatform()) { mTweakBar->addValue("Grid Size (n x n) :", m_GridSize, MIN_MOBILE_GRID_SIZE, MAX_MOBILE_GRID_SIZE, 1); } else { mTweakBar->addValue("Grid Size (n x n) :", m_GridSize, MIN_GRID_SIZE, MAX_GRID_SIZE, 1); } NvTweakEnum<uint32_t> callModes[] = { {"Use Multidraw", USE_MULTIDRAWINDIRECT}, {"Use Individual Draw Calls", NO_MULTIDRAWINDIRECT}, }; mTweakBar->addEnum("Instancing Mode:", m_DrawInstanceMode, callModes, TWEAKENUM_ARRAYSIZE(callModes)); } // UI elements for displaying triangle statistics if (mFPSText) { NvUIRect tr; mFPSText->GetScreenRect(tr); // base off of fps element. m_timingStats = new NvUIText("Multi\nLine\nString", NvUIFontFamily::SANS, (mFPSText->GetFontSize()*2)/3, NvUITextAlign::RIGHT); m_timingStats->SetColor(NV_PACKED_COLOR(0x30,0xD0,0xD0,0xB0)); m_timingStats->SetShadow(); mUIWindow->Add(m_timingStats, tr.left, tr.top+tr.height+8); } }
//====================================================================== //====================================================================== NvUIGraphic *NvTweakBar::MakeFocusFrame() { NvUIGraphicFrame *frame = new NvUIGraphicFrame("rounding.dds", 4); frame->SetDrawCenter(false); // frame->SetAlpha(0.5f); frame->SetColor(NV_PACKED_COLOR(0x60, 0xFF, 0xFF, 0xFF)); return frame; }
void TerrainTessellation::initUI(void) { if (mTweakBar) { NvTweakVarBase *var; NvTweakEnum<uint32_t> qualityModes[] = { {"Low", 0}, {"Medium", 1}, {"High", 2}, {"Ultra", 3} }; mTweakBar->addPadding(); mTweakBar->addMenu("Quality", mQuality, qualityModes, TWEAKENUM_ARRAYSIZE(qualityModes), REACT_QUALITY_MODE); mTweakBar->addPadding(); var = mTweakBar->addValue("Wireframe", mWireframe); addTweakKeyBind(var, 'W'); var = mTweakBar->addValue("Animate", mAnimate); addTweakKeyBind(var, 'A'); var = mTweakBar->addValue("Smooth Normals", mSmoothNormals); addTweakKeyBind(var, 'S'); var = mTweakBar->addValue("Cull to Frustum", mCull); addTweakKeyBind(var, 'C'); mTweakBar->addPadding(); var = mTweakBar->addValue("Auto LOD", mLod); mTweakBar->subgroupSwitchStart(var); mTweakBar->subgroupSwitchCase(true); var = mTweakBar->addValue("Triangle size", mParams.triSize, 1.0f, 50.0f, 1.0f); addTweakKeyBind(var, ']', '['); mTweakBar->subgroupSwitchCase(false); mTweakBar->addValue("Inner tessellation factor", mParams.innerTessFactor, 1.0f, 64.0f, 1.0f); mTweakBar->addValue("Outer tessellation factor", mParams.outerTessFactor, 1.0f, 64.0f, 1.0f); mTweakBar->subgroupSwitchEnd(); mTweakBar->addValue("Noise frequency", mParams.noiseFreq, 0.0f, 2.0f, 0.05f); mTweakBar->addValue("Terrain height", mParams.heightScale, 0.0f, 2.0f, 0.05f); mTweakBar->addValue("Noise octaves", (uint32_t&)mParams.noiseOctaves, 1, 12); mTweakBar->addPadding(2); var = mTweakBar->addValue("Reload shaders", mReload, true); addTweakKeyBind(var, 'R'); mTweakBar->syncValues(); } // UI element for display triangle statistics if (mFPSText) { NvUIRect tr; mFPSText->GetScreenRect(tr); mStatsText = new NvUIValueText("Triangles", NvUIFontFamily::SANS, mFPSText->GetFontSize(), NvUITextAlign::RIGHT, mNumPrimitives, NvUITextAlign::RIGHT); mStatsText->SetColor(NV_PACKED_COLOR(0x30,0xD0,0xD0,0xB0)); mStatsText->SetShadow(); mUIWindow->Add(mStatsText, tr.left, tr.top+tr.height+8); } }
//===================================================================== //===================================================================== NvTweakBar::NvTweakBar(float width, float height) : NvUIContainer(width, height, new NvUIGraphicFrame("info_text_box_thin.dds", 24, 24)) , m_defaultRows(20) //!!!!TBD TODO just picked a number that seems good atm. , m_widthPadFactor(0.1f) // !!!!!TBD TODO picking padding that seems decent on L/R sides. , m_padHeight(0) , m_textShadows(true) , m_compactLayout(false) , m_lastElX(0) , m_lastElY(0) , m_xInset(0) , m_lastActionCode(TWEAKBAR_ACTIONCODE_BASE) // so automatic codes are high up. , m_subgroupLastY(0) , m_subgroupMaxY(0) , m_subgroupContainer(0L) , m_subgroupSwitchVar(0L) { m_canFocus = true; // trying a slightly mid-cyan color for labels. m_labelColor = NV_PACKED_COLOR(64,192,192,255); // keep value white until we can pass through to buttons and others m_valueColor = NV_PACKED_COLOR(255,255,255,255); m_lastElX = 0 + (GetWidth() - GetDefaultLineWidth())/2; m_lastElY = GetStartOffY(); // can't do this in constructor, order of ops not guaranteed somehow... m_padHeight = GetDefaultLineHeight()*0.35f; // !!!TBD Hack to make it a little more see-through for the moment... // if (m_background) // m_background->SetAlpha(0.75f); SetConsumeClicks(true); SetFocusHilite(MakeFocusFrame()); }
NvUISlider *NvTweakBar::MakeStdSlider(const char* name, float val, float min, float max, float step, bool integral, uint32_t code/*==0*/) { uint32_t actionCode = code==0?++m_lastActionCode:code; float wide = GetDefaultLineWidth(); float high = GetDefaultLineHeight(); // !!!TBD TODO // text and output value update should be embedded in the slider itself... // this logic should all move into valuebar. /* !!!!TBD if (m_compactLayout) { out->SetDimensions(wide*0.2f, high); text->SetDimensions(wide*0.3f, high); } */ NvUIGraphicFrame *emptybar = new NvUIGraphicFrame("slider_empty.dds", 8); NvUIGraphicFrame *fullbar = new NvUIGraphicFrame("slider_full.dds", 8); fullbar->SetAlpha(0.6f); // make the fill a bit see-through. fullbar->SetColor(NV_PACKED_COLOR(0xFF, 0xE0, 0x50, 0xFF)); // yellow NvUIGraphic *thumb = new NvUIGraphic("slider_thumb.dds"); thumb->SetDimensions(high*0.5f, high*1.25f); NvUISlider *sld = new NvUISlider(emptybar, fullbar, thumb, actionCode); sld->SetSmoothScrolling(true); sld->SetIntegral(integral); sld->SetMaxValue(max); sld->SetMinValue(min); sld->SetStepValue(step); sld->SetValue(val); sld->SetDimensions(wide, high/4); sld->SetHitMargin(high/4, high/4); // !!!!TBD TODO return sld; }
void OptimizationApp::initUI(void) { // sample apps automatically have a tweakbar they can use. if (mTweakBar) { // create our tweak ui // Show the app title mTweakBar->addLabel("Optimizations Sample App", true); mTweakBar->addPadding(); mTweakBar->addValue("Draw particles:", m_sceneRenderer->getParticleParams()->render); mTweakBar->addValue("Use depth pre-pass:"******"Render low res scene:", m_sceneRenderer->getSceneParams()->renderLowResolution); mTweakBar->addValue("Render low res particles:", m_sceneRenderer->getParticleParams()->renderLowResolution); mTweakBar->addValue("Use cross-bilateral upsampling:", m_sceneRenderer->getUpsamplingParams()->useCrossBilateral); } // UI elements for displaying triangle statistics if (mFPSText) { NvUIRect tr; mFPSText->GetScreenRect(tr); // base off of fps element. m_timingStats = new NvUIText("Multi\nLine\nString", NvUIFontFamily::SANS, (mFPSText->GetFontSize()*2)/3, NvUITextAlign::RIGHT); m_timingStats->SetColor(NV_PACKED_COLOR(0x30,0xD0,0xD0,0xB0)); m_timingStats->SetShadow(); mUIWindow->Add(m_timingStats, tr.left, tr.top+tr.height+8); } }
//====================================================================== //====================================================================== NvUIPopup *NvTweakBar::MakeStdPopup(const char* name, NvTweakEnumVar<uint32_t> &refvar, const NvTweakEnum<uint32_t> values[], uint32_t valueCount, uint32_t actionCode/*==0*/) { uint32_t code = actionCode==0?++m_lastActionCode:actionCode; // need to stash code so all radios use the same float wide = GetDefaultLineWidth(); float high = GetDefaultLineHeight(); float fontFactor = NVB_HEIGHT_TO_FONT_FACTOR; NvUIButton *btn = NULL; NvUIGraphicFrame *frame; NvUIElement *els[3]; els[2] = NULL; els[0] = new NvUIGraphic("arrow_blue_down.dds"); els[0]->SetDimensions(high/2, high/2); els[1] = new NvUIGraphic("arrow_pressed_down.dds"); els[1]->SetDimensions(high/2, high/2); btn = new NvUIButton(NvUIButtonType::CHECK, code, els); // first, the button styling frame = new NvUIGraphicFrame("frame_thin.dds", 10); frame->SetAlpha(1.5f); frame->SetDimensions(wide, high); els[0] = frame; frame = new NvUIGraphicFrame("frame_thin.dds", 10); frame->SetAlpha(1.8f); frame->SetDimensions(wide, high); frame->SetColor(NV_PACKED_COLOR(0xFF, 0xE0, 0x50, 0xFF)); // yellow els[1] = frame; // then, the popup menu framing frame = new NvUIGraphicFrame("frame_thin.dds", 10); frame->SetAlpha(1.8f); NvUIPopup *dd = new NvUIPopup(code, els, frame, btn, name, high*fontFactor, true); for (uint32_t i=0; i<valueCount; i++) { frame = new NvUIGraphicFrame("icon_button_highlight_small.dds", 8); frame->SetDimensions(wide, high); frame->SetAlpha(0); els[0] = frame; frame = new NvUIGraphicFrame("icon_button_highlight_small.dds", 8); frame->SetDimensions(wide, high); frame->SetAlpha(0.5f); frame->SetColor(NV_PACKED_COLOR(0xFF, 0xE0, 0x50, 0xFF)); // yellow els[1] = frame; btn = new NvUIButton(NvUIButtonType::PUSH, code, els, values[i].m_name, (high*fontFactor), true); btn->SetSubCode(i); // !!!!TBD should this be set inside AddItem?? btn->SetHitMargin(high*0.05f, high*0.05f); btn->SetSlideInteractGroup(code); //btn->SetDrawState(0); //btn->SetDimensions(wide, high); // reset for check/radio buttons... NvTweakEnumUI<uint32_t> *twui = new NvTweakEnumUI<uint32_t>(refvar, i, btn, code); dd->AddItem(twui, values[i].m_name, values[i].m_value); } // refvar will convert to uint32 value for passing to SetItemValueActive dd->SetActiveItemValue(refvar); // add focus frame to the popup menu NvUIPopupMenu* mnu = dd->GetUIPopupMenu(); #if later frame = new NvUIGraphicFrame("frame_thin.dds", 10); frame->SetAlpha(0.5f); frame->SetColor(NV_PACKED_COLOR(0xFF, 0xE0, 0x50, 0xFF)); // yellow #endif mnu->SetFocusHilite(MakeFocusFrame()); return dd; }