Olive
renderthread.h
1 #ifndef RENDERTHREAD_H
2 #define RENDERTHREAD_H
3 
4 #include <QThread>
5 #include <QMutex>
6 #include <QWaitCondition>
7 #include <QOffscreenSurface>
8 #include <QOpenGLContext>
9 #include <QOpenGLFramebufferObject>
10 #include <QOpenGLShaderProgram>
11 
12 struct Sequence;
13 class Effect;
14 
15 class RenderThread : public QThread {
16  Q_OBJECT
17 public:
18  RenderThread();
19  ~RenderThread();
20  void run();
21  QMutex mutex;
22  GLuint front_buffer;
23  GLuint front_texture;
24  Effect* gizmos;
25  void paint();
26  void start_render(QOpenGLContext* share, Sequence* s, const QString &save = nullptr, GLvoid *pixels = nullptr, int pixel_linesize = 0, int idivider = 0);
27  bool did_texture_fail();
28  void cancel();
29 
30 public slots:
31  // cleanup functions
32  void delete_ctx();
33 signals:
34  void ready();
35 private:
36  // cleanup functions
37  void delete_texture();
38  void delete_fbo();
39  void delete_shader_program();
40 
41  QWaitCondition waitCond;
42  QOffscreenSurface surface;
43  QOpenGLContext* share_ctx;
44  QOpenGLContext* ctx;
45  QOpenGLShaderProgram* blend_mode_program;
46  QOpenGLShaderProgram* premultiply_program;
47 
48  GLuint back_buffer_1;
49  GLuint back_buffer_2;
50  GLuint back_texture_1;
51  GLuint back_texture_2;
52 
53  Sequence* seq;
54  int divider;
55  int tex_width;
56  int tex_height;
57  bool queued;
58  bool texture_failed;
59  bool running;
60  QString save_fn;
61  GLvoid *pixel_buffer;
62  int pixel_buffer_linesize;
63 };
64 
65 #endif // RENDERTHREAD_H
Definition: sequence.h:13
Definition: effect.h:146
Definition: renderthread.h:15