SourcePP
Several modern C++20 libraries for sanely parsing Valve's formats.
Loading...
Searching...
No Matches
ImagePixel.h File Reference
#include <bit>
#include <concepts>
#include <cstring>
#include <BufferStream.h>
#include "ImageFormats.h"
Include dependency graph for ImagePixel.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

namespace  vtfpp
namespace  vtfpp::ImagePixel
namespace  vtfpp::ImagePixel::detail

Concepts

concept  vtfpp::ImagePixel::PixelType

Macros

#define VTFPP_FORMAT_CHECK(format, bo)
#define VTFPP_FORMAT(format, bo, ...)
#define VTFPP_FORMAT_INHERITED(format, parent)
#define VTFPP_FORMAT_ACCESSOR(channel)
#define VTFPP_FORMAT_ACCESSOR_BSWAP(format, channel)
#define VTFPP_FORMAT(format, accessors)

Functions

 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGBA8888, LE, uint8_t r, g, b, a)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGBA8888, BE, uint8_t a, b, g, r)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (ABGR8888, LE, uint8_t a, b, g, r)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (ABGR8888, BE, uint8_t r, g, b, a)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGB888, LE, uint8_t r, g, b)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGB888, BE, uint8_t b, g, r)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT_INHERITED (RGB888_BLUESCREEN, RGB888)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (BGR888, LE, uint8_t b, g, r)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (BGR888, BE, uint8_t r, g, b)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT_INHERITED (BGR888_BLUESCREEN, BGR888)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGB565, LE, uint16_t r :5, g :6, b :5)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGB565, BE, uint16_t data)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (I8, LE, uint8_t i)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (I8, BE, uint8_t i)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (IA88, LE, uint8_t i, a)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (IA88, BE, uint8_t a, i)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (P8, LE, uint8_t p)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (P8, BE, uint8_t p)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (A8, LE, uint8_t a)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (A8, BE, uint8_t a)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (ARGB8888, LE, uint8_t a, r, g, b)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (ARGB8888, BE, uint8_t b, g, r, a)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (BGRA8888, LE, uint8_t b, g, r, a)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (BGRA8888, BE, uint8_t a, r, g, b)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (BGRX8888, LE, uint8_t b, g, r, x)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (BGRX8888, BE, uint8_t x, r, g, b)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (BGR565, LE, uint16_t b :5, g :6, r :5)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (BGR565, BE, uint16_t data)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (BGRX5551, LE, uint16_t b :5, g :5, r :5, x :1)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (BGRX5551, BE, uint16_t data)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (BGRA4444, LE, uint16_t b :4, g :4, r :4, a :4)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (BGRA4444, BE, uint16_t data)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (BGRA5551, LE, uint16_t b :5, g :5, r :5, a :1)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (BGRA5551, BE, uint16_t data)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (UV88, LE, uint8_t u, v)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (UV88, BE, uint8_t v, u)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (UVWQ8888, LE, uint8_t u, v, w, q)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (UVWQ8888, BE, uint8_t q, w, v, u)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGBA16161616F, LE, half r, g, b, a)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGBA16161616F, BE, half a, b, g, r)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGBA16161616, LE, uint16_t r, g, b, a)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGBA16161616, BE, uint16_t a, b, g, r)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (UVLX8888, LE, uint8_t u, v, l, x)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (UVLX8888, BE, uint8_t x, l, v, u)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (R32F, LE, float r)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (R32F, BE, float r)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGB323232F, LE, float r, g, b)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGB323232F, BE, float b, g, r)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGBA32323232F, LE, float r, g, b, a)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGBA32323232F, BE, float a, b, g, r)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RG1616F, LE, half r, g)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RG1616F, BE, half g, r)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RG3232F, LE, float r, g)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RG3232F, BE, float g, r)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGBX8888, LE, uint8_t r, g, b, x)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGBX8888, BE, uint8_t x, b, g, r)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGBA1010102, LE, uint32_t r :10, g :10, b :10, a :2)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (RGBA1010102, BE, uint32_t data)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (BGRA1010102, LE, uint32_t b :10, g :10, r :10, a :2)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (BGRA1010102, BE, uint32_t data)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (R16F, LE, half r)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (R16F, BE, half r)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT_INHERITED (CONSOLE_BGRX8888_LINEAR, BGRX8888)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT_INHERITED (CONSOLE_RGBA8888_LINEAR, RGBA8888)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT_INHERITED (CONSOLE_ABGR8888_LINEAR, ABGR8888)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT_INHERITED (CONSOLE_ARGB8888_LINEAR, ARGB8888)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT_INHERITED (CONSOLE_BGRA8888_LINEAR, BGRA8888)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT_INHERITED (CONSOLE_RGB888_LINEAR, RGB888)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT_INHERITED (CONSOLE_BGR888_LINEAR, BGR888)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT_INHERITED (CONSOLE_BGRX5551_LINEAR, BGRX5551)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT_INHERITED (CONSOLE_I8_LINEAR, I8)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT_INHERITED (CONSOLE_RGBA16161616_LINEAR, RGBA16161616)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT_INHERITED (CONSOLE_BGRX8888_LE, BGRX8888)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT_INHERITED (CONSOLE_BGRA8888_LE, BGRA8888)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (STRATA_R8, LE, uint8_t r)
 vtfpp::ImagePixel::detail::VTFPP_FORMAT (STRATA_R8, BE, uint8_t r)
 vtfpp::ImagePixel::VTFPP_FORMAT (RGBA8888, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b) VTFPP_FORMAT_ACCESSOR(a))
 vtfpp::ImagePixel::VTFPP_FORMAT (ABGR8888, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b) VTFPP_FORMAT_ACCESSOR(a))
 vtfpp::ImagePixel::VTFPP_FORMAT (RGB888, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b))
 vtfpp::ImagePixel::VTFPP_FORMAT (BGR888, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b))
 vtfpp::ImagePixel::VTFPP_FORMAT (RGB565, VTFPP_FORMAT_ACCESSOR_BSWAP(RGB565, r) VTFPP_FORMAT_ACCESSOR_BSWAP(RGB565, g) VTFPP_FORMAT_ACCESSOR_BSWAP(RGB565, b))
 vtfpp::ImagePixel::VTFPP_FORMAT (I8, VTFPP_FORMAT_ACCESSOR(i))
 vtfpp::ImagePixel::VTFPP_FORMAT (IA88, VTFPP_FORMAT_ACCESSOR(i) VTFPP_FORMAT_ACCESSOR(a))
 vtfpp::ImagePixel::VTFPP_FORMAT (P8, VTFPP_FORMAT_ACCESSOR(p))
 vtfpp::ImagePixel::VTFPP_FORMAT (A8, VTFPP_FORMAT_ACCESSOR(a))
 vtfpp::ImagePixel::VTFPP_FORMAT (RGB888_BLUESCREEN, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b))
 vtfpp::ImagePixel::VTFPP_FORMAT (BGR888_BLUESCREEN, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b))
 vtfpp::ImagePixel::VTFPP_FORMAT (ARGB8888, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b) VTFPP_FORMAT_ACCESSOR(a))
 vtfpp::ImagePixel::VTFPP_FORMAT (BGRA8888, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b) VTFPP_FORMAT_ACCESSOR(a))
 vtfpp::ImagePixel::VTFPP_FORMAT (BGRX8888, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b) VTFPP_FORMAT_ACCESSOR(x))
 vtfpp::ImagePixel::VTFPP_FORMAT (BGR565, VTFPP_FORMAT_ACCESSOR_BSWAP(BGR565, r) VTFPP_FORMAT_ACCESSOR_BSWAP(BGR565, g) VTFPP_FORMAT_ACCESSOR_BSWAP(BGR565, b))
 vtfpp::ImagePixel::VTFPP_FORMAT (BGRX5551, VTFPP_FORMAT_ACCESSOR_BSWAP(BGRX5551, r) VTFPP_FORMAT_ACCESSOR_BSWAP(BGRX5551, g) VTFPP_FORMAT_ACCESSOR_BSWAP(BGRX5551, b) VTFPP_FORMAT_ACCESSOR_BSWAP(BGRX5551, x))
 vtfpp::ImagePixel::VTFPP_FORMAT (BGRA4444, VTFPP_FORMAT_ACCESSOR_BSWAP(BGRA4444, r) VTFPP_FORMAT_ACCESSOR_BSWAP(BGRA4444, g) VTFPP_FORMAT_ACCESSOR_BSWAP(BGRA4444, b) VTFPP_FORMAT_ACCESSOR_BSWAP(BGRA4444, a))
 vtfpp::ImagePixel::VTFPP_FORMAT (BGRA5551, VTFPP_FORMAT_ACCESSOR_BSWAP(BGRA5551, r) VTFPP_FORMAT_ACCESSOR_BSWAP(BGRA5551, g) VTFPP_FORMAT_ACCESSOR_BSWAP(BGRA5551, b) VTFPP_FORMAT_ACCESSOR_BSWAP(BGRA5551, a))
 vtfpp::ImagePixel::VTFPP_FORMAT (UV88, VTFPP_FORMAT_ACCESSOR(u) VTFPP_FORMAT_ACCESSOR(v))
 vtfpp::ImagePixel::VTFPP_FORMAT (UVWQ8888, VTFPP_FORMAT_ACCESSOR(u) VTFPP_FORMAT_ACCESSOR(v) VTFPP_FORMAT_ACCESSOR(w) VTFPP_FORMAT_ACCESSOR(q))
 vtfpp::ImagePixel::VTFPP_FORMAT (RGBA16161616F, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b) VTFPP_FORMAT_ACCESSOR(a))
 vtfpp::ImagePixel::VTFPP_FORMAT (RGBA16161616, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b) VTFPP_FORMAT_ACCESSOR(a))
 vtfpp::ImagePixel::VTFPP_FORMAT (UVLX8888, VTFPP_FORMAT_ACCESSOR(u) VTFPP_FORMAT_ACCESSOR(v) VTFPP_FORMAT_ACCESSOR(l) VTFPP_FORMAT_ACCESSOR(x))
 vtfpp::ImagePixel::VTFPP_FORMAT (R32F, VTFPP_FORMAT_ACCESSOR(r))
 vtfpp::ImagePixel::VTFPP_FORMAT (RGB323232F, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b))
 vtfpp::ImagePixel::VTFPP_FORMAT (RGBA32323232F, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b) VTFPP_FORMAT_ACCESSOR(a))
 vtfpp::ImagePixel::VTFPP_FORMAT (RG1616F, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g))
 vtfpp::ImagePixel::VTFPP_FORMAT (RG3232F, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g))
 vtfpp::ImagePixel::VTFPP_FORMAT (RGBX8888, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b) VTFPP_FORMAT_ACCESSOR(x))
 vtfpp::ImagePixel::VTFPP_FORMAT (RGBA1010102, VTFPP_FORMAT_ACCESSOR_BSWAP(RGBA1010102, r) VTFPP_FORMAT_ACCESSOR_BSWAP(RGBA1010102, g) VTFPP_FORMAT_ACCESSOR_BSWAP(RGBA1010102, b) VTFPP_FORMAT_ACCESSOR_BSWAP(RGBA1010102, a))
 vtfpp::ImagePixel::VTFPP_FORMAT (BGRA1010102, VTFPP_FORMAT_ACCESSOR_BSWAP(RGBA1010102, r) VTFPP_FORMAT_ACCESSOR_BSWAP(RGBA1010102, g) VTFPP_FORMAT_ACCESSOR_BSWAP(RGBA1010102, b) VTFPP_FORMAT_ACCESSOR_BSWAP(RGBA1010102, a))
 vtfpp::ImagePixel::VTFPP_FORMAT (R16F, VTFPP_FORMAT_ACCESSOR(r))
 vtfpp::ImagePixel::VTFPP_FORMAT (CONSOLE_BGRX8888_LINEAR, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b) VTFPP_FORMAT_ACCESSOR(x))
 vtfpp::ImagePixel::VTFPP_FORMAT (CONSOLE_RGBA8888_LINEAR, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b) VTFPP_FORMAT_ACCESSOR(a))
 vtfpp::ImagePixel::VTFPP_FORMAT (CONSOLE_ABGR8888_LINEAR, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b) VTFPP_FORMAT_ACCESSOR(a))
 vtfpp::ImagePixel::VTFPP_FORMAT (CONSOLE_ARGB8888_LINEAR, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b) VTFPP_FORMAT_ACCESSOR(a))
 vtfpp::ImagePixel::VTFPP_FORMAT (CONSOLE_BGRA8888_LINEAR, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b) VTFPP_FORMAT_ACCESSOR(a))
 vtfpp::ImagePixel::VTFPP_FORMAT (CONSOLE_RGB888_LINEAR, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b))
 vtfpp::ImagePixel::VTFPP_FORMAT (CONSOLE_BGR888_LINEAR, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b))
 vtfpp::ImagePixel::VTFPP_FORMAT (CONSOLE_BGRX5551_LINEAR, VTFPP_FORMAT_ACCESSOR_BSWAP(CONSOLE_BGRX5551_LINEAR, r) VTFPP_FORMAT_ACCESSOR_BSWAP(CONSOLE_BGRX5551_LINEAR, g) VTFPP_FORMAT_ACCESSOR_BSWAP(CONSOLE_BGRX5551_LINEAR, b) VTFPP_FORMAT_ACCESSOR_BSWAP(CONSOLE_BGRX5551_LINEAR, x))
 vtfpp::ImagePixel::VTFPP_FORMAT (CONSOLE_I8_LINEAR, VTFPP_FORMAT_ACCESSOR(i))
 vtfpp::ImagePixel::VTFPP_FORMAT (CONSOLE_RGBA16161616_LINEAR, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b) VTFPP_FORMAT_ACCESSOR(a))
 vtfpp::ImagePixel::VTFPP_FORMAT (CONSOLE_BGRX8888_LE, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b) VTFPP_FORMAT_ACCESSOR(x))
 vtfpp::ImagePixel::VTFPP_FORMAT (CONSOLE_BGRA8888_LE, VTFPP_FORMAT_ACCESSOR(r) VTFPP_FORMAT_ACCESSOR(g) VTFPP_FORMAT_ACCESSOR(b) VTFPP_FORMAT_ACCESSOR(a))
 vtfpp::ImagePixel::VTFPP_FORMAT (STRATA_R8, VTFPP_FORMAT_ACCESSOR(r))
