LensFlareSprite.ankiprog 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // Copyright (C) 2009-present, 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 technique vert pixel
  6. #include <AnKi/Shaders/Common.hlsl>
  7. #include <AnKi/Shaders/Include/MiscRendererTypes.h>
  8. struct VertOut
  9. {
  10. Vec3 m_uv : TEXCOORD;
  11. Vec4 m_color : COLOR;
  12. Vec4 m_svPosition : SV_POSITION;
  13. };
  14. #if ANKI_VERTEX_SHADER
  15. // The block contains data for all flares
  16. StructuredBuffer<LensFlareSprite> g_sprites : register(t0);
  17. VertOut main(U32 svVertexId : SV_VERTEXID, U32 svInstanceId : SV_INSTANCEID)
  18. {
  19. const Vec2 position = uvToNdc(Vec2(svVertexId & 1, svVertexId >> 1));
  20. const LensFlareSprite sprite = g_sprites[svInstanceId];
  21. // Write tex coords of the 2D array texture
  22. VertOut output;
  23. output.m_uv = Vec3((position * 0.5) + 0.5, sprite.m_depthPad3.x);
  24. const Vec4 posScale = sprite.m_posScale;
  25. output.m_svPosition = Vec4(position * posScale.zw + posScale.xy, 0.0, 1.0);
  26. output.m_color = sprite.m_color;
  27. return output;
  28. }
  29. #endif // ANKI_VERTEX_SHADER
  30. #if ANKI_PIXEL_SHADER
  31. SamplerState g_trilinearRepeatSampler : register(s0);
  32. Texture2DArray<Vec4> g_tex : register(t1);
  33. Vec4 main(VertOut input) : SV_TARGET0
  34. {
  35. const Vec4 col = g_tex.Sample(g_trilinearRepeatSampler, input.m_uv);
  36. return col * input.m_color;
  37. }
  38. #endif