Ocean
Loading...
Searching...
No Matches
rendering/glescenegraph/GLESFramebuffer.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_GLES_FRAMEBUFFER_H
9#define META_OCEAN_RENDERING_GLES_FRAMEBUFFER_H
10
15
17
18namespace Ocean
19{
20
21namespace Rendering
22{
23
24namespace GLESceneGraph
25{
26
27/**
28 * This class implements a base for all GLESceneGraph framebuffers.
29 * @ingroup renderinggles
30 */
31class OCEAN_RENDERING_GLES_EXPORT GLESFramebuffer :
32 virtual public GLESObject,
33 virtual public Framebuffer
34{
35 public:
36
37 /**
38 * Definitions of individual stereo framebuffers.
39 */
41 {
42 /// An invalid framebuffer type.
43 ST_INVALID = 0,
44 /// Framebuffer of a mono view.
46 /// Framebuffer of a left stereo view.
48 /// Framebuffer of a right stereo view.
49 ST_RIGHT
50 };
51
52 public:
53
54 /**
55 * Returns the viewport of this framebuffer.
56 * @see Framebuffer::viewport().
57 */
58 void viewport(unsigned int& left, unsigned int& top, unsigned int& width, unsigned int& height) const override;
59
60 /**
61 * Returns whether the framebuffer supports hardware anti-aliasing.
62 * @see Framebuffer::isAntialiasingSupported().
63 */
64 bool isAntialiasingSupported(const unsigned int buffers) const override;
65
66 /**
67 * Returns whether the framebuffer uses hardware anti-aliasing.
68 * @see Framebuffer::isAntialiasing().
69 */
70 bool isAntialiasing() const override;
71
72 /**
73 * Returns the face mode of the entire framebuffer.
74 * @see Framebuffer::faceMode().
75 */
76 FaceMode faceMode() const override;
77
78 /**
79 * Returns the global face culling mode of the entire framebuffer.
80 * @see Framebuffer::cullingMode().
81 */
82 CullingMode cullingMode() const override;
83
84 /**
85 * Returns the global lighting mode of the entire framebuffer.
86 * @see Framebuffer::lightingMode().
87 */
88 LightingMode lightingMode() const override;
89
90 /**
91 * Returns the render technique of the entire framebuffer.
92 * @see Framebuffer::renderTechnique().
93 */
95
96 /**
97 * Returns the shadow technique of the entire framebuffer.
98 * @see Framebuffer::shadowTechnique().
99 */
101
102 /**
103 * Returns the stereo type of this framebuffer.
104 * @return The framebuffer's stereo type, ST_MONO by default
105 */
106 virtual StereoType stereoType() const;
107
108 /**
109 * Sets the viewport of this framebuffer.
110 * @see Framebuffer::setViewport().
111 */
112 void setViewport(const unsigned int left, const unsigned int top, const unsigned int width, const unsigned int height) override;
113
114 /**
115 * Sets whether the framebuffer uses hardware anti-aliasing.
116 * @see Framebuffer::setAntialiasing().
117 */
118 bool setAntialiasing(const bool antialiasing) override;
119
120 /**
121 * Sets the face mode of the entire framebuffer.
122 * @see Framebuffer::setFaceMode().
123 */
124 void setFaceMode(const FaceMode mode) override;
125
126 /**
127 * Sets the global culling mode of the entire framebuffer.
128 * @see Framebuffer::setCullingMode().
129 */
130 void setCullingMode(const CullingMode cullingMode) override;
131
132 /**
133 * Sets the global lighting mode of the entire framebuffer.
134 * @see Framebuffer::setLightingMode().
135 */
136 void setLightingMode(const LightingMode lightingMode) override;
137
138 /**
139 * Sets the rendering technique of the entire framebuffer.
140 * @see Framebuffer::setRenderTechnique().
141 */
142 void setRenderTechnique(const RenderTechnique technique) override;
143
144 /**
145 * Sets the shadow technique of the entire framebuffer.
146 * @see Framebuffer::setShadowTechnique().
147 */
148 void setShadowTechnique(const ShadowTechnique technique) override;
149
150 /**
151 * Sets the stereo type of this framebuffer.
152 * @param stereoType The stereo type to set
153 */
154 virtual void setStereoType(const StereoType stereoType);
155
156 /**
157 * Renders the next frame into the framebuffer.
158 * @see Framebuffer::render().
159 */
160 void render() override;
161
162 /**
163 * Returns the renderable object intersected by a given ray.
164 * @see Framebuffer::intersection().
165 */
166 bool intersection(const Line3& ray, RenderableRef& renderable, Vector3& position) override;
167
168 /**
169 * Returns whether the platform supports a specific extension.
170 * @see Framebuffer::hasExtension().
171 */
172 bool hasExtension(const std::string& extension) const override;
173
174 /**
175 * Linearizes a given z-buffer depth frame with non-linear (e.g., logarithmic) depth.
176 * By default in OpenGL, the depth coordinates range from −1 to 1, corresponding to the near and far clipping planes (after clipping and division by w).<br>
177 * @param depthFrame The non-linear depth to linearize, with value range [-1, 1], must be valid
178 * @param nearDistance The distance to the near clipping plane of the depth frame, with range (0, infinity)
179 * @param farDistance The distance to the far clipping plane of the depth frame, with range (nearDistance, infinity)
180 * @return True, if succeeded
181 */
182 bool linearizeDepthFrame(Frame& depthFrame, const Scalar nearDistance, const Scalar farDistance) const override;
183
184 protected:
185
186 /**
187 * Creates a new GLESceneGraph framebuffer object.
188 */
190
191 /**
192 * Destructs a GLESceneGraph framebuffer object.
193 */
195
196 /**
197 * Initializes the framebuffer.
198 * @see Framebuffer::initialize().
199 */
200 bool initialize(const FramebufferRef& shareFramebuffer = FramebufferRef()) override;
201
202 /**
203 * Initialize the OpenGL ES display and context.
204 * @return True, if succeeded
205 */
206 virtual bool initializeContext();
207
208 /**
209 * Initialize the OpenGL ES environment properties.
210 * @return True, if succeeded
211 */
212 virtual bool initializeOpenGLES();
213
214 /**
215 * Releases the framebuffer.
216 * @see Framebuffer::release().
217 */
218 void release() override;
219
220 protected:
221
222#ifndef OCEAN_RENDERING_GLES_USE_ES
223 /// The face mode which is only supported in OpenGL.
224 FaceMode faceMode_ = PrimitiveAttribute::MODE_FACE;
225#endif
226
227 /// Global lighting mode for the entire framebuffer.
228 CullingMode cullingMode_ = PrimitiveAttribute::CULLING_DEFAULT;
229
230 /// Global lighting mode for the entire framebuffer.
231 LightingMode lightingMode_ = PrimitiveAttribute::LM_DEFAULT;
232
233 /// The string will all extensions separated by spaces.
234 std::string extensions_;
235
236 /// Viewport left position.
237 unsigned int viewportLeft_ = (unsigned int)(-1);
238
239 /// Viewport top position.
240 unsigned int viewportTop_ = (unsigned int)(-1);
241
242 /// Viewport width value.
243 unsigned int viewportWidth_ = (unsigned int)(0);
244
245 /// Viewport height value.
246 unsigned int viewportHeight_ = (unsigned int)(0);
247
248 /// The stereo framebuffer type.
249 StereoType stereoType_ = ST_MONO;
250
251 /// The traverser which is used for rendering.
253
254 /// The texture framebuffer which is used for picking objects.
256};
257
258}
259
260}
261
262}
263
264#endif // META_OCEAN_RENDERING_GLES_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 is the base class for all rendering framebuffers.
Definition rendering/Framebuffer.h:48
RenderTechnique
Definition of different render techniques.
Definition rendering/Framebuffer.h:68
ShadowTechnique
Definition of different shadow techniques.
Definition rendering/Framebuffer.h:83
This class implements a base for all GLESceneGraph framebuffers.
Definition rendering/glescenegraph/GLESFramebuffer.h:34
ShadowTechnique shadowTechnique() const override
Returns the shadow technique of the entire framebuffer.
GLESFramebuffer()
Creates a new GLESceneGraph framebuffer object.
virtual void setStereoType(const StereoType stereoType)
Sets the stereo type of this framebuffer.
void setCullingMode(const CullingMode cullingMode) override
Sets the global culling mode of the entire framebuffer.
void setFaceMode(const FaceMode mode) override
Sets the face mode of the entire framebuffer.
bool setAntialiasing(const bool antialiasing) override
Sets whether the framebuffer uses hardware anti-aliasing.
bool linearizeDepthFrame(Frame &depthFrame, const Scalar nearDistance, const Scalar farDistance) const override
Linearizes a given z-buffer depth frame with non-linear (e.g., logarithmic) depth.
virtual bool initializeContext()
Initialize the OpenGL ES display and context.
GLESTraverser traverser_
The traverser which is used for rendering.
Definition rendering/glescenegraph/GLESFramebuffer.h:252
bool isAntialiasingSupported(const unsigned int buffers) const override
Returns whether the framebuffer supports hardware anti-aliasing.
bool isAntialiasing() const override
Returns whether the framebuffer uses hardware anti-aliasing.
StereoType
Definitions of individual stereo framebuffers.
Definition rendering/glescenegraph/GLESFramebuffer.h:41
@ ST_LEFT
Framebuffer of a left stereo view.
Definition rendering/glescenegraph/GLESFramebuffer.h:47
@ ST_MONO
Framebuffer of a mono view.
Definition rendering/glescenegraph/GLESFramebuffer.h:45
~GLESFramebuffer() override
Destructs a GLESceneGraph framebuffer object.
void release() override
Releases the framebuffer.
CullingMode cullingMode() const override
Returns the global face culling mode of the entire framebuffer.
std::string extensions_
The string will all extensions separated by spaces.
Definition rendering/glescenegraph/GLESFramebuffer.h:234
void setRenderTechnique(const RenderTechnique technique) override
Sets the rendering technique of the entire framebuffer.
virtual StereoType stereoType() const
Returns the stereo type of this framebuffer.
FaceMode faceMode() const override
Returns the face mode of the entire 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.
virtual bool initializeOpenGLES()
Initialize the OpenGL ES environment properties.
bool intersection(const Line3 &ray, RenderableRef &renderable, Vector3 &position) override
Returns the renderable object intersected by a given ray.
LightingMode lightingMode() const override
Returns the global lighting mode of the entire framebuffer.
bool initialize(const FramebufferRef &shareFramebuffer=FramebufferRef()) override
Initializes the framebuffer.
void setShadowTechnique(const ShadowTechnique technique) override
Sets the shadow technique of the entire framebuffer.
RenderTechnique renderTechnique() const override
Returns the render technique of the entire framebuffer.
bool hasExtension(const std::string &extension) const override
Returns whether the platform supports a specific extension.
SmartObjectRef< GLESTextureFramebuffer > pickingTextureFramebuffer_
The texture framebuffer which is used for picking objects.
Definition rendering/glescenegraph/GLESFramebuffer.h:255
void setLightingMode(const LightingMode lightingMode) override
Sets the global lighting mode of the entire framebuffer.
void render() override
Renders the next frame into the framebuffer.
void viewport(unsigned int &left, unsigned int &top, unsigned int &width, unsigned int &height) const override
Returns the viewport of this framebuffer.
This class is the base class for all GLESceneGraph objects.
Definition GLESObject.h:57
This class implements a traverser for renderables.
Definition GLESTraverser.h:39
FaceMode
Defines different face rendering modes.
Definition PrimitiveAttribute.h:42
CullingMode
Defines different face culling modes.
Definition PrimitiveAttribute.h:57
LightingMode
Definition of different lighting modes.
Definition PrimitiveAttribute.h:74
This class implements a smart rendering object reference.
Definition rendering/ObjectRef.h:34
float Scalar
Definition of a scalar type.
Definition Math.h:129
The namespace covering the entire Ocean framework.
Definition Accessor.h:15