UiVisualizeImage.ankiprog 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Copyright (C) 2009-2022, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma anki mutator TEXTURE_TYPE 0 1
  6. layout(push_constant) uniform b_pc
  7. {
  8. Vec4 u_transform; // x: x scale, y: y scale, z: x transl, w: y transl
  9. Vec4 u_colorScale;
  10. Vec4 u_depth; // Used in 3D textures.
  11. };
  12. #pragma anki start vert
  13. #include <AnKi/Shaders/Common.glsl>
  14. layout(location = 0) in Vec2 in_pos;
  15. layout(location = 1) in Vec4 in_col;
  16. layout(location = 2) in Vec2 in_uv;
  17. layout(location = 0) out Vec2 out_uv;
  18. layout(location = 1) out Vec4 out_col;
  19. void main()
  20. {
  21. out_uv = in_uv;
  22. out_col = in_col;
  23. const Vec2 pos = u_transform.xy * in_pos + u_transform.zw;
  24. gl_Position = Vec4(pos, 0.0, 1.0);
  25. }
  26. #pragma anki end
  27. #pragma anki start frag
  28. #include <AnKi/Shaders/Common.glsl>
  29. layout(location = 0) in Vec2 in_uv;
  30. layout(location = 1) in Vec4 in_col;
  31. layout(location = 0) out Vec4 out_col;
  32. layout(set = 0, binding = 0) uniform sampler u_trilinearRepeatSampler;
  33. #if TEXTURE_TYPE == 0
  34. layout(set = 0, binding = 1) uniform texture2D u_tex2d;
  35. #else
  36. layout(set = 0, binding = 1) uniform texture3D u_tex3d;
  37. #endif
  38. void main()
  39. {
  40. #if TEXTURE_TYPE == 0
  41. const Vec4 rgba = texture(u_tex2d, u_trilinearRepeatSampler, in_uv);
  42. #else
  43. const Vec4 rgba = texture(u_tex3d, u_trilinearRepeatSampler, Vec3(in_uv, u_depth.x));
  44. #endif
  45. out_col.rgb = in_col.rgb * rgba.rgb * u_colorScale.rgb;
  46. if(u_colorScale.a == 1.0)
  47. {
  48. // Draw a pattern to visualize alpha
  49. F32 alphaPattern = ((U32(gl_FragCoord.x) / 16u) & 1u) == 1u ? 1.0 : 0.75;
  50. alphaPattern *= ((U32(gl_FragCoord.y) / 16u) & 1u) == 1u ? 1.0 : 0.75;
  51. out_col.rgb = mix(Vec3(alphaPattern), out_col.rgb, rgba.a);
  52. }
  53. out_col.a = 1.0;
  54. }
  55. #pragma anki end