blob: f9038cd9c74c84900c0b82a5d0684eaf58ff218f [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__)
Alexander Zakharovd1502132017-02-14 12:12:43 +030023#include <X11/Xlib.h>
24#include <sys/ipc.h>
25#include <sys/shm.h>
Pierre Ossman403ac272017-01-02 17:00:41 +010026#include <X11/extensions/XShm.h>
27#endif
28
29#include <list>
30
Pierre Ossman0b5a06b2015-11-13 14:09:27 +010031#include <os/Mutex.h>
32
Pierre Ossman132b3d02011-06-13 11:19:32 +000033#include <rfb/PixelBuffer.h>
Pierre Ossman0c9bd4b2014-07-09 16:44:11 +020034#include <rfb/Region.h>
Pierre Ossman132b3d02011-06-13 11:19:32 +000035
Pierre Ossman403ac272017-01-02 17:00:41 +010036#include "Surface.h"
37
38class PlatformPixelBuffer: public rfb::FullFramePixelBuffer, public Surface {
Pierre Ossman132b3d02011-06-13 11:19:32 +000039public:
Pierre Ossman403ac272017-01-02 17:00:41 +010040 PlatformPixelBuffer(int width, int height);
41 ~PlatformPixelBuffer();
Pierre Ossman132b3d02011-06-13 11:19:32 +000042
Pierre Ossman0c9bd4b2014-07-09 16:44:11 +020043 virtual void commitBufferRW(const rfb::Rect& r);
Pierre Ossmanac13abe2014-02-07 14:46:26 +010044
Pierre Ossman0c9bd4b2014-07-09 16:44:11 +020045 rfb::Rect getDamage(void);
46
Pierre Ossman403ac272017-01-02 17:00:41 +010047 using rfb::FullFramePixelBuffer::width;
48 using rfb::FullFramePixelBuffer::height;
49
Pierre Ossman0c9bd4b2014-07-09 16:44:11 +020050protected:
Pierre Ossman0b5a06b2015-11-13 14:09:27 +010051 os::Mutex mutex;
Pierre Ossman0c9bd4b2014-07-09 16:44:11 +020052 rfb::Region damage;
Pierre Ossman403ac272017-01-02 17:00:41 +010053
54#if !defined(WIN32) && !defined(__APPLE__)
55protected:
56 bool setupShm();
57
58protected:
59 XShmSegmentInfo *shminfo;
60 XImage *xim;
61#endif
Pierre Ossman132b3d02011-06-13 11:19:32 +000062};
63
Pierre Ossman132b3d02011-06-13 11:19:32 +000064#endif