Image.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /*
  2. * Copyright (c) 2022, Stephan Unverwerth <s.unverwerth@serenityos.org>
  3. * Copyright (c) 2022, Jelle Raaijmakers <jelle@gmta.nl>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/RefCounted.h>
  9. #include <AK/Vector.h>
  10. #include <LibGPU/ImageDataLayout.h>
  11. #include <LibGPU/ImageFormat.h>
  12. #include <LibGfx/Vector3.h>
  13. namespace GPU {
  14. class Image : public RefCounted<Image> {
  15. public:
  16. Image(void const* ownership_token, PixelFormat const&, u32 width, u32 height, u32 depth, u32 max_levels);
  17. virtual ~Image() { }
  18. u32 width_at_level(u32 level) const { return m_mipmap_sizes[level].x(); }
  19. u32 height_at_level(u32 level) const { return m_mipmap_sizes[level].y(); }
  20. u32 depth_at_level(u32 level) const { return m_mipmap_sizes[level].z(); }
  21. u32 number_of_levels() const { return m_mipmap_sizes.size(); }
  22. PixelFormat pixel_format() const { return m_pixel_format; }
  23. virtual void regenerate_mipmaps() = 0;
  24. virtual void write_texels(u32 level, Vector3<i32> const& output_offset, void const* input_data, ImageDataLayout const&) = 0;
  25. virtual void read_texels(u32 level, Vector3<i32> const& input_offset, void* output_data, ImageDataLayout const&) const = 0;
  26. virtual void copy_texels(Image const& source, u32 source_level, Vector3<u32> const& source_offset, Vector3<u32> const& size, u32 destination_level, Vector3<u32> const& destination_offset) = 0;
  27. void const* ownership_token() const { return m_ownership_token; }
  28. bool has_same_ownership_token(Image const& other) const { return other.ownership_token() == ownership_token(); }
  29. private:
  30. void const* const m_ownership_token { nullptr };
  31. Vector<Vector3<u32>> m_mipmap_sizes;
  32. PixelFormat m_pixel_format;
  33. };
  34. }