Fermat
bpt.h
1 /*
2  * Fermat
3  *
4  * Copyright (c) 2016-2019, NVIDIA CORPORATION. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  * * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * * Neither the name of the NVIDIA CORPORATION nor the
14  * names of its contributors may be used to endorse or promote products
15  * derived from this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 #pragma once
30 
31 #include <types.h>
32 #include <buffers.h>
33 #include <ray.h>
34 #include <lights.h>
35 #include <vertex_storage.h>
36 #include <bpt_options.h>
37 #include <bpt_queues.h>
38 #include <tiled_sequence.h>
39 #include <cugar/sampling/lfsr.h>
40 #include <renderer_interface.h>
41 
42 struct RenderingContext;
44 struct BPTContext;
45 
48 
52 
56 {
57  bool single_connection;
58  bool rr;
59 
60  BPTOptions() :
62  single_connection(true),
63  rr(true) {}
64 
65  void parse(const int argc, char** argv)
66  {
67  BPTOptionsBase::parse(argc, argv);
68 
69  for (int i = 0; i < argc; ++i)
70  {
71  if (strcmp(argv[i], "-single-connection") == 0 ||
72  strcmp(argv[i], "-sc") == 0)
73  single_connection = atoi(argv[++i]) > 0;
74  else if (strcmp(argv[i], "-rr") == 0 ||
75  strcmp(argv[i], "-RR") == 0)
76  rr = atoi(argv[++i]) > 0;
77  }
78  }
79 };
80 
84 {
85  BPT();
86 
87  void init(int argc, char** argv, RenderingContext& renderer);
88 
89  void render(const uint32 instance, RenderingContext& renderer);
90 
91  void destroy() { delete this; }
92 
93  static RendererInterface* factory() { return new BPT(); }
94 
95  void regenerate_primary_light_vertices(const uint32 instance, RenderingContext& renderer);
96 
97  BPTOptions m_options;
98 
99  TiledSequence m_sequence;
100 
101  BPTQueuesStorage m_queues;
102 
103  VertexStorage m_light_vertices;
104  uint32 m_n_light_subpaths;
105  uint32 m_n_eye_subpaths;
106 
107  cugar::LFSRGeneratorMatrix m_generator;
108  cugar::LFSRRandomStream m_random;
109 
110  float m_time;
111 };
112 
Definition: bpt_impl.h:55
Definition: bpt.h:55
Definition: bpt.h:83
Definition: lfsr.h:66
Definition: tiled_sequence.h:131
Definition: vertex_storage.h:73
Definition: renderer_interface.h:45
Definition: lfsr.h:109
Definition: renderer.h:52
void destroy()
Definition: bpt.h:91
Definition: bpt_queues.h:51
Definition: renderer_view.h:80
Defines several random samplers.
Definition: bpt_options.h:42