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