Sampler.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /*
  2. * Copyright (c) 2021, Stephan Unverwerth <s.unverwerth@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/RefPtr.h>
  8. #include <LibGfx/Vector2.h>
  9. #include <LibGfx/Vector4.h>
  10. #include <LibSoftGPU/Image.h>
  11. namespace SoftGPU {
  12. enum class TextureFilter {
  13. Nearest,
  14. Linear,
  15. };
  16. enum class MipMapFilter {
  17. None,
  18. Nearest,
  19. Linear,
  20. };
  21. enum class TextureWrapMode {
  22. Repeat,
  23. MirroredRepeat,
  24. Clamp,
  25. ClampToBorder,
  26. ClampToEdge,
  27. };
  28. struct SamplerConfig final {
  29. RefPtr<Image> bound_image;
  30. MipMapFilter mipmap_filter { MipMapFilter::Nearest };
  31. TextureFilter texture_mag_filter { TextureFilter::Linear };
  32. TextureFilter texture_min_filter { TextureFilter::Linear };
  33. TextureWrapMode texture_wrap_u { TextureWrapMode::Repeat };
  34. TextureWrapMode texture_wrap_v { TextureWrapMode::Repeat };
  35. TextureWrapMode texture_wrap_w { TextureWrapMode::Repeat };
  36. FloatVector4 border_color { 0, 0, 0, 1 };
  37. };
  38. class Sampler final {
  39. public:
  40. FloatVector4 sample_2d(FloatVector2 const& uv) const;
  41. void set_config(SamplerConfig const& config) { m_config = config; }
  42. private:
  43. SamplerConfig m_config;
  44. };
  45. }