Grindstone Game Engine v0.2.0
An open source game engine and toolkit.
Loading...
Searching...
No Matches
Image.hpp
1#pragma once
2
3#include <stdint.h>
4
5#include <Common/Containers/Bitset.hpp>
6
7#include "Formats.hpp"
8
9namespace Grindstone::GraphicsAPI {
10 enum class ImageUsageFlags : uint8_t {
11 Sampled = 1,
12 RenderTarget = 1 << 1,
13 DepthStencil = 1 << 2,
14 Storage = 1 << 3,
15 GenerateMipmaps = 1 << 4,
16 Cubemap = 1 << 5,
17 TransferSrc = 1 << 6,
18 TransferDst = 1 << 7,
19 Count = 8
20 };
21}
22
23template <>
24struct EnumFlagsTraits<Grindstone::GraphicsAPI::ImageUsageFlags> {
25 static constexpr const char* names[] = {
26 "Sampled",
27 "RenderTarget",
28 "DepthStencil",
29 "Storage",
30 "GenerateMipmaps",
31 "Cubemap",
32 "TransferSrc",
33 "TransferDst"
34 };
35 static constexpr size_t size = 8;
36};
37
38inline Grindstone::GraphicsAPI::ImageUsageFlags operator|(Grindstone::GraphicsAPI::ImageUsageFlags a, const Grindstone::GraphicsAPI::ImageUsageFlags b) {
39 using Underlying = uint8_t;
40 return static_cast<Grindstone::GraphicsAPI::ImageUsageFlags>(static_cast<Underlying>(a) | static_cast<Underlying>(b));
41}
42
43namespace Grindstone::GraphicsAPI {
48 class Image {
49 public:
50 struct CreateInfo {
51 const char* debugName;
52 uint32_t width = 1;
53 uint32_t height = 1;
54 uint32_t depth = 1;
55 uint32_t mipLevels = 1;
56 uint32_t arrayLayers = 1;
57
58 GraphicsAPI::Format format = GraphicsAPI::Format::Invalid;
59 GraphicsAPI::ImageDimension imageDimensions = GraphicsAPI::ImageDimension::Dimension2D;
61
62 const char* initialData = nullptr;
63 uint64_t initialDataSize = 0;
64 };
65
66 virtual void Resize(uint32_t width, uint32_t height) = 0;
67 virtual void UploadData(const char* data, uint64_t dataSize) = 0;
68 };
69}
Definition Bitset.hpp:331
Definition Image.hpp:48
Definition EnumTraits.hpp:10