#pragma once #include #include #include namespace mbgl { namespace shaders { template <> struct ShaderSource { static constexpr const char* name = "LocationIndicatorShader"; static const std::array attributes; static constexpr std::array instanceAttributes{}; static const std::array textures; static constexpr auto vertex = R"( struct VertexInput { @location(5) position: vec2, }; struct VertexOutput { @builtin(position) position: vec4, }; struct LocationIndicatorUBO { matrix: mat4x4, color: vec4, }; @group(0) @binding(0) var ubo: LocationIndicatorUBO; @vertex fn main(in: VertexInput) -> VertexOutput { var out: VertexOutput; out.position = ubo.matrix * vec4(in.position, 0.0, 1.0); return out; } )"; static constexpr auto fragment = R"( struct LocationIndicatorUBO { matrix: mat4x4, color: vec4, }; @group(0) @binding(0) var ubo: LocationIndicatorUBO; @fragment fn main(@builtin(position) position: vec4) -> @location(0) vec4 { return ubo.color; } )"; }; template <> struct ShaderSource { static constexpr const char* name = "LocationIndicatorTexturedShader"; static const std::array attributes; static constexpr std::array instanceAttributes{}; static const std::array textures; static constexpr auto vertex = R"( struct VertexInput { @location(5) position: vec2, @location(6) uv: vec2, }; struct VertexOutput { @builtin(position) position: vec4, @location(0) uv: vec2, }; struct LocationIndicatorUBO { matrix: mat4x4, color: vec4, }; @group(0) @binding(0) var ubo: LocationIndicatorUBO; @vertex fn main(in: VertexInput) -> VertexOutput { var out: VertexOutput; out.position = ubo.matrix * vec4(in.position, 0.0, 1.0); out.uv = in.uv; return out; } )"; static constexpr auto fragment = R"( struct LocationIndicatorUBO { matrix: mat4x4, color: vec4, }; @group(0) @binding(0) var ubo: LocationIndicatorUBO; @group(0) @binding(1) var colorTexture: texture_2d; @group(0) @binding(2) var colorSampler: sampler; @fragment fn main(@location(0) uv: vec2) -> @location(0) vec4 { let textureColor = textureSample(colorTexture, colorSampler, uv); return textureColor * ubo.color; } )"; }; } // namespace shaders } // namespace mbgl