| 171 | } |
| 172 | |
| 173 | void VectorFieldRenderer::Render(const RenderAttribs& Attribs) |
| 174 | { |
| 175 | if (Attribs.pContext == nullptr) |
| 176 | { |
| 177 | UNEXPECTED("Context must not be null"); |
| 178 | return; |
| 179 | } |
| 180 | |
| 181 | if (Attribs.GridSize.x == 0 || Attribs.GridSize.y == 0) |
| 182 | return; |
| 183 | |
| 184 | if (Attribs.pVectorField == nullptr) |
| 185 | { |
| 186 | UNEXPECTED("Vector field must not be null"); |
| 187 | return; |
| 188 | } |
| 189 | |
| 190 | auto* pPSO = GetPSO({Attribs.ConvertOutputToSRGB}); |
| 191 | if (pPSO == nullptr) |
| 192 | { |
| 193 | UNEXPECTED("Failed to get PSO"); |
| 194 | return; |
| 195 | } |
| 196 | |
| 197 | if (pPSO->GetStatus() != PIPELINE_STATE_STATUS_READY) |
| 198 | return; |
| 199 | |
| 200 | if (!m_SRB) |
| 201 | { |
| 202 | pPSO->CreateShaderResourceBinding(&m_SRB, true); |
| 203 | m_SRB->GetVariableByName(SHADER_TYPE_VERTEX, "cbAttribs")->Set(m_RenderAttribsCB); |
| 204 | m_pVectorFieldVar = m_SRB->GetVariableByName(SHADER_TYPE_VERTEX, "g_tex2DVectorField"); |
| 205 | VERIFY_EXPR(m_pVectorFieldVar != nullptr); |
| 206 | } |
| 207 | |
| 208 | m_pVectorFieldVar->Set(Attribs.pVectorField); |
| 209 | |
| 210 | { |
| 211 | MapHelper<HLSL::VectorFieldRenderAttribs> AttribsData{Attribs.pContext, m_RenderAttribsCB, MAP_WRITE, MAP_FLAG_DISCARD}; |
| 212 | AttribsData->ScaleAndBias = {Attribs.Scale, Attribs.Bias}; |
| 213 | AttribsData->f2GridSize = {static_cast<float>(Attribs.GridSize.x), static_cast<float>(Attribs.GridSize.y)}; |
| 214 | AttribsData->u2GridSize = {Attribs.GridSize.x, Attribs.GridSize.y}; |
| 215 | AttribsData->StartColor = Attribs.StartColor; |
| 216 | AttribsData->EndColor = Attribs.EndColor; |
| 217 | } |
| 218 | |
| 219 | Attribs.pContext->SetPipelineState(pPSO); |
| 220 | Attribs.pContext->CommitShaderResources(m_SRB, RESOURCE_STATE_TRANSITION_MODE_VERIFY); |
| 221 | DrawAttribs drawAttribs{Attribs.GridSize.x * Attribs.GridSize.y * 2, DRAW_FLAG_VERIFY_ALL}; |
| 222 | Attribs.pContext->Draw(drawAttribs); |
| 223 | } |
| 224 | |
| 225 | } // namespace Diligent |
nothing calls this directly
no test coverage detected