#include "shaders/metal_program_params.hpp" #include "drape/metal/metal_base_context.hpp" namespace gpu { namespace metal { namespace { template void ApplyBytes(ref_ptr context, ref_ptr program, T const & params) { ref_ptr p = program; ref_ptr metalContext = context; id encoder = metalContext->GetCommandEncoder(); auto const vsBindingIndex = p->GetVertexShaderUniformsBindingIndex(); if (vsBindingIndex >= 0) { [encoder setVertexBytes:(void const *)¶ms length:sizeof(params) atIndex:vsBindingIndex]; } auto const fsBindingIndex = p->GetFragmentShaderUniformsBindingIndex(); if (fsBindingIndex >= 0) { [encoder setFragmentBytes:(void const *)¶ms length:sizeof(params) atIndex:fsBindingIndex]; } } } // namespace void MetalProgramParamsSetter::Apply(ref_ptr context, ref_ptr program, MapProgramParams const & params) { ApplyBytes(context, program, params); } void MetalProgramParamsSetter::Apply(ref_ptr context, ref_ptr program, RouteProgramParams const & params) { ApplyBytes(context, program, params); } void MetalProgramParamsSetter::Apply(ref_ptr context, ref_ptr program, TrafficProgramParams const & params) { ApplyBytes(context, program, params); } void MetalProgramParamsSetter::Apply(ref_ptr context, ref_ptr program, TransitProgramParams const & params) { ApplyBytes(context, program, params); } void MetalProgramParamsSetter::Apply(ref_ptr context, ref_ptr program, GuiProgramParams const & params) { ApplyBytes(context, program, params); } void MetalProgramParamsSetter::Apply(ref_ptr context, ref_ptr program, ShapesProgramParams const & params) { ApplyBytes(context, program, params); } void MetalProgramParamsSetter::Apply(ref_ptr context, ref_ptr program, Arrow3dProgramParams const & params) { ApplyBytes(context, program, params); } void MetalProgramParamsSetter::Apply(ref_ptr context, ref_ptr program, DebugRectProgramParams const & params) { ApplyBytes(context, program, params); } void MetalProgramParamsSetter::Apply(ref_ptr context, ref_ptr program, ScreenQuadProgramParams const & params) { ApplyBytes(context, program, params); } void MetalProgramParamsSetter::Apply(ref_ptr context, ref_ptr program, SMAAProgramParams const & params) { ApplyBytes(context, program, params); } } // namespace metal } // namespace gpu