template<PixelType P, typename C>
std::vector< std::byte > vtfpp::ImagePixel::extractChannelFromImageData (std::span< const std::byte > imageData, C(P::*channel)() const)
 Extracts a single channel from the given image data.

Macro Definition Documentation

◆ VTFPP_FORMAT [1/2]

#define VTFPP_FORMAT ( format,
accessors )
Value:
class format { \
protected: \
union Pixel { \
detail::format##_LE le; \
detail::format##_BE be; \
Pixel() { std::memset(this, 0, sizeof(Pixel)); } \
} pixel; \
public: \
static constexpr auto FORMAT = ImageFormat::format; \
format(detail::format##_LE le) { \
if constexpr (std::endian::native == std::endian::little) { \
this->pixel.le = le; \
} else { \
BufferStream::swap_endian(&le); \
this->pixel.be = std::bit_cast<detail::format##_BE>(le); \
} \
} \
accessors \
}; static_assert(std::is_trivially_copyable_v<format> && sizeof(format) == ImageFormatDetails::bpp(ImageFormat::format) / 8)

Definition at line 18 of file ImagePixel.h.

◆ VTFPP_FORMAT [2/2]

#define VTFPP_FORMAT ( format,
bo,
... )
Value:
struct format##_##bo { \
static constexpr auto FORMAT = ImageFormat::format; \
__VA_ARGS__; \
}; VTFPP_FORMAT_CHECK(format, bo)
#define VTFPP_FORMAT_CHECK(format, bo)
Definition ImagePixel.h:15

