Additional shaders
Some checks failed
CI / Native Windows Build And Tests (push) Has been cancelled
CI / React UI Build (push) Has been cancelled
CI / Windows Release Package (push) Has been cancelled

This commit is contained in:
2026-05-06 00:23:20 +10:00
parent cf31c91831
commit 437199f3f0
9 changed files with 349 additions and 39 deletions

View File

@@ -0,0 +1,8 @@
{
"id": "smpte-color-bars",
"name": "SMPTE Color Bars",
"description": "Generates a procedural SMPTE RP 219-style 16:9 color bar test pattern matching the common Wikimedia 1920x1080 reference layout.",
"category": "Calibration",
"entryPoint": "shadeVideo",
"parameters": []
}

View File

@@ -0,0 +1,90 @@
float3 hexColor(float r, float g, float b)
{
return float3(r, g, b) / 255.0;
}
float3 smpteTop(float x)
{
if (x < 240.0)
return hexColor(102.0, 102.0, 102.0);
if (x < 445.0)
return hexColor(191.0, 191.0, 191.0);
if (x < 651.0)
return hexColor(191.0, 191.0, 0.0);
if (x < 857.0)
return hexColor(0.0, 191.0, 191.0);
if (x < 1063.0)
return hexColor(0.0, 191.0, 0.0);
if (x < 1269.0)
return hexColor(191.0, 0.0, 191.0);
if (x < 1475.0)
return hexColor(191.0, 0.0, 0.0);
if (x < 1680.0)
return hexColor(0.0, 0.0, 191.0);
return hexColor(102.0, 102.0, 102.0);
}
float3 smpteMiddleA(float x)
{
if (x < 240.0)
return hexColor(0.0, 255.0, 255.0);
if (x < 445.0)
return hexColor(0.0, 63.0, 105.0);
if (x < 1680.0)
return hexColor(191.0, 191.0, 191.0);
return hexColor(0.0, 0.0, 255.0);
}
float3 smpteMiddleB(float x)
{
if (x < 240.0)
return hexColor(255.0, 255.0, 0.0);
if (x < 445.0)
return hexColor(65.0, 0.0, 119.0);
if (x < 1475.0)
{
float ramp = saturate((x - 445.0) / (1475.0 - 445.0));
return float3(ramp, ramp, ramp);
}
if (x < 1680.0)
return float3(1.0, 1.0, 1.0);
return hexColor(255.0, 0.0, 0.0);
}
float3 smpteBottom(float x)
{
if (x < 240.0)
return hexColor(38.0, 38.0, 38.0);
if (x < 549.0)
return float3(0.0, 0.0, 0.0);
if (x < 960.0)
return float3(1.0, 1.0, 1.0);
if (x < 1268.0)
return float3(0.0, 0.0, 0.0);
if (x < 1337.0)
return hexColor(5.0, 5.0, 5.0);
if (x < 1405.0)
return float3(0.0, 0.0, 0.0);
if (x < 1474.0)
return hexColor(10.0, 10.0, 10.0);
if (x < 1680.0)
return float3(0.0, 0.0, 0.0);
return hexColor(38.0, 38.0, 38.0);
}
float4 shadeVideo(ShaderContext context)
{
float2 uv = saturate(context.uv);
float2 pixel = float2(uv.x, 1.0 - uv.y) * float2(1920.0, 1080.0);
if (pixel.y < 630.0)
return float4(smpteTop(pixel.x), 1.0);
if (pixel.y < 720.0)
return float4(smpteMiddleA(pixel.x), 1.0);
if (pixel.y < 810.0)
return float4(smpteMiddleB(pixel.x), 1.0);
return float4(smpteBottom(pixel.x), 1.0);
}