1*f0687c8aSRaman Tenneti #pragma once 2*f0687c8aSRaman Tenneti 3*f0687c8aSRaman Tenneti #include <kms++/kms++.h> 4*f0687c8aSRaman Tenneti 5*f0687c8aSRaman Tenneti namespace kms 6*f0687c8aSRaman Tenneti { 7*f0687c8aSRaman Tenneti class ExtCPUFramebuffer : public IFramebuffer 8*f0687c8aSRaman Tenneti { 9*f0687c8aSRaman Tenneti public: 10*f0687c8aSRaman Tenneti ExtCPUFramebuffer(uint32_t width, uint32_t height, PixelFormat format, 11*f0687c8aSRaman Tenneti uint8_t* buffer, uint32_t size, uint32_t pitch, uint32_t offset); 12*f0687c8aSRaman Tenneti ExtCPUFramebuffer(uint32_t width, uint32_t height, PixelFormat format, 13*f0687c8aSRaman Tenneti uint8_t* buffers[4], uint32_t sizes[4], uint32_t pitches[4], uint32_t offsets[4]); 14*f0687c8aSRaman Tenneti virtual ~ExtCPUFramebuffer(); 15*f0687c8aSRaman Tenneti width()16*f0687c8aSRaman Tenneti uint32_t width() const { return m_width; } height()17*f0687c8aSRaman Tenneti uint32_t height() const { return m_height; } 18*f0687c8aSRaman Tenneti format()19*f0687c8aSRaman Tenneti PixelFormat format() const { return m_format; } num_planes()20*f0687c8aSRaman Tenneti unsigned num_planes() const { return m_num_planes; } 21*f0687c8aSRaman Tenneti stride(unsigned plane)22*f0687c8aSRaman Tenneti uint32_t stride(unsigned plane) const { return m_planes[plane].stride; } size(unsigned plane)23*f0687c8aSRaman Tenneti uint32_t size(unsigned plane) const { return m_planes[plane].size; } offset(unsigned plane)24*f0687c8aSRaman Tenneti uint32_t offset(unsigned plane) const { return m_planes[plane].offset; } map(unsigned plane)25*f0687c8aSRaman Tenneti uint8_t* map(unsigned plane) { return m_planes[plane].map; } 26*f0687c8aSRaman Tenneti 27*f0687c8aSRaman Tenneti private: 28*f0687c8aSRaman Tenneti struct FramebufferPlane { 29*f0687c8aSRaman Tenneti uint32_t size; 30*f0687c8aSRaman Tenneti uint32_t stride; 31*f0687c8aSRaman Tenneti uint32_t offset; 32*f0687c8aSRaman Tenneti uint8_t* map; 33*f0687c8aSRaman Tenneti }; 34*f0687c8aSRaman Tenneti 35*f0687c8aSRaman Tenneti uint32_t m_width; 36*f0687c8aSRaman Tenneti uint32_t m_height; 37*f0687c8aSRaman Tenneti PixelFormat m_format; 38*f0687c8aSRaman Tenneti 39*f0687c8aSRaman Tenneti unsigned m_num_planes; 40*f0687c8aSRaman Tenneti struct FramebufferPlane m_planes[4]; 41*f0687c8aSRaman Tenneti }; 42*f0687c8aSRaman Tenneti } // namespace kms 43