Fermat
src
renderers
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
;
43
struct
RenderingContextView
;
44
struct
BPTContext
;
45
48
52
55
struct
BPTOptions
:
BPTOptionsBase
56
{
57
bool
single_connection;
58
bool
rr;
59
60
BPTOptions
() :
61
BPTOptionsBase
(),
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
83
struct
BPT
:
RendererInterface
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
BPTContext
Definition:
bpt_impl.h:55
BPTOptions
Definition:
bpt.h:55
BPT
Definition:
bpt.h:83
cugar::LFSRGeneratorMatrix
Definition:
lfsr.h:66
TiledSequence
Definition:
tiled_sequence.h:131
VertexStorage
Definition:
vertex_storage.h:73
RendererInterface
Definition:
renderer_interface.h:45
cugar::LFSRRandomStream
Definition:
lfsr.h:109
RenderingContext
Definition:
renderer.h:52
BPT::destroy
void destroy()
Definition:
bpt.h:91
BPTQueuesStorage
Definition:
bpt_queues.h:51
RenderingContextView
Definition:
renderer_view.h:80
lfsr.h
Defines several random samplers.
BPTOptionsBase
Definition:
bpt_options.h:42
Generated by
1.8.13