VTK
vtkOptiXRendererNode.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkOptiXRendererNode.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 =========================================================================*/
25 #ifndef vtkOptiXRendererNode_h
26 #define vtkOptiXRendererNode_h
27 
28 #include "vtkRenderingOptiXModule.h" // For export macro
29 #include "vtkRendererNode.h"
30 
31 #include <vector> // for ivars
32 
33 class vtkRenderer;
35 class vtkOptiXPtxLoader;
36 
37 struct vtkOptiXRendererNodeInternals;
38 
39 namespace vtkopt
40 {
41  struct Light;
42 }
43 
44 namespace optix
45 {
46  class ContextObj;
47  class GeometryGroupObj;
48 }
49 
50 class VTKRENDERINGOPTIX_EXPORT vtkOptiXRendererNode : public vtkRendererNode
51 {
52 public:
55  void PrintSelf(ostream& os, vtkIndent indent);
56 
60  virtual void Build(bool prepass);
61 
65  virtual void Render(bool prepass);
66 
70  virtual void WriteLayer(unsigned char *buffer, float *zbuffer,
71  int buffx, int buffy, int layer);
72 
73  //state beyond rendering core...
74 
81 
83 
86  static void SetSamplesPerPixel(int, vtkRenderer *renderer);
87  static int GetSamplesPerPixel(vtkRenderer *renderer);
89 
91 
97  static void SetMaxFrames(int, vtkRenderer *renderer);
98  static int GetMaxFrames(vtkRenderer *renderer);
100 
102 
108  static void SetAmbientSamples(int, vtkRenderer *renderer);
109  static int GetAmbientSamples(vtkRenderer *renderer);
111 
115  virtual unsigned char *GetBuffer() { return this->Buffer; }
116 
120  virtual float *GetZBuffer() { return this->ZBuffer; }
121 
125  virtual optix::ContextObj* GetOptiXContext();
126 
130  virtual optix::GeometryGroupObj* GetOptiXGeometryGroup();
131 
136 
140  virtual void AddLight(const vtkopt::Light& light);
141 
146  virtual void Traverse(int operation);
147 
151  virtual void Synchronize(bool prepass);
152 
153 protected:
156 
157  //internal structures
158  unsigned char *Buffer;
159  float *ZBuffer;
160 
161  vtkOptiXRendererNodeInternals* Internals;
163 
164  std::vector<vtkopt::Light> Lights;
165 
167 
168 private:
170  void operator=(const vtkOptiXRendererNode&) = delete;
171 
172  int ImageX, ImageY;
173 
174  mutable float Cached_bgColor[3];
175  mutable int Cached_useShadows;
176  mutable int Cached_samplesPerPixel;
177  mutable bool ContextValidated;
178  mutable int Cached_AOSamples;
179 };
180 
181 #endif
vtkOptiXRendererNode::SAMPLES_PER_PIXEL
static vtkInformationIntegerKey * SAMPLES_PER_PIXEL()
When present on renderer, controls the number of primary rays shot per pixel.
vtkOptiXRendererNode::GetOptiXContext
virtual optix::ContextObj * GetOptiXContext()
Get the OptiX Context.
vtkOptiXRendererNode::OptiXPtxLoader
vtkOptiXPtxLoader * OptiXPtxLoader
Definition: vtkOptiXRendererNode.h:162
vtkOptiXRendererNode::vtkOptiXRendererNode
vtkOptiXRendererNode()
vtkOptiXRendererNode::GetOptiXPtxLoader
vtkOptiXPtxLoader * GetOptiXPtxLoader()
Get the OptiX Ptx loader.
vtkOptiXRendererNode::SetMaxFrames
static void SetMaxFrames(int, vtkRenderer *renderer)
vtkopt
Definition: Light.h:35
vtkOptiXRendererNode::Internals
vtkOptiXRendererNodeInternals * Internals
Definition: vtkOptiXRendererNode.h:161
vtkOptiXRendererNode::WriteLayer
virtual void WriteLayer(unsigned char *buffer, float *zbuffer, int buffx, int buffy, int layer)
Put my results into the correct place in the provided pixel buffer.
vtkOptiXRendererNode::ZBuffer
float * ZBuffer
Definition: vtkOptiXRendererNode.h:159
vtkOptiXRendererNode::GetSamplesPerPixel
static int GetSamplesPerPixel(vtkRenderer *renderer)
vtkopt::Light
Definition: Light.h:37
vtkOptiXRendererNode::GetBuffer
virtual unsigned char * GetBuffer()
Get the last rendered ColorBuffer.
Definition: vtkOptiXRendererNode.h:115
vtkOptiXRendererNode::SetAmbientSamples
static void SetAmbientSamples(int, vtkRenderer *renderer)
vtkOptiXRendererNode::Buffer
unsigned char * Buffer
Definition: vtkOptiXRendererNode.h:158
vtkOptiXRendererNode::Build
virtual void Build(bool prepass)
Builds myself.
vtkOptiXPtxLoader
for loading of OptiX .ptx files
Definition: vtkOptiXPtxLoader.h:39
vtkOptiXRendererNode::Render
virtual void Render(bool prepass)
Traverse graph in OptiX's preferred order and render.
vtkOptiXRendererNode::GetOptiXGeometryGroup
virtual optix::GeometryGroupObj * GetOptiXGeometryGroup()
Get the top level GeometryGroup.
vtkOptiXRendererNode::SetSamplesPerPixel
static void SetSamplesPerPixel(int, vtkRenderer *renderer)
Convenience method to set/get SAMPLES_PER_PIXEL on a vtkRenderer.
vtkOptiXRendererNode::New
static vtkOptiXRendererNode * New()
vtkOptiXRendererNode::Lights
std::vector< vtkopt::Light > Lights
Definition: vtkOptiXRendererNode.h:164
vtkInformationIntegerKey
Key for integer values in vtkInformation.
Definition: vtkInformationIntegerKey.h:35
optix
Definition: vtkOptiXPtxLoader.h:31
vtkOptiXRendererNode::NumActors
int NumActors
Definition: vtkOptiXRendererNode.h:166
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:40
vtkOptiXRendererNode::GetZBuffer
virtual float * GetZBuffer()
Get the last rendered ZBuffer.
Definition: vtkOptiXRendererNode.h:120
vtkOptiXRendererNode::AddLight
virtual void AddLight(const vtkopt::Light &light)
Add a Light.
vtkOptiXRendererNode::~vtkOptiXRendererNode
~vtkOptiXRendererNode()
vtkOptiXRendererNode::AMBIENT_SAMPLES
static vtkInformationIntegerKey * AMBIENT_SAMPLES()
When present on renderer, controls the number of ambient occlusion samples shot per hit.
vtkOptiXRendererNode::MAX_FRAMES
static vtkInformationIntegerKey * MAX_FRAMES()
When present on renderer, controls the number of OptiX render calls for each refresh.
vtkRendererNode.h
vtkOptiXRendererNode::Synchronize
virtual void Synchronize(bool prepass)
Synchronizes render output by recreating depth/color buffer.
vtkOptiXRendererNode::GetAmbientSamples
static int GetAmbientSamples(vtkRenderer *renderer)
vtkOptiXRendererNode
links vtkRenderers to OptiX
Definition: vtkOptiXRendererNode.h:51
vtkRenderer
abstract specification for renderers
Definition: vtkRenderer.h:64
vtkOptiXRendererNode::Traverse
virtual void Traverse(int operation)
If you want to traverse your children in a specific order or way override this method.
vtkOptiXRendererNode::GetMaxFrames
static int GetMaxFrames(vtkRenderer *renderer)
vtkRendererNode
vtkViewNode specialized for vtkRenderers
Definition: vtkRendererNode.h:35
vtkOptiXRendererNode::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.