1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
#include "shaders/metal_program_params.hpp"
#include "drape/metal/metal_base_context.hpp"
namespace gpu
{
namespace metal
{
namespace
{
template<typename T>
void ApplyBytes(ref_ptr<dp::GraphicsContext> context, ref_ptr<dp::GpuProgram> program,
T const & params)
{
ref_ptr<dp::metal::MetalGpuProgram> p = program;
ref_ptr<dp::metal::MetalBaseContext> metalContext = context;
id<MTLRenderCommandEncoder> 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<dp::GraphicsContext> context,
ref_ptr<dp::GpuProgram> program,
MapProgramParams const & params)
{
ApplyBytes(context, program, params);
}
void MetalProgramParamsSetter::Apply(ref_ptr<dp::GraphicsContext> context,
ref_ptr<dp::GpuProgram> program,
RouteProgramParams const & params)
{
ApplyBytes(context, program, params);
}
void MetalProgramParamsSetter::Apply(ref_ptr<dp::GraphicsContext> context,
ref_ptr<dp::GpuProgram> program,
TrafficProgramParams const & params)
{
ApplyBytes(context, program, params);
}
void MetalProgramParamsSetter::Apply(ref_ptr<dp::GraphicsContext> context,
ref_ptr<dp::GpuProgram> program,
TransitProgramParams const & params)
{
ApplyBytes(context, program, params);
}
void MetalProgramParamsSetter::Apply(ref_ptr<dp::GraphicsContext> context,
ref_ptr<dp::GpuProgram> program,
GuiProgramParams const & params)
{
ApplyBytes(context, program, params);
}
void MetalProgramParamsSetter::Apply(ref_ptr<dp::GraphicsContext> context,
ref_ptr<dp::GpuProgram> program,
ShapesProgramParams const & params)
{
ApplyBytes(context, program, params);
}
void MetalProgramParamsSetter::Apply(ref_ptr<dp::GraphicsContext> context,
ref_ptr<dp::GpuProgram> program,
Arrow3dProgramParams const & params)
{
ApplyBytes(context, program, params);
}
void MetalProgramParamsSetter::Apply(ref_ptr<dp::GraphicsContext> context,
ref_ptr<dp::GpuProgram> program,
DebugRectProgramParams const & params)
{
ApplyBytes(context, program, params);
}
void MetalProgramParamsSetter::Apply(ref_ptr<dp::GraphicsContext> context,
ref_ptr<dp::GpuProgram> program,
ScreenQuadProgramParams const & params)
{
ApplyBytes(context, program, params);
}
void MetalProgramParamsSetter::Apply(ref_ptr<dp::GraphicsContext> context,
ref_ptr<dp::GpuProgram> program,
SMAAProgramParams const & params)
{
ApplyBytes(context, program, params);
}
} // namespace metal
} // namespace gpu
|