Ocean
Loading...
Searching...
No Matches
GIFramebuffer.h
Go to the documentation of this file.
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
7
8#ifndef META_OCEAN_RENDERING_GI_FRAMEBUFFER_H
9#define META_OCEAN_RENDERING_GI_FRAMEBUFFER_H
10
15
16#include "ocean/base/Frame.h"
17
19
22
23namespace Ocean
24{
25
26namespace Rendering
27{
28
29namespace GlobalIllumination
30{
31
32/**
33 * This class implements a base for all Global Illumination framebuffers.
34 * @ingroup renderinggi
35 */
36class OCEAN_RENDERING_GI_EXPORT GIFramebuffer :
37 virtual public GIObject,
38 virtual public Framebuffer
39{
40 public:
41
42 /**
43 * Returns the global face mode of the entire framebuffer.
44 * @see Framebuffer::faceMode().
45 */
46 FaceMode faceMode() const override;
47
48 /**
49 * Returns the global face culling mode of the entire framebuffer.
50 * @see Framebuffer::cullingMode().
51 */
52 CullingMode cullingMode() const override;
53
54 /**
55 * Returns the render technique of the entire framebuffer.
56 * @see Framebuffer::renderTechnique().
57 */
59
60 /**
61 * Returns whether the framebuffer supports hardware antialiasing.
62 * @see Framebuffer::isAntialiasingSupported().
63 */
64 bool isAntialiasingSupported(const unsigned int buffers) const override;
65
66 /**
67 * Returns whether the framebuffer uses hardware antialiasing.
68 * @see Framebuffer::isAntialiasing().
69 */
70 bool isAntialiasing() const override;
71
72 /**
73 * Returns whether the framebuffer supports stereo views.
74 * @see Framebuffer::isQuadbufferedStereoSupported().
75 */
76 bool isQuadbufferedStereoSupported() const override;
77
78 /**
79 * Connects a view with this framebuffer.
80 * @see Framebuffer::setView().
81 */
82 void setView(const ViewRef& view) override;
83
84 /**
85 * Sets the global face mode of the entire framebuffer.
86 * @see Framebuffer::setFaceMode().
87 */
88 void setFaceMode(const FaceMode faceMode) override;
89
90 /**
91 * Sets the global culling mode of the entire framebuffer.
92 * @see Framebuffer::setCullingMode().
93 */
94 void setCullingMode(const CullingMode cullingMode) override;
95
96 /**
97 * Sets the rendering technique of the entire framebuffer.
98 * @see Framebuffer::setRenderTechnique().
99 */
100 void setRenderTechnique(const RenderTechnique technique) override;
101
102 /**
103 * Sets whether this framebuffer will support hardware antialiasing.
104 * @see setSupportAntialiasing().
105 */
106 bool setSupportAntialiasing(const unsigned int buffers) override;
107
108 /**
109 * Sets whether the framebuffer uses hardware antialiasing.
110 * @see Framebuffer::setAntialiasing().
111 */
112 bool setAntialiasing(const bool antialiasing) override;
113
114 /**
115 * Sets whether this framebuffer will support stereo views.
116 * @see Framebuffer::setSupportQuadbufferedStereo().
117 */
118 bool setSupportQuadbufferedStereo(const bool enable) override;
119
120 /**
121 * Makes this frambuffer to the current one.
122 * @see Framebuffer::makeCurrent().
123 */
124 void makeCurrent() override;
125
126 /**
127 * Makes this framebuffer to non current.
128 * @see Framebuffer::makeNoncurrent().
129 */
130 void makeNoncurrent() override;
131
132 /**
133 * Adds a new scene to the framebuffer.
134 * @see Framebuffer::addScene().
135 */
136 void addScene(const SceneRef& scene) override;
137
138 /**
139 * Removes a scene from the framebuffer.
140 * @see Framebuffer::removeScene().
141 */
142 void removeScene(const SceneRef& scene) override;
143
144 /**
145 * Cleares all scenes registered at the framebuffer.
146 * @see Framebuffer::clearScenes().
147 */
148 void clearScenes() override;
149
150 /**
151 * Returns the viewport of this framebuffer.
152 * @see Framebuffer::viewport().
153 */
154 void viewport(unsigned int& left, unsigned int& top, unsigned int& width, unsigned int& height) const override;
155
156 /**
157 * Sets the viewport of this framebuffer.
158 * @see Framebuffer::setViewport().
159 */
160 void setViewport(const unsigned int left, const unsigned int top, const unsigned int width, const unsigned int height) override;
161
162 /**
163 * Renders the next frame into the framebuffer.
164 * @see Framebuffer::render().
165 */
166 void render() override;
167
168 /**
169 * Returns the renderable object intersected by a given ray.
170 * @see Framebuffer::intersection().
171 */
172 bool intersection(const Line3& ray, RenderableRef& renderable, Vector3& position) override;
173
174 protected:
175
176 /**
177 * Creates a new NvidaSceneGraph framebuffer object.
178 * @param preferredGraphicAPI Preferred graphic API to be used for this framebuffer
179 */
180 GIFramebuffer(const Engine::GraphicAPI preferredGraphicAPI = Engine::API_DEFAULT);
181
182 /**
183 * Destructs a Global Illumination framebuffer object.
184 */
185 ~GIFramebuffer() override;
186
187 /**
188 * Renders a subset of the frame into the framebuffer.
189 * @param lightSources The light sources that will be used for rendering
190 * @param group The group of tracing objects actually representing the geometry(s) of the scene
191 * @param threads The number of threads the are currently used concurrently to render the frame, with range [1, infinity)
192 * @param threadIndex The index of the thread currently executed, with range [0, threads)
193 * @param mustBeOne Unused parameter which must be 1
194 */
195 void renderSubset(LightSources* lightSources, const TracingGroup* group, const unsigned int threads, const unsigned int threadIndex, const unsigned int mustBeOne);
196
197 /**
198 * Renders a subset of the frame into the framebuffer.
199 * @param sobelResponse The sobel response of the pixel-accurate render result providing a measure for the number of necessary sub-pixel render iterations, must be valid
200 * @param sobelResponsePaddingElements The number of padding elements at the end of each sobel response row, in elements, with range [0, infinity)
201 * @param lightSources The light sources that will be used for rendering, must be valid
202 * @param group The group of tracing objects actually representing the geometry(s) of the scene
203 * @param threads The number of threads the are currently used concurrently to render the frame, with range [1, infinity)
204 * @param threadIndex The index of the thread currently executed, with range [0, threads)
205 * @param mustBeOne Unused parameter which must be 1
206 */
207 void renderAntialiasedSubset(const uint8_t* sobelResponse, const unsigned int sobelResponsePaddingElements, LightSources* lightSources, const TracingGroup* group, const unsigned int threads, const unsigned int threadIndex, const unsigned int mustBeOne);
208
209 /**
210 * Renders one specific ray for a given group of tracing objects and light sources.
211 * @param viewPosition The position of the view, defined within the same coordinate system as all other objects
212 * @param ray The specific ray for which the color value (the light) will be determined
213 * @param group The group of tracing objects actually representing the geometry(s) of the scene
214 * @param lightSources The light sources that will be used for rendering
215 * @param result The resulting color value (the light) of the specified ray
216 * @return True, if succeeded
217 */
218 bool renderRay(const Vector3& viewPosition, const Line3& ray, const TracingGroup& group, const LightSources& lightSources, RGBAColor& result) const;
219
220 /**
221 * Releases the framebuffer.
222 * @see Framebuffer::release().
223 */
224 void release() override;
225
226 protected:
227
228 /// Preferred graphic API of this framebuffer.
230
231 /// Framebuffer frame.
233
234 /// Antialiasing enabled statement.
236
237 /// Optional framebuffer frame holding the sobel response for antialiasing.
239
240 /// Lighting modes for this framebuffer.
242};
243
244}
245
246}
247
248}
249
250#endif // META_OCEAN_RENDERING_GI_FRAMEBUFFER_H
This class implements Ocean's image class.
Definition Frame.h:1808
This class implements an infinite line in 3D space.
Definition Line3.h:68
This class implements a color defined by red, green, blue and alpha parameters.
Definition RGBAColor.h:41
GraphicAPI
Definition of different graphic APIs.
Definition Engine.h:57
This class is the base class for all rendering framebuffers.
Definition rendering/Framebuffer.h:48
RenderTechnique
Definition of different render techniques.
Definition rendering/Framebuffer.h:68
This class implements a base for all Global Illumination framebuffers.
Definition GIFramebuffer.h:39
void setRenderTechnique(const RenderTechnique technique) override
Sets the rendering technique of the entire framebuffer.
bool intersection(const Line3 &ray, RenderableRef &renderable, Vector3 &position) override
Returns the renderable object intersected by a given ray.
void viewport(unsigned int &left, unsigned int &top, unsigned int &width, unsigned int &height) const override
Returns the viewport of this framebuffer.
void setView(const ViewRef &view) override
Connects a view with this framebuffer.
void setFaceMode(const FaceMode faceMode) override
Sets the global face mode of the entire framebuffer.
Frame sobelFrame_
Optional framebuffer frame holding the sobel response for antialiasing.
Definition GIFramebuffer.h:238
void release() override
Releases the framebuffer.
bool setSupportQuadbufferedStereo(const bool enable) override
Sets whether this framebuffer will support stereo views.
CullingMode cullingMode() const override
Returns the global face culling mode of the entire framebuffer.
void render() override
Renders the next frame into the framebuffer.
Engine::GraphicAPI preferredGraphicAPI_
Preferred graphic API of this framebuffer.
Definition GIFramebuffer.h:229
bool isAntialiasingSupported(const unsigned int buffers) const override
Returns whether the framebuffer supports hardware antialiasing.
bool setAntialiasing(const bool antialiasing) override
Sets whether the framebuffer uses hardware antialiasing.
void removeScene(const SceneRef &scene) override
Removes a scene from the framebuffer.
RenderTechnique renderTechnique() const override
Returns the render technique of the entire framebuffer.
void setCullingMode(const CullingMode cullingMode) override
Sets the global culling mode of the entire framebuffer.
FaceMode faceMode() const override
Returns the global face mode of the entire framebuffer.
void renderAntialiasedSubset(const uint8_t *sobelResponse, const unsigned int sobelResponsePaddingElements, LightSources *lightSources, const TracingGroup *group, const unsigned int threads, const unsigned int threadIndex, const unsigned int mustBeOne)
Renders a subset of the frame into the framebuffer.
void renderSubset(LightSources *lightSources, const TracingGroup *group, const unsigned int threads, const unsigned int threadIndex, const unsigned int mustBeOne)
Renders a subset of the frame into the framebuffer.
bool setSupportAntialiasing(const unsigned int buffers) override
Sets whether this framebuffer will support hardware antialiasing.
bool antialiasingEnabled_
Antialiasing enabled statement.
Definition GIFramebuffer.h:235
GIFramebuffer(const Engine::GraphicAPI preferredGraphicAPI=Engine::API_DEFAULT)
Creates a new NvidaSceneGraph framebuffer object.
Frame frame_
Framebuffer frame.
Definition GIFramebuffer.h:232
void addScene(const SceneRef &scene) override
Adds a new scene to the framebuffer.
Lighting::LightingModes lightingModes_
Lighting modes for this framebuffer.
Definition GIFramebuffer.h:241
void makeCurrent() override
Makes this frambuffer to the current one.
void clearScenes() override
Cleares all scenes registered at the framebuffer.
void setViewport(const unsigned int left, const unsigned int top, const unsigned int width, const unsigned int height) override
Sets the viewport of this framebuffer.
void makeNoncurrent() override
Makes this framebuffer to non current.
bool renderRay(const Vector3 &viewPosition, const Line3 &ray, const TracingGroup &group, const LightSources &lightSources, RGBAColor &result) const
Renders one specific ray for a given group of tracing objects and light sources.
bool isAntialiasing() const override
Returns whether the framebuffer uses hardware antialiasing.
~GIFramebuffer() override
Destructs a Global Illumination framebuffer object.
bool isQuadbufferedStereoSupported() const override
Returns whether the framebuffer supports stereo views.
This class is the base class for all Global Illumination objects.
Definition GIObject.h:29
LightingModes
Definition of individual lighting modes.
Definition Lighting.h:47
This class implements a group of tracing objects.
Definition TracingGroup.h:28
FaceMode
Defines different face rendering modes.
Definition PrimitiveAttribute.h:42
CullingMode
Defines different face culling modes.
Definition PrimitiveAttribute.h:57
std::vector< LightPair > LightSources
Definition of a vector holding light pairs.
Definition GILightSource.h:40
The namespace covering the entire Ocean framework.
Definition Accessor.h:15