You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

165 lines
5.0 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkRenderState.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkRenderState
* @brief Context in which a vtkRenderPass will render.
*
* vtkRenderState is a ligthweight effective class which gather information
* used by a vtkRenderPass to perform its execution.
* @attention
* Get methods are const to enforce that a renderpass cannot modify the
* RenderPass object. It works in conjunction with vtkRenderPass::Render where
* the argument vtkRenderState is const.
* @sa
* vtkRenderPass vtkRenderer vtkFrameBufferObject vtkProp
*/
#ifndef vtkRenderState_h
#define vtkRenderState_h
#include "vtkObject.h"
#include "vtkRenderingCoreModule.h" // For export macro
class vtkRenderer;
class vtkProp;
class vtkFrameBufferObjectBase;
class vtkInformation;
class VTKRENDERINGCORE_EXPORT vtkRenderState
{
public:
/**
* Constructor. All values are initialized to 0 or NULL.
* \pre renderer_exists: renderer!=0
* \post renderer_is_set: GetRenderer()==renderer.
* \post valid_state: IsValid()
*/
vtkRenderState(vtkRenderer* renderer);
/**
* Destructor. As a vtkRenderState does not own any of its variables,
* the destructor does nothing.
*/
~vtkRenderState();
/**
* Tells if the RenderState is a valid one (Renderer is not null).
*/
bool IsValid() const;
/**
* Return the Renderer. This is the renderer in which the render pass is
* performed. It gives access to the RenderWindow, to the props.
* \post result_exists: result!=0
*/
vtkRenderer* GetRenderer() const;
/**
* Return the FrameBuffer. This is the framebuffer in use. NULL means it is
* the FrameBuffer provided by the RenderWindow (it can actually be an FBO
* in case the RenderWindow is in off screen mode).
*/
vtkFrameBufferObjectBase* GetFrameBuffer() const;
/**
* Set the FrameBuffer. See GetFrameBuffer().
* \post is_set: GetFrameBuffer()==fbo
*/
void SetFrameBuffer(vtkFrameBufferObjectBase* fbo);
/**
* Get the window size of the state.
*/
void GetWindowSize(int size[2]) const;
/**
* Return the array of filtered props. See SetPropArrayAndCount().
*/
vtkProp** GetPropArray() const;
/**
* Return the size of the array of filtered props.
* See SetPropArrayAndCount().
* \post positive_result: result>=0
*/
int GetPropArrayCount() const;
/**
* Set the array of filtered props and its size.
* It is a subset of props to render. A renderpass might ignore this
* filtered list and access to all the props of the vtkRenderer object
* directly. For example, a render pass may filter props that are visible and
* not culled by the frustum, but a sub render pass building a shadow map may
* need all the visible props.
* \pre positive_size: propArrayCount>=0
* \pre valid_null_array: propArray!=0 || propArrayCount==0
* \post is_set: GetPropArray()==propArray && GetPropArrayCount()==propArrayCount
*/
void SetPropArrayAndCount(vtkProp** propArray, int propArrayCount);
/**
* Return the required property keys for the props. It tells that the
* current render pass it supposed to render only props that have all the
* RequiredKeys in their property keys.
*/
vtkInformation* GetRequiredKeys() const;
/**
* Set the required property keys for the props. See GetRequiredKeys().
* \post is_set: GetRequiredKeys()==keys
*/
void SetRequiredKeys(vtkInformation* keys);
protected:
/**
* The renderer in which the render pass is performed.
* It gives access to the RenderWindow, to the props.
*/
vtkRenderer* Renderer;
/**
* The framebuffer in use. NULL means the FrameBuffer provided by
* the RenderWindow (it can actually be an FBO in case the RenderWindow
* is in off screen mode).
*/
vtkFrameBufferObjectBase* FrameBuffer;
//@{
/**
* Subset of props to render. A renderpass might ignore this filtered list
* and access to all the props of the vtkRenderer object directly.
* For example, a render pass may filter props that are visible and
* not culled by the frustum, but a sub render pass building a shadow map may
* need all the visible props.
*/
vtkProp** PropArray;
int PropArrayCount;
//@}
/**
* It tells that the current render pass it supposed to render only props
* that have all the RequiredKeys in their property keys.
*/
vtkInformation* RequiredKeys;
private:
vtkRenderState(); // no default constructor.
vtkRenderState(const vtkRenderState&) = delete;
void operator=(const vtkRenderState&) = delete;
};
#endif
// VTK-HeaderTest-Exclude: vtkRenderState.h