VTK
vtkFrameBufferObject.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkFrameBufferObject.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
28 #ifndef vtkFrameBufferObject_h
29 #define vtkFrameBufferObject_h
30 
31 #include "vtkObject.h"
32 #include "vtkRenderingOpenGLModule.h" // For export macro
33 #include "vtkSmartPointer.h" // needed for vtkSmartPointer.
34 #include "vtkWeakPointer.h" // needed for vtkWeakPointer.
35 //BTX
36 #include <vector> // for the lists of logical buffers.
37 //ETX
38 
39 class vtkRenderWindow;
40 class vtkTextureObject;
41 class vtkRenderbuffer;
45 
47 {
48 public:
51  void PrintSelf(ostream& os, vtkIndent indent);
52 
54 
58  void SetContext(vtkRenderWindow *context);
61 
63 
69  bool Start(int width, int height, bool shaderSupportsTextureInt);
70  bool StartNonOrtho(int width, int height, bool shaderSupportsTextureInt);
72 
78  void RenderQuad(int minX, int maxX, int minY, int maxY);
79 
81  void Bind();
82 
85  void UnBind();
86 
88 
89  void SetActiveBuffer(unsigned int index)
90  {
91  this->SetActiveBuffers(1, &index);
92  }
94 
99  void SetActiveBuffers(int numbuffers, unsigned int indices[]);
100 
102 
111  unsigned int index,
113  unsigned int zslice=0);
115 
117  void RemoveColorBuffer(unsigned int index);
119 
121 
122  void SetDepthBuffer(vtkTextureObject *depthTexture);
125 
127 
129  vtkSetMacro(DepthBufferNeeded,bool);
130  vtkGetMacro(DepthBufferNeeded,bool);
132 
134 
139  void SetNumberOfRenderTargets(unsigned int);
140  vtkGetMacro(NumberOfRenderTargets,unsigned int);
142 
147 
152 
154 
155  vtkGetVector2Macro(LastSize,int);
157 
160  static bool IsSupported(vtkRenderWindow *renWin);
161 
164  int CheckFrameBufferStatus(unsigned int mode);
165 
166 //BTX
167 protected:
169 
170  static
173 
174  // gen buffer (occurs when context is set)
175  void CreateFBO();
176 
177  // delete buffer (occurs during destruction or context swicth)
178  void DestroyFBO();
179 
180  // create texture or renderbuffer and attach
181  // if user provided a texture just use that
182  // mode specifies DRAW or READ
183  void CreateDepthBuffer(int width, int height, unsigned int mode);
184 
185  // create textures for each target and attach
186  // if user provided textures use those, if the user
187  // provides any then they need to provide all
188  // mode specifies DRAW or READ
190  int width,
191  int height,
192  unsigned int mode,
193  bool shaderSupportsTextureInt);
194 
195  // detach and delete our reference(s)
198 
199  // glDrawBuffers
201 
204 
206  void DisplayFrameBufferAttachment(unsigned int uattachment);
207 
210 
213 
215  void DisplayBuffer(int value);
216 
219 
221 
224  unsigned int FBOIndex;
226  unsigned int DepthBuffer;
227  unsigned int NumberOfRenderTargets;
228  int LastSize[2];
229  std::vector<unsigned int> UserZSlices;
230  std::vector<vtkSmartPointer<vtkTextureObject> > UserColorBuffers;
231  std::vector<vtkSmartPointer<vtkTextureObject> > ColorBuffers;
232  std::vector<unsigned int> ActiveBuffers;
235 
236 private:
237  vtkFrameBufferObject(const vtkFrameBufferObject&); // Not implemented.
238  void operator=(const vtkFrameBufferObject&); // Not implemented.
239 //ETX
240 };
241 
242 #endif
vtkFrameBufferObject
internal class which encapsulates OpenGL frame buffer object. Not to be used directly.
Definition: vtkFrameBufferObject.h:47
vtkFrameBufferObject::SetActiveBuffers
void SetActiveBuffers(int numbuffers, unsigned int indices[])
vtkFrameBufferObject::ActiveBuffers
std::vector< unsigned int > ActiveBuffers
Definition: vtkFrameBufferObject.h:232
vtkFrameBufferObject::ColorBuffersDirty
bool ColorBuffersDirty
Definition: vtkFrameBufferObject.h:223
vtkFrameBufferObject::DepthBuffer
unsigned int DepthBuffer
Definition: vtkFrameBufferObject.h:226
vtkFrameBufferObject::DestroyColorBuffers
void DestroyColorBuffers()
vtkGetVector2Macro
#define vtkGetVector2Macro(name, type)
Definition: vtkSetGet.h:270
vtkFrameBufferObject::DisplayBuffer
void DisplayBuffer(int value)
vtkFrameBufferObject::IsSupported
static bool IsSupported(vtkRenderWindow *renWin)
vtkFrameBufferObject::CreateDepthBuffer
void CreateDepthBuffer(int width, int height, unsigned int mode)
vtkFrameBufferObject::CheckFrameBufferStatus
int CheckFrameBufferStatus(unsigned int mode)
vtkFrameBufferObject::SetActiveBuffer
void SetActiveBuffer(unsigned int index)
Definition: vtkFrameBufferObject.h:89
vtkFrameBufferObject::CreateFBO
void CreateFBO()
vtkRenderingOpenGLModule.h
vtkTypeMacro
#define vtkTypeMacro(thisClass, superclass)
Definition: vtkSetGet.h:642
vtkSmartPointer< vtkTextureObject >
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:62
vtkFrameBufferObject::DisplayReadBuffer
void DisplayReadBuffer()
vtkFrameBufferObject::UnBind
void UnBind()
vtkFrameBufferObject::RenderQuad
void RenderQuad(int minX, int maxX, int minY, int maxY)
vtkFrameBufferObject::RemoveColorBuffer
void RemoveColorBuffer(unsigned int index)
vtkFrameBufferObject::FBOIndex
unsigned int FBOIndex
Definition: vtkFrameBufferObject.h:224
vtkFrameBufferObject::SetContext
void SetContext(vtkRenderWindow *context)
vtkFrameBufferObject::ColorBuffers
std::vector< vtkSmartPointer< vtkTextureObject > > ColorBuffers
Definition: vtkFrameBufferObject.h:231
vtkFrameBufferObject::DestroyFBO
void DestroyFBO()
vtkFrameBufferObject::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent)
vtkFrameBufferObject::PreviousFBOIndex
int PreviousFBOIndex
Definition: vtkFrameBufferObject.h:225
vtkFrameBufferObject::LoadRequiredExtensions
static bool LoadRequiredExtensions(vtkRenderWindow *renWin)
vtkFrameBufferObject::StartNonOrtho
bool StartNonOrtho(int width, int height, bool shaderSupportsTextureInt)
vtkFrameBufferObject::NumberOfRenderTargets
unsigned int NumberOfRenderTargets
Definition: vtkFrameBufferObject.h:227
vtkOpenGLExtensionManager
Interface class for querying and using OpenGL extensions.
vtkFrameBufferObject::Context
vtkWeakPointer< vtkRenderWindow > Context
Definition: vtkFrameBufferObject.h:220
vtkFrameBufferObject::DisplayFrameBufferAttachment
void DisplayFrameBufferAttachment(unsigned int uattachment)
vtkFrameBufferObject::Bind
void Bind()
vtkgl::value
GLsizei const GLfloat * value
Definition: vtkgl.h:12021
vtkgl::texture
GLenum GLuint texture
Definition: vtkgl.h:12500
vtkFrameBufferObject::Start
bool Start(int width, int height, bool shaderSupportsTextureInt)
vtkFrameBufferObject::UserDepthBuffer
vtkSmartPointer< vtkTextureObject > UserDepthBuffer
Definition: vtkFrameBufferObject.h:233
vtkFrameBufferObject::DepthBufferDirty
bool DepthBufferDirty
Definition: vtkFrameBufferObject.h:234
vtkFrameBufferObject::UserZSlices
std::vector< unsigned int > UserZSlices
Definition: vtkFrameBufferObject.h:229
vtkFrameBufferObject::DisplayFrameBufferAttachments
void DisplayFrameBufferAttachments()
vtkFrameBufferObject::GetContext
vtkRenderWindow * GetContext()
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
vtkTextureObject
abstracts an OpenGL texture object.
Definition: vtkTextureObject.h:40
vtkFrameBufferObject::SetColorBuffer
void SetColorBuffer(unsigned int index, vtkTextureObject *texture, unsigned int zslice=0)
vtkFrameBufferObject::ActivateBuffers
void ActivateBuffers()
vtkFrameBufferObject::DestroyDepthBuffer
void DestroyDepthBuffer()
vtkgl::indices
GLuint GLuint GLsizei GLenum const GLvoid * indices
Definition: vtkgl.h:11315
vtkFrameBufferObject::UserColorBuffers
std::vector< vtkSmartPointer< vtkTextureObject > > UserColorBuffers
Definition: vtkFrameBufferObject.h:230
vtkSmartPointer.h
vtkWeakPointer.h
vtkGetMacro
#define vtkGetMacro(name, type)
Definition: vtkSetGet.h:93
vtkFrameBufferObject::GetMaximumNumberOfRenderTargets
unsigned int GetMaximumNumberOfRenderTargets()
vtkFrameBufferObject::DepthBufferNeeded
bool DepthBufferNeeded
Definition: vtkFrameBufferObject.h:222
vtkFrameBufferObject::GetColorBuffer
vtkTextureObject * GetColorBuffer(unsigned int index)
vtkObject.h
vtkFrameBufferObject::RemoveAllColorBuffers
void RemoveAllColorBuffers()
vtkFrameBufferObject::~vtkFrameBufferObject
~vtkFrameBufferObject()
vtkFrameBufferObject::DisplayDrawBuffers
void DisplayDrawBuffers()
vtkFrameBufferObject::GetMaximumNumberOfActiveTargets
unsigned int GetMaximumNumberOfActiveTargets()
vtkgl::width
GLint GLint GLsizei width
Definition: vtkgl.h:11316
vtkSetMacro
vtkSetMacro(IgnoreDriverBugs, bool)
vtkgl::index
GLuint index
Definition: vtkgl.h:11983
vtkFrameBufferObject::SetNumberOfRenderTargets
void SetNumberOfRenderTargets(unsigned int)
vtkFrameBufferObject::New
static vtkFrameBufferObject * New()
vtkFrameBufferObject::SetDepthBuffer
void SetDepthBuffer(vtkTextureObject *depthTexture)
vtkFrameBufferObject::CreateColorBuffers
void CreateColorBuffers(int width, int height, unsigned int mode, bool shaderSupportsTextureInt)
vtkOpenGLRenderWindow
OpenGL rendering window.
Definition: vtkOpenGLRenderWindow.h:41
vtkRenderWindow
create a window for renderers to draw into
Definition: vtkRenderWindow.h:89
vtkgl::mode
GLenum mode
Definition: vtkgl.h:12325
vtkFrameBufferObject::RemoveDepthBuffer
void RemoveDepthBuffer()
vtkPixelBufferObject
abstracts an OpenGL pixel buffer object.
Definition: vtkPixelBufferObject.h:43
vtkWeakPointer< vtkRenderWindow >
vtkRenderbuffer
Storage for FBO's.
Definition: vtkRenderbuffer.h:32
VTKRENDERINGOPENGL_EXPORT
#define VTKRENDERINGOPENGL_EXPORT
Definition: vtkRenderingOpenGLModule.h:15
vtkgl::height
GLint GLint GLsizei GLsizei height
Definition: vtkgl.h:11316
vtkFrameBufferObject::vtkFrameBufferObject
vtkFrameBufferObject()