File: ref_counted_gl_sync.h

package info (click to toggle)
nageru 2.3.2-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 3,120 kB
  • sloc: cpp: 39,131; perl: 94; sh: 18; makefile: 4
file content (33 lines) | stat: -rw-r--r-- 998 bytes parent folder | download | duplicates (4)
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
#ifndef _REF_COUNTED_GL_SYNC_H
#define _REF_COUNTED_GL_SYNC_H 1

// A wrapper around GLsync (OpenGL fences) that is automatically refcounted.
// Useful since we sometimes want to use the same fence two entirely different
// places. (We could set two fences at the same time, but they are not an
// unlimited hardware resource, so it would be a bit wasteful.)

#include <epoxy/gl.h>
#include <memory>
#include <mutex>

typedef std::shared_ptr<__GLsync> RefCountedGLsyncBase;

class RefCountedGLsync : public RefCountedGLsyncBase {
public:
	RefCountedGLsync() {}

	RefCountedGLsync(GLenum condition, GLbitfield flags)
		: RefCountedGLsyncBase(locked_glFenceSync(condition, flags), glDeleteSync) {}

private:
	// These are to work around apitrace bug #446.
	static GLsync locked_glFenceSync(GLenum condition, GLbitfield flags)
	{
		std::lock_guard<std::mutex> lock(fence_lock);
		return glFenceSync(condition, flags);
	}

	static std::mutex fence_lock;
};

#endif  // !defined(_REF_COUNTED_GL_SYNC_H)