70 lines
2.1 KiB
C++
70 lines
2.1 KiB
C++
|
|
#pragma once
|
|
|
|
#if !defined(BAD_APPLE_OS_DRAW_HPP_INCLUDED)
|
|
#define BAD_APPLE_OS_DRAW_HPP_INCLUDED
|
|
|
|
#include <stdint.h>
|
|
#include <vector>
|
|
|
|
namespace draw
|
|
{
|
|
const unsigned SIZE_FULL = static_cast<unsigned>(-1);
|
|
|
|
struct Pixel
|
|
{
|
|
uint8_t blue = 0;
|
|
uint8_t green = 0;
|
|
uint8_t red = 0;
|
|
uint8_t reserved_ = 0;
|
|
};
|
|
|
|
class Framebuffer
|
|
{
|
|
protected:
|
|
Pixel* mBase = nullptr;
|
|
unsigned mWidth = 0;
|
|
unsigned mHeight = 0;
|
|
unsigned mPitch = 0;
|
|
public:
|
|
Framebuffer() = default;
|
|
Framebuffer(const Framebuffer&) = default;
|
|
Framebuffer(Pixel* base, unsigned width, unsigned height, unsigned pitch) noexcept
|
|
: mBase(base), mWidth(width), mHeight(height), mPitch(pitch) {}
|
|
|
|
[[nodiscard]] Pixel* getBase() const noexcept { return mBase; }
|
|
[[nodiscard]] unsigned getWidth() const noexcept { return mWidth; }
|
|
[[nodiscard]] unsigned getHeight() const noexcept { return mHeight; }
|
|
[[nodiscard]] unsigned getPitch() const noexcept { return mPitch; }
|
|
[[nodiscard]] unsigned getBufferSize() const noexcept { return mPitch * mHeight * sizeof(Pixel); }
|
|
|
|
void setPixel(unsigned posX, unsigned posY, Pixel pixel) noexcept;
|
|
};
|
|
|
|
class OwningFramebuffer : public Framebuffer
|
|
{
|
|
private:
|
|
std::vector<Pixel> mPixels;
|
|
public:
|
|
OwningFramebuffer() = default;
|
|
OwningFramebuffer(const OwningFramebuffer&) noexcept = default;
|
|
OwningFramebuffer(OwningFramebuffer&&) noexcept = default;
|
|
OwningFramebuffer(unsigned width, unsigned height, unsigned pitch) noexcept;
|
|
|
|
OwningFramebuffer& operator=(const OwningFramebuffer&) noexcept = default;
|
|
OwningFramebuffer& operator=(OwningFramebuffer&&) noexcept = default;
|
|
|
|
static OwningFramebuffer makeFrom(const Framebuffer& other) noexcept
|
|
{
|
|
return OwningFramebuffer(other.getWidth(), other.getHeight(), other.getPitch());
|
|
}
|
|
};
|
|
|
|
void initializeDefaultFramebuffer(const Framebuffer& framebuffer) noexcept;
|
|
void setPixelDirect(unsigned posX, unsigned posY, Pixel pixel) noexcept;
|
|
void setPixel(unsigned posX, unsigned posY, Pixel pixel) noexcept;
|
|
void flushPixels() noexcept;
|
|
}
|
|
|
|
#endif // !defined(BAD_APPLE_OS_FRAMEBUFFER_HPP_INCLUDED)
|