Emu?
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

77 lines
2.3 KiB

/* PlipVideo.h
*
* Provides a toolkit-agnostic video interface.
*/
#pragma once
#include <string>
namespace Plip {
enum class PlipVideoFormat {
Unknown,
RGB888,
BGR888,
XRGB8888,
XBGR8888,
ARGB8888,
ABGR8888,
RGBX8888,
BGRX8888,
RGBA8888,
BGRA8888
};
struct PlipVideoFormatInfo {
uint8_t pixelWidth;
void (*plot)(void* data, int offset, uint8_t r, uint8_t g, uint8_t b);
};
class PlipVideo {
public:
virtual bool BeginDraw() = 0;
virtual void Draw(void *data) = 0;
virtual void Clear() = 0;
virtual bool EndDraw() = 0;
virtual PlipVideoFormat GetFormat() = 0;
virtual int GetHeight() = 0;
virtual int GetWidth() = 0;
virtual void Resize(int width, int height) = 0;
virtual void SetTitle(std::string title) = 0;
virtual void Render() = 0;
static PlipVideoFormatInfo GetFormatInfo(PlipVideoFormat format);
// Pixel format functions.
static void PlotRgb888(void *data, int offset, uint8_t r, uint8_t g, uint8_t b) {
((uint8_t*)data)[offset * 3] = r;
((uint8_t*)data)[offset * 3 + 1] = g;
((uint8_t*)data)[offset * 3 + 2] = b;
}
static void PlotBgr888(void *data, int offset, uint8_t r, uint8_t g, uint8_t b) {
((uint8_t*)data)[offset * 3] = b;
((uint8_t*)data)[offset * 3 + 1] = g;
((uint8_t*)data)[offset * 3 + 2] = r;
}
static void PlotArgb8888(void *data, int offset, uint8_t r, uint8_t g, uint8_t b) {
((uint32_t*)data)[offset] = (0xFF << 24) + (r << 16) + (g << 8) + b;
}
static void PlotAbgr8888(void *data, int offset, uint8_t r, uint8_t g, uint8_t b) {
((uint32_t*)data)[offset] = (0xFF << 24) + (b << 16) + (g << 8) + r;
}
static void PlotRgba8888(void *data, int offset, uint8_t r, uint8_t g, uint8_t b) {
((uint32_t*)data)[offset] = (r << 24) + (g << 16) + (b << 8) + 0xFF;
}
static void PlotBgra8888(void *data, int offset, uint8_t r, uint8_t g, uint8_t b) {
((uint32_t*)data)[offset] = (b << 24) + (g << 16) + (r << 8) + 0xFF;
}
protected:
PlipVideo() = default;
};
}