]> git.sesse.net Git - casparcg/blob - core/frame/gpu_frame.h
2.0.0.2:
[casparcg] / core / frame / gpu_frame.h
1 #pragma once\r
2 \r
3 #include "frame_format.h"\r
4 \r
5 #include "gpu_frame_transform.h"\r
6 \r
7 #include <memory>\r
8 #include <array>\r
9 \r
10 #include <boost/noncopyable.hpp>\r
11 \r
12 #include <Glee.h>\r
13 \r
14 #include <boost/tuple/tuple.hpp>\r
15 \r
16 namespace caspar { namespace core {\r
17         \r
18 typedef std::array<std::pair<size_t, size_t>, 4> planar_frame_dimension;\r
19 \r
20 struct rectangle\r
21 {\r
22         rectangle(double left, double top, double right, double bottom)\r
23                 : left(left), top(top), right(right), bottom(bottom)\r
24         {}\r
25         double left;\r
26         double top;\r
27         double right;\r
28         double bottom;\r
29 };\r
30 \r
31 class gpu_frame : boost::noncopyable\r
32 {\r
33 public:\r
34         virtual ~gpu_frame(){}\r
35                         \r
36         virtual unsigned char* data(size_t index = 0);\r
37         virtual size_t size(size_t index = 0) const;\r
38         virtual size_t width(size_t index = 0) const;\r
39         virtual size_t height(size_t index = 0) const;\r
40                                 \r
41         virtual std::vector<short>& audio_data();\r
42 \r
43         virtual double alpha() const;\r
44         virtual void alpha(double value);\r
45 \r
46         virtual double x() const;\r
47         virtual double y() const;\r
48         virtual void translate(double x, double y);\r
49         virtual void texcoords(const rectangle& texcoords);\r
50 \r
51         virtual void mode(video_mode mode);\r
52         virtual video_mode mode() const;\r
53 \r
54         virtual void set_pixel_format(pixel_format format);\r
55 \r
56         static std::shared_ptr<gpu_frame> null()\r
57         {\r
58                 static auto my_null_frame = std::shared_ptr<gpu_frame>(new gpu_frame(0,0));\r
59                 return my_null_frame;\r
60         }\r
61                 \r
62 protected:\r
63         gpu_frame(size_t width, size_t height);\r
64         gpu_frame(const planar_frame_dimension& data_size);\r
65 \r
66         friend class gpu_frame_processor;\r
67         \r
68         virtual void begin_write();\r
69         virtual void end_write();\r
70         virtual void begin_read();\r
71         virtual void end_read();\r
72         virtual void draw(const gpu_frame_transform_ptr& transform);\r
73         virtual void reset();\r
74 \r
75 private:\r
76         struct implementation;\r
77         std::shared_ptr<implementation> impl_;\r
78 };\r
79 typedef std::shared_ptr<gpu_frame> gpu_frame_ptr;\r
80         \r
81 }}