1 // Copyright (c) 2011 Hewlett-Packard Development Company, L.P. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef WEBVFX_RENDER_STRATEGY_H_
6 #define WEBVFX_RENDER_STRATEGY_H_
7 
8 #include <QSize>
9 
10 class QGLFramebufferObject;
11 class QGLWidget;
12 
13 namespace WebVfx
14 {
15 
16 class Content;
17 class Image;
18 
19 class RenderStrategy
20 {
21 public:
RenderStrategy()22     RenderStrategy() {}
~RenderStrategy()23     virtual ~RenderStrategy() {}
24     virtual bool render(Content* content, Image* renderImage) = 0;
25 };
26 
27 class GLWidgetRenderStrategy : public RenderStrategy
28 {
29 public:
30     // Renderer does not take ownership of QGLWidget
31     GLWidgetRenderStrategy(QGLWidget* glWidget);
32     ~GLWidgetRenderStrategy();
33 
34     bool render(Content* content, Image* renderImage);
35 
36 private:
37     void createFBO(const QSize& size);
38 
39     QGLWidget* glWidget;
40     QGLFramebufferObject* fbo;
41 };
42 
43 class FBORenderStrategy : public RenderStrategy
44 {
45 public:
46     // Renderer does not take ownership of QGLWidget
47     FBORenderStrategy(QGLWidget* glWidget);
48     ~FBORenderStrategy();
49 
50     bool render(Content* content, Image* renderImage);
51 
52 private:
53     void createFBOs(const QSize& size);
54 
55     QGLWidget* glWidget;
56     QGLFramebufferObject* multisampleFBO;
57     QGLFramebufferObject* resolveFBO;
58 };
59 
60 class ImageRenderStrategy : public RenderStrategy
61 {
62 public:
ImageRenderStrategy()63     ImageRenderStrategy() {}
64 
65     bool render(Content* content, Image* renderImage);
66 };
67 
68 }
69 
70 #endif
71