1
+ #include < tray/vec.hpp>
1
2
#include < array>
2
3
#include < cassert>
3
4
#include < iostream>
4
5
#include < ostream>
5
6
#include < span>
6
7
8
+ using namespace tray ;
9
+
7
10
namespace {
8
- struct Rgb {
9
- std::array<std::uint8_t , 3 > values{};
10
- };
11
+ struct Rgb : Vec<std::uint8_t , 3 > {};
11
12
12
13
struct ImageData {
13
14
std::span<Rgb const > data{};
14
- std::array<std:: uint32_t , 2 > extent{};
15
+ uvec2 extent{};
15
16
};
16
17
17
18
std::ostream& operator <<(std::ostream& out, ImageData const & image) {
18
- assert (image.data .size () == image.extent [ 0 ] * image.extent [ 1 ] );
19
+ assert (image.data .size () == image.extent . x () * image.extent . y () );
19
20
// write header
20
- out << " P3\n " << image.extent [ 0 ] << ' ' << image.extent [ 1 ] << " \n 255\n " ;
21
+ out << " P3\n " << image.extent . x () << ' ' << image.extent . y () << " \n 255\n " ;
21
22
// write each row
22
- for (std::uint32_t row = 0 ; row < image.extent [ 1 ] ; ++row) {
23
+ for (std::uint32_t row = 0 ; row < image.extent . y () ; ++row) {
23
24
// write each column
24
- for (std::uint32_t col = 0 ; col < image.extent [ 0 ] ; ++col) {
25
+ for (std::uint32_t col = 0 ; col < image.extent . x () ; ++col) {
25
26
// compute index
26
- auto const index = row * image.extent [ 0 ] + col;
27
+ auto const index = row * image.extent . x () + col;
27
28
// obtain corresponding Rgb
28
29
auto const & rgb = image.data [index];
29
30
// write out each channel
@@ -36,9 +37,9 @@ std::ostream& operator<<(std::ostream& out, ImageData const& image) {
36
37
} // namespace
37
38
38
39
int main () {
39
- static constexpr auto extent = std::array {40U , 30U };
40
- static constexpr auto white_v = Rgb{. values = { 0xff , 0xff , 0xff } };
41
- auto buffer = std::array<Rgb, extent[ 0 ] * extent[ 1 ] >{};
40
+ static constexpr auto extent = uvec2 {40U , 30U };
41
+ static constexpr auto white_v = Rgb{0xff , 0xff , 0xff };
42
+ auto buffer = std::array<Rgb, extent. x () * extent. y () >{};
42
43
std::fill_n (buffer.data (), buffer.size (), white_v);
43
44
auto const image_data = ImageData{.data = buffer, .extent = extent};
44
45
std::cout << image_data;
0 commit comments