]> git.sesse.net Git - casparcg/blob - core/frame/gpu_frame.h
641dbee5480007068e49eaf988adc98767082260
[casparcg] / core / frame / gpu_frame.h
1 #pragma once\r
2 \r
3 #include "frame_format.h"\r
4 \r
5 #include <memory>\r
6 \r
7 #include <boost/noncopyable.hpp>\r
8 \r
9 #include <Glee.h>\r
10 \r
11 namespace caspar {\r
12         \r
13 class gpu_frame : boost::noncopyable\r
14 {\r
15 public:\r
16         gpu_frame(size_t width, size_t height);\r
17         virtual ~gpu_frame(){}\r
18         virtual void write_lock();\r
19         virtual bool write_unlock();\r
20         virtual void read_lock(GLenum mode);\r
21         virtual bool read_unlock();\r
22         virtual void draw();\r
23                 \r
24         virtual unsigned char* data();\r
25         virtual size_t size() const;\r
26         virtual size_t width() const;\r
27         virtual size_t height() const;\r
28         \r
29         virtual void reset();\r
30                         \r
31         virtual const std::vector<short>& audio_data() const;   \r
32         virtual std::vector<short>& audio_data();\r
33 \r
34         virtual double alpha() const;\r
35         virtual void alpha(float value);\r
36 \r
37         virtual double x() const;\r
38         virtual double y() const;\r
39         virtual void translate(double x, double y);\r
40 \r
41         virtual void mode(video_mode mode);\r
42         virtual video_mode mode() const;\r
43 \r
44         static std::shared_ptr<gpu_frame> null()\r
45         {\r
46                 static auto my_null_frame = std::make_shared<gpu_frame>(0,0);\r
47                 return my_null_frame;\r
48         }\r
49                 \r
50 private:\r
51         struct implementation;\r
52         std::shared_ptr<implementation> impl_;\r
53 };\r
54 typedef std::shared_ptr<gpu_frame> gpu_frame_ptr;\r
55         \r
56 }