Loading [MathJax]/extensions/tex2jax.js
Iros
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
Loading...
Searching...
No Matches
bitmap.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/meta/util.h"
5#include "di/types/byte.h"
6#include "di/types/integers.h"
10#include "di/vocab/md/mdspan.h"
13
14namespace gfx {
21
22namespace bitmap {
23 template<typename Buffer>
24 class BitMapImpl {
25 private:
26 constexpr static auto is_const =
27 di::SameAs<di::Span<byte const>, decltype(di::declval<Buffer const&>().span())>;
28
29 using ConstBuffer = typename Buffer::ByteBuffer;
30
31 public:
32 BitMapImpl() = default;
33
34 constexpr explicit BitMapImpl(Buffer buffer, usize width, usize height)
35 : m_buffer(di::move(buffer)), m_width(width), m_height(height) {
36 DI_ASSERT(byte_count() == width * height * sizeof(ARGBPixel));
37 }
38
39 constexpr auto width() const -> usize { return m_width; }
40 constexpr auto height() const -> usize { return m_height; }
41 constexpr auto byte_count() const -> usize { return as_raw_bytes().size(); };
42
43 auto argb_pixels() const {
44 return di::MDSpan { reinterpret_cast<di::meta::MaybeConst<is_const, ARGBPixel>*>(as_raw_bytes().data()),
45 m_height, m_width };
46 }
47
48 constexpr auto as_raw_bytes() const { return m_buffer.span(); }
49
50 operator ConstBuffer() && requires(!is_const) { return ConstBuffer(di::move(m_buffer), m_width, m_height); }
51
52 private : Buffer m_buffer;
53 usize m_width;
54 usize m_height;
55 };
56}
57
60}
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition mdspan.h:18
Definition bitmap.h:24
constexpr auto as_raw_bytes() const
Definition bitmap.h:48
constexpr auto width() const -> usize
Definition bitmap.h:39
auto argb_pixels() const
Definition bitmap.h:43
constexpr auto byte_count() const -> usize
Definition bitmap.h:41
constexpr auto height() const -> usize
Definition bitmap.h:40
constexpr BitMapImpl(Buffer buffer, usize width, usize height)
Definition bitmap.h:34
Conditional< is_const, T const, T > MaybeConst
Definition util.h:9
size_t usize
Definition integers.h:33
__UINT8_TYPE__ u8
Definition integers.h:9
Definition zstring_parser.h:9
auto declval() -> meta::AddRValueReference< T >
Definition declval.h:8
Definition bitmap.h:22
Definition bitmap.h:14
bitmap::BitMapImpl< di::ExclusiveByteBuffer > ExclusiveBitMap
Definition bitmap.h:59
bitmap::BitMapImpl< di::ByteBuffer > BitMap
Definition bitmap.h:58
Definition bitmap.h:15
u8 blue
Definition bitmap.h:16
u8 green
Definition bitmap.h:17
u8 alpha
Definition bitmap.h:19
u8 red
Definition bitmap.h:18