aboutsummaryrefslogtreecommitdiff
path: root/source/30-game/Image.cpp
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2023-10-19 22:50:07 -0700
committerrtk0c <[email protected]>2023-10-19 22:50:07 -0700
commit2c92e07f337e42cf58970443f9de678f85a9b2a4 (patch)
tree075d5407e1e12a9d35cbee6e4c20ad34e0765c42 /source/30-game/Image.cpp
parent615809c036f604bce4582cea8ad49c64693f4f45 (diff)
The great renaming: switch to "module style"
Diffstat (limited to 'source/30-game/Image.cpp')
-rw-r--r--source/30-game/Image.cpp101
1 files changed, 0 insertions, 101 deletions
diff --git a/source/30-game/Image.cpp b/source/30-game/Image.cpp
deleted file mode 100644
index 3673acc..0000000
--- a/source/30-game/Image.cpp
+++ /dev/null
@@ -1,101 +0,0 @@
-#include "Image.hpp"
-
-#include <stb_image.h>
-#include <stb_rect_pack.h>
-#include <cstring>
-
-Image::Image()
- : mSize{}
- , mChannels{ 0 } {
-}
-
-bool Image::InitFromImageFile(const char* filePath, int desiredChannels) {
- // Dimensions of the image in
- int width, height;
- // Number of channels that the image has, we'll get `desiredChannels` channels in our output (if it's non-0, which is the default argument)
- int channels;
-
- // NOTE: don't free, the data is passed to std::unique_ptr
- auto result = (uint8_t*)stbi_load(filePath, &width, &height, &channels, desiredChannels);
- if (!result) {
- return false;
- }
-
- mData.reset(result);
- mSize = { width, height };
- mChannels = desiredChannels == 0 ? channels : desiredChannels;
- return true;
-}
-
-bool Image::InitFromImageData(std::span<uint8_t> data, int desiredChannels) {
- int width, height;
- int channels;
-
- // NOTE: don't free, the data is passed to std::unique_ptr
- auto result = (uint8_t*)stbi_load_from_memory(data.data(), data.size(), &width, &height, &channels, desiredChannels);
- if (!result) {
- return false;
- }
-
- mData.reset(result);
- mSize = { width, height };
- mChannels = desiredChannels == 0 ? channels : desiredChannels;
- return true;
-}
-
-bool Image::InitFromPixels(std::span<uint8_t> pixels, glm::ivec2 dimensions, int channels) {
- mData = std::make_unique<uint8_t[]>(pixels.size());
- std::memcpy(mData.get(), pixels.data(), pixels.size());
- mSize = dimensions;
- mChannels = channels;
- return true;
-}
-
-bool Image::InitFromPixels(std::unique_ptr<uint8_t[]> pixels, glm::ivec2 dimensions, int channels) {
- mData = std::move(pixels);
- mSize = dimensions;
- mChannels = channels;
- return true;
-}
-
-RgbaColor Image::GetPixel(int x, int y) const {
- size_t offset = (y * mSize.x + x) * mChannels;
- RgbaColor color;
- color.r = mData.get()[offset + 0];
- color.g = mData.get()[offset + 1];
- color.b = mData.get()[offset + 2];
- color.a = mData.get()[offset + 3];
- return color;
-}
-
-void Image::SetPixel(int x, int y, RgbaColor color) {
- size_t offset = (y * mSize.x + x) * mChannels;
- mData.get()[offset + 0] = color.r;
- mData.get()[offset + 1] = color.g;
- mData.get()[offset + 2] = color.b;
- mData.get()[offset + 3] = color.a;
-}
-
-uint8_t* Image::GetDataPtr() const {
- return mData.get();
-}
-
-size_t Image::GetDataLength() const {
- return mSize.x * mSize.y * mChannels * sizeof(uint8_t);
-}
-
-std::span<uint8_t> Image::GetData() const {
- return { mData.get(), GetDataLength() };
-}
-
-glm::ivec2 Image::GetSize() const {
- return mSize;
-}
-
-int Image::GetChannels() const {
- return mChannels;
-}
-
-bool Image::IsEmpty() const {
- return mSize.x == 0 || mSize.y == 0;
-}