/*virtual*/ void HdSt_TestLightingShader::AddBindings(HdBindingRequestVector *customBindings) { customBindings->push_back( HdBindingRequest(HdBinding::UNIFORM, _tokens->l0dir, _tokens->vec3)); customBindings->push_back( HdBindingRequest(HdBinding::UNIFORM, _tokens->l0color, _tokens->vec3)); customBindings->push_back( HdBindingRequest(HdBinding::UNIFORM, _tokens->l1dir, _tokens->vec3)); customBindings->push_back( HdBindingRequest(HdBinding::UNIFORM, _tokens->l1color, _tokens->vec3)); customBindings->push_back( HdBindingRequest(HdBinding::UNIFORM, _tokens->sceneAmbient, _tokens->vec3)); }
void HdxRenderTask::_Execute(HdTaskContext* ctx) { HD_TRACE_FUNCTION(); HD_MALLOC_TAG_FUNCTION(); HdRenderPassStateSharedPtr renderPassState; if (_setupTask) { // if _setupTask exists (for backward compatibility), use it renderPassState = _setupTask->GetRenderPassState(); } else { // otherwise, extract from TaskContext _GetTaskContextData(ctx, HdxTokens->renderPassState, &renderPassState); } if (not TF_VERIFY(renderPassState)) return; // Can't use GetTaskContextData because the lightingShader // is optional. VtValue lightingShader = (*ctx)[HdTokens->lightingShader]; // it's possible to not set lighting shader to HdRenderPassState. // Hd_DefaultLightingShader will be used in that case. if (lightingShader.IsHolding<HdLightingShaderSharedPtr>()) { renderPassState->SetLightingShader( lightingShader.Get<HdLightingShaderSharedPtr>()); } // Selection Setup // Note that selectionTask comes after renderTask, so that // it can access rprimIDs populated in RenderTask::_Sync. VtValue vo = (*ctx)[HdxTokens->selectionOffsets]; VtValue vu = (*ctx)[HdxTokens->selectionUniforms]; HdRenderPassShaderSharedPtr renderPassShader = renderPassState->GetRenderPassShader(); if (not vo.IsEmpty() and not vu.IsEmpty()) { HdBufferArrayRangeSharedPtr obar = vo.Get<HdBufferArrayRangeSharedPtr>(); HdBufferArrayRangeSharedPtr ubar = vu.Get<HdBufferArrayRangeSharedPtr>(); renderPassShader->AddBufferBinding( HdBindingRequest(HdBinding::SSBO, HdxTokens->selectionOffsets, obar, /*interleave*/false)); renderPassShader->AddBufferBinding( HdBindingRequest(HdBinding::UBO, HdxTokens->selectionUniforms, ubar, /*interleave*/true)); } else { renderPassShader->RemoveBufferBinding(HdxTokens->selectionOffsets); renderPassShader->RemoveBufferBinding(HdxTokens->selectionUniforms); } renderPassState->Bind(); // execute all render passes. TF_FOR_ALL(it, _passes) { (*it)->Execute(renderPassState); }