12#include <compositor.h>
14#include <drm_fourcc.h>
28 Q_ASSERT(m_region.isValid());
29 Q_ASSERT(m_scale > 0);
34 return m_region.size() * m_scale;
44 return DRM_FORMAT_ARGB8888;
51 if (m_renderedTexture) {
53 const auto outputGeometry = output->
geometry();
54 if (!outputTexture || !m_region.intersects(output->
geometry())) {
61 QMatrix4x4 projectionMatrix;
62 projectionMatrix.scale(1, -1);
63 projectionMatrix.ortho(m_region);
64 projectionMatrix.translate(outputGeometry.left(), outputGeometry.top());
69 outputTexture->render(outputGeometry.size());
79void RegionScreenCastSource::ensureTexture()
81 if (!m_renderedTexture) {
83 if (!m_renderedTexture) {
87 m_renderedTexture->setFilter(GL_LINEAR);
88 m_renderedTexture->setWrapMode(GL_CLAMP_TO_EDGE);
90 m_target = std::make_unique<GLFramebuffer>(m_renderedTexture.get());
92 for (
auto output : allOutputs) {
93 if (output->geometry().intersects(m_region)) {
107 QMatrix4x4 projectionMatrix;
108 projectionMatrix.scale(1, -1);
109 projectionMatrix.ortho(QRect(QPoint(), target->
size()));
112 m_renderedTexture->render(target->
size());
121 grabTexture(m_renderedTexture.get(), spa,
format);
128 for (
auto output : allOutputs) {
129 if (output->geometry().intersects(m_region)) {
130 ret = std::max<uint>(ret, output->refreshRate());
137#include "moc_regionscreencastsource.cpp"
WorkspaceScene * scene() const
static Compositor * self()
OpenGL framebuffer object.
static GLFramebuffer * popFramebuffer()
static void pushFramebuffer(GLFramebuffer *fbo)
@ ModelViewProjectionMatrix
bool setColorspaceUniformsToSRGB(const ColorDescription &src)
bool setUniform(const char *name, float value)
static std::unique_ptr< GLTexture > allocate(GLenum internalFormat, const QSize &size, int levels=1)
virtual RenderLoop * renderLoop() const =0
std::chrono::nanoseconds clock() const override
bool hasAlphaChannel() const override
void render(GLFramebuffer *target) override
QSize textureSize() const override
quint32 drmFormat() const override
RegionScreenCastSource(const QRect ®ion, qreal scale, QObject *parent=nullptr)
uint refreshRate() const override
void updateOutput(Output *output)
std::chrono::nanoseconds lastPresentationTimestamp() const
static ShaderManager * instance()
GLShader * pushShader(ShaderTraits traits)
QList< Output * > outputs() const
virtual std::pair< std::shared_ptr< GLTexture >, ColorDescription > textureForOutput(Output *output) const