blob: 8b8e730ea4c4f53fef1d63e3f27d146fb8d12a07 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#include "WLBuffer.hpp"
#include "Buffer.hpp"
#include "../core/Compositor.hpp"
#include "../DRMSyncobj.hpp"
#include "../../helpers/sync/SyncTimeline.hpp"
#include <xf86drm.h>
CWLBufferResource::CWLBufferResource(WP<CWlBuffer> resource_) : m_resource(resource_.lock()) {
if UNLIKELY (!good())
return;
m_resource->setOnDestroy([this](CWlBuffer* r) {
if (m_buffer.expired())
return;
m_buffer->events.destroy.emit();
});
m_resource->setDestroy([this](CWlBuffer* r) {
if (m_buffer.expired())
return;
m_buffer->events.destroy.emit();
});
m_resource->setData(this);
}
bool CWLBufferResource::good() {
return m_resource->resource();
}
void CWLBufferResource::sendRelease() {
m_resource->sendRelease();
}
wl_resource* CWLBufferResource::getResource() {
return m_resource->resource();
}
SP<CWLBufferResource> CWLBufferResource::fromResource(wl_resource* res) {
auto data = sc<CWLBufferResource*>(sc<CWlBuffer*>(wl_resource_get_user_data(res))->data());
return data ? data->m_self.lock() : nullptr;
}
SP<CWLBufferResource> CWLBufferResource::create(WP<CWlBuffer> resource) {
auto p = SP<CWLBufferResource>(new CWLBufferResource(resource));
p->m_self = p;
return p;
}
|