core: add nearClippedProjectionMatrix to MLNCustomStyleLayer (#4364)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Bart Louwers <bart@emeel.net>
This commit is contained in:
Yaroslav
2026-07-09 20:55:59 +03:00
committed by GitHub
parent 46afad6a6b
commit 14d3c7529d
4 changed files with 12 additions and 2 deletions

View File

@@ -22,8 +22,14 @@ struct CustomLayerRenderParameters {
double bearing;
double pitch;
double fieldOfView;
/// Standard projection matrix (nearZ = 1 tile unit).
/// Use this for 2D/flat custom geometry.
std::array<double, 16> projectionMatrix;
/// A 4×4 matrix representing the map view’s current near clip projection state.
std::array<double, 16> nearClippedProjectionMatrix;
CustomLayerRenderParameters(const PaintParameters&);
};

View File

@@ -30,8 +30,10 @@ typedef struct MLNStyleLayerDrawingContext {
CGFloat pitch;
/// The vertical field of view, in degrees, for the map’s perspective.
CGFloat fieldOfView;
/// A 4×4 matrix representing the map view’s current projection state.
/// Standard projection matrix (nearZ = 1 tile unit). Use for 2D/flat geometry.
MLNMatrix4 projectionMatrix;
/// A 4×4 matrix representing the map view’s current near clip projection state.
MLNMatrix4 nearClippedProjectionMatrix;
} MLNStyleLayerDrawingContext;
/// A style layer that is rendered by Metal code that you provide.

View File

@@ -117,7 +117,8 @@ public:
.direction = mbgl::util::wrap(parameters.bearing, 0., 360.),
.pitch = static_cast<CGFloat>(parameters.pitch),
.fieldOfView = static_cast<CGFloat>(parameters.fieldOfView),
.projectionMatrix = MLNMatrix4Make(parameters.projectionMatrix)};
.projectionMatrix = MLNMatrix4Make(parameters.projectionMatrix),
.nearClippedProjectionMatrix = MLNMatrix4Make(parameters.nearClippedProjectionMatrix)};
if (layer.mapView) {
[layer drawInMapView:layer.mapView withContext:drawingContext];

View File

@@ -18,6 +18,7 @@ CustomLayerRenderParameters::CustomLayerRenderParameters(const mbgl::PaintParame
mat4 projMatrix;
state.getProjMatrix(projMatrix);
projectionMatrix = projMatrix;
nearClippedProjectionMatrix = paintParameters.transformParams.nearClippedProjMatrix;
}
} // namespace style