UiVisualizeImage.ankiprog 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // Copyright (C) 2009-2021, 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. out gl_PerVertex
  20. {
  21. Vec4 gl_Position;
  22. };
  23. void main()
  24. {
  25. out_uv = in_uv;
  26. out_col = in_col;
  27. const Vec2 pos = u_transform.xy * in_pos + u_transform.zw;
  28. gl_Position = Vec4(pos, 0.0, 1.0);
  29. }
  30. #pragma anki end
  31. #pragma anki start frag
  32. #include <AnKi/Shaders/Common.glsl>
  33. layout(location = 0) in Vec2 in_uv;
  34. layout(location = 1) in Vec4 in_col;
  35. layout(location = 0) out Vec4 out_col;
  36. layout(set = 0, binding = 0) uniform sampler u_trilinearRepeatSampler;
  37. #if TEXTURE_TYPE == 0
  38. layout(set = 0, binding = 1) uniform texture2D u_tex2d;
  39. #else
  40. layout(set = 0, binding = 1) uniform texture3D u_tex3d;
  41. #endif
  42. void main()
  43. {
  44. #if TEXTURE_TYPE == 0
  45. const Vec4 rgba = texture(u_tex2d, u_trilinearRepeatSampler, in_uv);
  46. #else
  47. const Vec4 rgba = texture(u_tex3d, u_trilinearRepeatSampler, Vec3(in_uv, u_depth.x));
  48. #endif
  49. out_col.rgb = in_col.rgb * rgba.rgb * u_colorScale.rgb;
  50. if(u_colorScale.a == 1.0)
  51. {
  52. // Draw a pattern to visualize alpha
  53. F32 alphaPattern = ((U32(gl_FragCoord.x) / 16u) & 1u) == 1u ? 1.0 : 0.75;
  54. alphaPattern *= ((U32(gl_FragCoord.y) / 16u) & 1u) == 1u ? 1.0 : 0.75;
  55. out_col.rgb = mix(Vec3(alphaPattern), out_col.rgb, rgba.a);
  56. }
  57. out_col.a = 1.0;
  58. }
  59. #pragma anki end