Files
comaps/shaders/Metal/shaders_lib.metal
Konstantin Pastbin e3e4a1985a Organic Maps sources as of 02.04.2025 (fad26bbf22ac3da75e01e62aa01e5c8e11861005)
To expand with full Organic Maps and Maps.ME commits history run:
  git remote add om-historic [om-historic.git repo url]
  git fetch --tags om-historic
  git replace squashed-history historic-commits
2025-05-08 21:10:51 +07:00

32 lines
1.1 KiB
Metal

#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
float4 ApplyPivotTransform(float4 pivot, float4x4 pivotTransform, float pivotRealZ)
{
float4 transformedPivot = pivot;
float w = transformedPivot.w;
transformedPivot.xyw = (pivotTransform * float4(transformedPivot.xy, pivotRealZ, w)).xyw;
transformedPivot.z *= transformedPivot.w / w;
return transformedPivot;
}
float2 CalcLineTransformedAxisPos(float2 originalAxisPos, float2 shiftedPos, float4x4 modelView, float halfWidth)
{
float2 p = (float4(shiftedPos, 0.0, 1.0) * modelView).xy;
float2 d = p - originalAxisPos;
if (dot(d, d) != 0.0)
return originalAxisPos + normalize(d) * halfWidth;
else
return originalAxisPos;
}
float4 ApplyBillboardPivotTransform(float4 pivot, float4x4 pivotTransform, float pivotRealZ, float2 offset)
{
float logicZ = pivot.z / pivot.w;
float4 transformedPivot = pivotTransform * float4(pivot.xy, pivotRealZ, pivot.w);
float4 scale = pivotTransform * float4(1.0, -1.0, 0.0, 1.0);
return float4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + float4(offset / scale.w * scale.x, 0.0, 0.0);
}