BALL  1.5.0
bufferedRenderer.h
Go to the documentation of this file.
1 // -*- Mode: C++; tab-width: 2; -*-
2 // vi: set ts=2:
3 //
4 
5 #ifndef BALL_VIEW_RENDERING_RENDERERS_BUFFEREDRENDERER_H
6 #define BALL_VIEW_RENDERING_RENDERERS_BUFFEREDRENDERER_H
7 
8 #ifndef BALL_VIEW_RENDERING_RENDERERS_RENDERER_H
10 #endif
11 
12 #ifndef BALL_VIEW_RENDERING_RENDERTARGET_H
14 #endif
15 
16 namespace BALL
17 {
18  namespace VIEW
19  {
30  : public Renderer
31  {
32  public:
33 
35  : offset_(0),
36  stride_(0)
37  { }
38 
44  {
45  if (supports(format))
46  {
47  bufferFormat = format;
48  formatUpdated();
49 
50  return true;
51  }
52 
53  return false;
54  }
55 
62  void renderToBuffer(RenderTarget* renderTarget, const Stage& stage)
63  {
64  prepareBufferedRendering(stage);
65 
66  FrameBufferPtr buffer = renderTarget->getBuffer();
67  assert(buffer);
68 
69  if (buffer->getFormat() != bufferFormat)
70  {
71  throw Exception::InvalidFormat(__FILE__, __LINE__, "Buffer with wrong framebuffer format supplied");
72  }
73 
74  renderToBufferImpl( buffer );
75 
76  renderTarget->releaseBuffer(buffer);
77  }
78 
80  virtual bool supports(const PixelFormat &format) const = 0;
81 
89  virtual Resolution getSupportedResolution(const Resolution &min, const Resolution &max,
90  const PixelFormat &format) const = 0;
91 
94  virtual void setOffset(Size offset) {offset_ = offset;}
95 
98  virtual void setStride(Size stride) {stride_ = stride;}
99 
100  protected:
101 
107  virtual bool supports(const FrameBufferFormat &format) const = 0;
108 
112  virtual void formatUpdated() = 0;
113 
116  virtual void prepareBufferedRendering(const Stage& stage) = 0;
117 
122  virtual void renderToBufferImpl(FrameBufferPtr buffer) = 0;
123 
125  const FrameBufferFormat &getFrameBufferFormat() const { return bufferFormat; }
126 
129 
130  private:
131 
132  FrameBufferFormat bufferFormat;
133  };
134  } //namespace VIEW
135 
136 } //namespace BALL
137 
138 
139 #endif // BALL_VIEW_RENDERING_BUFFEREDRENDERER_H
BALL::VIEW::BufferedRenderer::stride_
Size stride_
Definition: bufferedRenderer.h:128
BALL::VIEW::Resolution
Definition: renderTarget.h:24
BALL::VIEW::BufferedRenderer::offset_
Size offset_
Definition: bufferedRenderer.h:127
BALL::VIEW::RenderTarget::getBuffer
virtual FrameBufferPtr getBuffer()=0
BALL
Definition: constants.h:12
BALL::VIEW::BufferedRenderer::getFrameBufferFormat
const FrameBufferFormat & getFrameBufferFormat() const
Definition: bufferedRenderer.h:125
BALL::VIEW::FrameBufferPtr
boost::shared_ptr< FrameBuffer > FrameBufferPtr
Definition: renderTarget.h:222
BALL::VIEW::BufferedRenderer::setFrameBufferFormat
bool setFrameBufferFormat(const FrameBufferFormat &format)
Definition: bufferedRenderer.h:43
BALL::VIEW::Renderer
Definition: renderer.h:54
BALL::VIEW::BufferedRenderer::renderToBuffer
void renderToBuffer(RenderTarget *renderTarget, const Stage &stage)
Definition: bufferedRenderer.h:62
BALL::VIEW::RenderTarget
Definition: renderTarget.h:226
BALL::VIEW::PixelFormat
Definition: pixelFormat.h:61
BALL_SIZE_TYPE
BALL::Maths::min
T min(const T &a, const T &b)
Definition: MATHS/common.h:102
renderer.h
BALL::Exception::InvalidFormat
Definition: COMMON/exception.h:229
BALL::VIEW::BufferedRenderer::setOffset
virtual void setOffset(Size offset)
Definition: bufferedRenderer.h:94
BALL::VIEW::RenderTarget::releaseBuffer
virtual void releaseBuffer(FrameBufferPtr buffer)=0
BALL::VIEW::BufferedRenderer::setStride
virtual void setStride(Size stride)
Definition: bufferedRenderer.h:98
BALL_VIEW_EXPORT
#define BALL_VIEW_EXPORT
Definition: COMMON/global.h:52
BALL::Maths::max
T max(const T &a, const T &b)
Definition: MATHS/common.h:75
BALL::VIEW::FrameBufferFormat
Definition: renderTarget.h:44
BALL::VIEW::BufferedRenderer::BufferedRenderer
BufferedRenderer()
Definition: bufferedRenderer.h:34
BALL::VIEW::Stage
Definition: stage.h:238
BALL::VIEW::BufferedRenderer
Definition: bufferedRenderer.h:29
renderTarget.h