Sampler.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. enum class TextureEnvMode {
  29. Modulate,
  30. Replace,
  31. Decal,
  32. };
  33. struct SamplerConfig final {
  34. RefPtr<Image> bound_image;
  35. MipMapFilter mipmap_filter { MipMapFilter::Nearest };
  36. TextureFilter texture_mag_filter { TextureFilter::Linear };
  37. TextureFilter texture_min_filter { TextureFilter::Linear };
  38. TextureWrapMode texture_wrap_u { TextureWrapMode::Repeat };
  39. TextureWrapMode texture_wrap_v { TextureWrapMode::Repeat };
  40. TextureWrapMode texture_wrap_w { TextureWrapMode::Repeat };
  41. FloatVector4 border_color { 0, 0, 0, 1 };
  42. TextureEnvMode fixed_function_texture_env_mode { TextureEnvMode::Modulate };
  43. };
  44. class Sampler final {
  45. public:
  46. FloatVector4 sample_2d(FloatVector2 const& uv) const;
  47. void set_config(SamplerConfig const& config) { m_config = config; }
  48. SamplerConfig const& config() const { return m_config; }
  49. private:
  50. SamplerConfig m_config;
  51. };
  52. }