blob: 26ae7ca338c3c1b4c840095dcd9b54239a1e0c2a [file] [log] [blame]
Pierre Ossman403ac272017-01-02 17:00:41 +01001/* Copyright 2011-2016 Pierre Ossman for Cendio AB
Pierre Ossman132b3d02011-06-13 11:19:32 +00002 *
3 * This is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This software is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this software; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
16 * USA.
17 */
18
19#ifndef __PLATFORMPIXELBUFFER_H__
20#define __PLATFORMPIXELBUFFER_H__
21
Pierre Ossman403ac272017-01-02 17:00:41 +010022#if !defined(WIN32) && !defined(__APPLE__)
23#include <X11/extensions/XShm.h>
24#endif
25
26#include <list>
27
Pierre Ossman0b5a06b2015-11-13 14:09:27 +010028#include <os/Mutex.h>
29
Pierre Ossman132b3d02011-06-13 11:19:32 +000030#include <rfb/PixelBuffer.h>
Pierre Ossman0c9bd4b2014-07-09 16:44:11 +020031#include <rfb/Region.h>
Pierre Ossman132b3d02011-06-13 11:19:32 +000032
Pierre Ossman403ac272017-01-02 17:00:41 +010033#include "Surface.h"
34
35class PlatformPixelBuffer: public rfb::FullFramePixelBuffer, public Surface {
Pierre Ossman132b3d02011-06-13 11:19:32 +000036public:
Pierre Ossman403ac272017-01-02 17:00:41 +010037 PlatformPixelBuffer(int width, int height);
38 ~PlatformPixelBuffer();
Pierre Ossman132b3d02011-06-13 11:19:32 +000039
Pierre Ossman0c9bd4b2014-07-09 16:44:11 +020040 virtual void commitBufferRW(const rfb::Rect& r);
Pierre Ossmanac13abe2014-02-07 14:46:26 +010041
Pierre Ossman0c9bd4b2014-07-09 16:44:11 +020042 rfb::Rect getDamage(void);
43
Pierre Ossman403ac272017-01-02 17:00:41 +010044 using rfb::FullFramePixelBuffer::width;
45 using rfb::FullFramePixelBuffer::height;
46
Pierre Ossman0c9bd4b2014-07-09 16:44:11 +020047protected:
Pierre Ossman0b5a06b2015-11-13 14:09:27 +010048 os::Mutex mutex;
Pierre Ossman0c9bd4b2014-07-09 16:44:11 +020049 rfb::Region damage;
Pierre Ossman403ac272017-01-02 17:00:41 +010050
51#if !defined(WIN32) && !defined(__APPLE__)
52protected:
53 bool setupShm();
54
55protected:
56 XShmSegmentInfo *shminfo;
57 XImage *xim;
58#endif
Pierre Ossman132b3d02011-06-13 11:19:32 +000059};
60
Pierre Ossman132b3d02011-06-13 11:19:32 +000061#endif