| 76 | } |
| 77 | |
| 78 | void RenderGroup::Render(ref_ptr<dp::GraphicsContext> context, ref_ptr<gpu::ProgramManager> mng, |
| 79 | ScreenBase const & screen, FrameValues const & frameValues, |
| 80 | ref_ptr<DebugRectRenderer> debugRectRenderer) |
| 81 | { |
| 82 | auto programPtr = mng->GetProgram(screen.isPerspective() ? m_state.GetProgram3d<gpu::Program>() |
| 83 | : m_state.GetProgram<gpu::Program>()); |
| 84 | ASSERT(programPtr != nullptr, ()); |
| 85 | programPtr->Bind(); |
| 86 | dp::ApplyState(context, programPtr, m_state); |
| 87 | |
| 88 | for (auto & renderBucket : m_renderBuckets) |
| 89 | renderBucket->GetBuffer()->Build(context, programPtr); |
| 90 | |
| 91 | auto const program = m_state.GetProgram<gpu::Program>(); |
| 92 | auto const program3d = m_state.GetProgram3d<gpu::Program>(); |
| 93 | |
| 94 | // Set frame values to group's params. |
| 95 | frameValues.SetTo(m_params); |
| 96 | |
| 97 | // Set tile-based model-view matrix. |
| 98 | { |
| 99 | math::Matrix<float, 4, 4> mv = GetTileKey().GetTileBasedModelView(screen); |
| 100 | m_params.m_modelView = glsl::make_mat4(mv.m_data); |
| 101 | } |
| 102 | |
| 103 | auto const & glyphParams = df::VisualParams::Instance().GetGlyphVisualParams(); |
| 104 | if (program == gpu::Program::TextOutlined || program3d == gpu::Program::TextOutlinedBillboard) |
| 105 | { |
| 106 | m_params.m_contrastGamma = glsl::vec2(glyphParams.m_outlineContrast, glyphParams.m_outlineGamma); |
| 107 | m_params.m_isOutlinePass = 1.0f; |
| 108 | |
| 109 | mng->GetParamsSetter()->Apply(context, programPtr, m_params); |
| 110 | for (auto & renderBucket : m_renderBuckets) |
| 111 | renderBucket->Render(context, m_state.GetDrawAsLine()); |
| 112 | |
| 113 | m_params.m_contrastGamma = glsl::vec2(glyphParams.m_contrast, glyphParams.m_gamma); |
| 114 | m_params.m_isOutlinePass = 0.0f; |
| 115 | } |
| 116 | else if (program == gpu::Program::Text || program3d == gpu::Program::TextBillboard) |
| 117 | { |
| 118 | m_params.m_contrastGamma = glsl::vec2(glyphParams.m_contrast, glyphParams.m_gamma); |
| 119 | } |
| 120 | |
| 121 | mng->GetParamsSetter()->Apply(context, programPtr, m_params); |
| 122 | for (auto & renderBucket : m_renderBuckets) |
| 123 | renderBucket->Render(context, m_state.GetDrawAsLine()); |
| 124 | |
| 125 | if (debugRectRenderer && debugRectRenderer->IsEnabled()) |
| 126 | for (auto const & renderBucket : m_renderBuckets) |
| 127 | renderBucket->RenderDebug(context, screen, debugRectRenderer); |
| 128 | } |
| 129 | |
| 130 | void RenderGroup::AddBucket(drape_ptr<dp::RenderBucket> && bucket) |
| 131 | { |
nothing calls this directly
no test coverage detected