draw_image_transform.kong 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #[set(everything)]
  2. const constants: {
  3. pos: float4; // xywh
  4. tex: float4; // xywh
  5. col: float4;
  6. W: float3x3;
  7. };
  8. #[set(everything)]
  9. const sampler_linear: sampler;
  10. #[set(everything)]
  11. const tex: tex2d;
  12. struct vert_in {
  13. pos: float2;
  14. }
  15. struct vert_out {
  16. pos: float4;
  17. tex: float2;
  18. col: float4;
  19. }
  20. fun draw_image_transform_vert(input: vert_in): vert_out {
  21. var output: vert_out;
  22. var cpos: float4 = constants.pos;
  23. var ctex: float4 = constants.tex;
  24. output.pos = float4(input.pos, 1.0, 1.0);
  25. output.pos.xyz = constants.W * output.pos.xyz;
  26. output.pos.z = 0.0;
  27. output.pos.xy = output.pos.xy * cpos.zw + cpos.xy;
  28. output.pos.xy = output.pos.xy * 2.0 - 1.0;
  29. output.pos.y = -output.pos.y;
  30. output.tex = input.pos * ctex.zw + ctex.xy;
  31. output.col = constants.col;
  32. return output;
  33. }
  34. fun draw_image_transform_frag(input: vert_out): float4 {
  35. var texcolor: float4 = sample(tex, sampler_linear, input.tex) * input.col;
  36. texcolor.rgb = texcolor.rgb * texcolor.a * input.col.a;
  37. return texcolor;
  38. }
  39. #[pipe]
  40. struct pipe {
  41. vertex = draw_image_transform_vert;
  42. fragment = draw_image_transform_frag;
  43. }