Cogs.Core
RasterTile.h
1#pragma once
2
3#include "../Extent.h"
4
5#include <atomic>
6
7namespace Cogs
8{
9 struct TileFlags
10 {
11 enum ETileFlags : uint32_t
12 {
13 None = 0,
14 Requested = 1,
15 OutOfBounds = 1 << 1,
16 Invalidated = 1 << 2,
17 };
18 };
19
21 {
22 RasterTileIdentifier getSouthwestChild() const { return { level + 1, x * 2, y * 2 }; }
23 RasterTileIdentifier getSoutheastChild() const { return { level + 1, x * 2 + 1, y * 2 }; }
24 RasterTileIdentifier getNorthwestChild() const { return { level + 1, x * 2, y * 2 + 1 }; }
25 RasterTileIdentifier getNortheastChild() const { return { level + 1, x * 2 + 1, y * 2 + 1 }; }
26
27 size_t getHashCode() const
28 {
29 size_t result = level;
30 result = result * 16777619 + x;
31 result = result * 16777619 + y;
32 return result;
33 }
34
35 int level;
36 int x;
37 int y;
38 };
39
41 {
42 int getWidth() const { return extent.getWidth(); }
43 int getHeight() const { return extent.getHeight(); }
44
45 bool isSet(TileFlags::ETileFlags flag) const { return (flags & flag) == flag; }
46
47 bool isOOB() const { return isSet(TileFlags::OutOfBounds); }
48 bool isRequested() const { return isSet(TileFlags::Requested); }
49 bool isInvalidated() const { return isSet(TileFlags::Invalidated); }
50 bool isResident() const { return data && !isInvalidated(); }
51
52 void invalidate() { generation++; flags |= TileFlags::Invalidated; }
53 void setValid() { flags &= ~TileFlags::Invalidated; unsetRequested(); }
54
55 void setRequested() { flags |= TileFlags::Requested; }
56 void unsetRequested() { flags &= ~TileFlags::Requested; }
57
58 RasterTileIdentifier identifier;
59 Extent extent;
60
61 struct RasterTileData * data = nullptr;
62
63 std::atomic<size_t> generation = 1;
64 std::atomic<uint32_t> usage = 0;
65 std::atomic<uint32_t> flags = TileFlags::None;
66 };
67
69 {
70 RasterTile * tile;
71 };
72
74 {
75 RasterTile * tile;
76 int rasterLevel;
77 };
78
80 {
81 RasterTile * tile;
82 Extent extent;
83 };
84}
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
Raster index extent.
Definition: Extent.h:7