summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libkms++/extframebuffer.cpp12
-rw-r--r--libkms++/extframebuffer.h3
2 files changed, 15 insertions, 0 deletions
diff --git a/libkms++/extframebuffer.cpp b/libkms++/extframebuffer.cpp
index 8b0af9f..4c90a4e 100644
--- a/libkms++/extframebuffer.cpp
+++ b/libkms++/extframebuffer.cpp
@@ -23,6 +23,18 @@ ExtFramebuffer::ExtFramebuffer(Card& card, uint32_t width, uint32_t height, uint
set_id(id);
}
+ExtFramebuffer::ExtFramebuffer(Card& card, uint32_t width, uint32_t height, PixelFormat format,
+ uint32_t handles[], uint32_t pitches[], uint32_t offsets[])
+ : Framebuffer(card, width, height)
+{
+ uint32_t id;
+ int r = drmModeAddFB2(card.fd(), width, height, (uint32_t)format, handles, pitches, offsets, &id, 0);
+ if (r)
+ throw std::invalid_argument(string("Failed to create ExtFramebuffer: ") + strerror(r));
+
+ set_id(id);
+}
+
ExtFramebuffer::~ExtFramebuffer()
{
drmModeRmFB(card().fd(), id());
diff --git a/libkms++/extframebuffer.h b/libkms++/extframebuffer.h
index cc0863a..82909c5 100644
--- a/libkms++/extframebuffer.h
+++ b/libkms++/extframebuffer.h
@@ -1,6 +1,7 @@
#pragma once
#include "framebuffer.h"
+#include "pixelformats.h"
namespace kms
{
@@ -9,6 +10,8 @@ class ExtFramebuffer : public Framebuffer
{
public:
ExtFramebuffer(Card& card, uint32_t width, uint32_t height, uint32_t depth, uint32_t bpp, uint32_t stride, uint32_t handle);
+ ExtFramebuffer(Card& card, uint32_t width, uint32_t height, PixelFormat format,
+ uint32_t handles[4], uint32_t pitches[4], uint32_t offsets[4]);
virtual ~ExtFramebuffer();
void print_short() const;