Definition at line 18 of file ImagePixel.h.

◆ VTFPP_FORMAT_ACCESSOR

#define VTFPP_FORMAT_ACCESSOR ( channel)
Value:
[[nodiscard]] constexpr auto channel() const { \
if constexpr (std::endian::native == std::endian::little) { \
return pixel.le.channel; \
} else { \
return pixel.be.channel; \
} \
} \
constexpr void set##_##channel(decltype(pixel.le.channel) value) { \
if constexpr (std::endian::native == std::endian::little) { \
pixel.le.channel = value; \
} else { \
pixel.be.channel = value; \
} \
}

Definition at line 159 of file ImagePixel.h.

◆ VTFPP_FORMAT_ACCESSOR_BSWAP

#define VTFPP_FORMAT_ACCESSOR_BSWAP ( format,
channel )
Value:
[[nodiscard]] constexpr auto channel() const { \
if constexpr (std::endian::native == std::endian::little) { \
return pixel.le.channel; \
} else { \
auto swapped = pixel.be.data; \
BufferStream::swap_endian(&swapped); \
return std::bit_cast<detail::format##_LE>(swapped).channel; \
} \
} \
constexpr void set##_##channel(decltype(pixel.le.channel) value) { \
if constexpr (std::endian::native == std::endian::little) { \
pixel.le.channel = value; \
} else { \
auto pixelLE = std::bit_cast<detail::format##_LE>(pixel.be.data); \
pixelLE.channel = value; \
auto swapped = std::bit_cast<decltype(pixel.be.data)>(pixelLE); \
BufferStream::swap_endian(&swapped); \
pixel.be.data = swapped; \
} \
}

Definition at line 175 of file ImagePixel.h.

◆ VTFPP_FORMAT_CHECK

#define VTFPP_FORMAT_CHECK ( format,
bo )
Value:
static_assert(std::is_trivially_copyable_v<format##_##bo> && sizeof(format##_##bo) == ImageFormatDetails::bpp(ImageFormat::format) / 8)

Definition at line 15 of file ImagePixel.h.

◆ VTFPP_FORMAT_INHERITED

#define VTFPP_FORMAT_INHERITED ( format,
parent )
Value:
struct format##_LE : parent##_LE { \
static constexpr auto FORMAT = ImageFormat::format; \
}; VTFPP_FORMAT_CHECK(format, LE); \
struct format##_BE : parent##_BE { \
static constexpr auto FORMAT = ImageFormat::format; \
}; VTFPP_FORMAT_CHECK(format, BE)

Definition at line 24 of file ImagePixel.h.