struct TurretRangeData { float4 posAndRadius; float4 rangeBoundNormals; }; cbuffer turretRangeData : register(b0) { int _28_dataSize : packoffset(c0); float4 _28_color : packoffset(c1); TurretRangeData _28_data[511] : packoffset(c2); }; Texture2D pretest : register(t0); SamplerState _pretest_sampler : register(s0); static float4 gl_FragCoord; static float4 fragColor; static float2 vUV; struct SPIRV_Cross_Input { float2 vUV : TEXCOORD0; float4 gl_FragCoord : SV_Position; }; struct SPIRV_Cross_Output { float4 fragColor : SV_Target0; }; void frag_main() { fragColor = 0.0f.xxxx; for (int i = 0; i < _28_dataSize; i++) { float2 pos = _28_data[i].posAndRadius.xy; float2 startVec = _28_data[i].rangeBoundNormals.xy; float2 endVec = _28_data[i].rangeBoundNormals.zw; float2 delta = gl_FragCoord.xy - pos; float2 normal = float2(delta.y, -delta.x); float dist = dot(delta, delta); float crossA = dot(startVec, normal); float crossB = dot(endVec, normal); float maxRadiusSquared = _28_data[i].posAndRadius.z; float minRadiusSquared = _28_data[i].posAndRadius.w; if (all(bool4(crossA >= 0.0f, crossB <= 0.0f, dist < maxRadiusSquared, dist > minRadiusSquared))) { fragColor = _28_color; break; } } } SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { gl_FragCoord = stage_input.gl_FragCoord; gl_FragCoord.w = 1.0 / gl_FragCoord.w; vUV = stage_input.vUV; frag_main(); SPIRV_Cross_Output stage_output; stage_output.fragColor = fragColor; return stage_output; }