Ocean
Loading...
Searching...
No Matches
GLESTextureFramebuffer.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_TEXTURE_FRAMEBUFFER_H
9#define META_OCEAN_RENDERING_GLES_TEXTURE_FRAMEBUFFER_H
10
13
18
19#ifdef OCEAN_PLATFORM_BUILD_APPLE_IOS_ANY
20 #include <CoreVideo/CoreVideo.h>
21#endif
22
23namespace Ocean
24{
25
26namespace Rendering
27{
28
29namespace GLESceneGraph
30{
31
32/**
33 * This class is the base class for all GLESceneGraph texture framebuffer objects.
34 * @ingroup renderinggles
35 */
36class OCEAN_RENDERING_GLES_EXPORT GLESTextureFramebuffer :
37 virtual public GLESTexture,
38 virtual public TextureFramebuffer
39{
40 friend class GLESFactory;
41
42 public:
43
44 /**
45 * Returns the name of the texture e.g., in a shader.
46 * @see Texture::textureName().
47 */
48 std::string textureName() const override;
49
50 /**
51 * Sets the name of the texture e.g., in a shader.
52 * @see Texture::setTextureName().
53 */
54 bool setTextureName(const std::string& name) override;
55
56 /**
57 * Resizes the texture framebuffer.
58 * @see TextureFramebuffer::resize().
59 */
60 bool resize(const unsigned int width, const unsigned int height) override;
61
62 /**
63 * Returns the texture framebuffer's internal pixel format.
64 * @see TextureFramebuffer::pixelFormat().
65 */
67
68 /**
69 * Returns the width of this framebuffer.
70 * @return The framebuffer's width, in pixel, with range [0, infinity)
71 */
72 inline unsigned int width() const;
73
74 /**
75 * Returns the height of this framebuffer.
76 * @return The framebuffer's height, in pixel, with range [0, infinity)
77 */
78 inline unsigned int height() const;
79
80 /**
81 * Returns the texture wrap type in s direction.
82 * @see Texture2D::wrapTypeS().
83 */
84 WrapType wrapTypeS() const override;
85
86 /**
87 * Returns the texture wrap type in t direction.
88 * @see Texture2D::wrapTypeT().
89 */
90 WrapType wrapTypeT() const override;
91
92 /**
93 * Sets the texture framebuffer's internal pixel format.
94 * @see TextureFramebuffer::setPixelFormat().
95 */
96 bool setPixelFormat(const FrameType::PixelFormat pixelFormat) override;
97
98 /**
99 * Sets the texture wrap type in s direction.
100 * @see Texture2D::setWrapTypeS().
101 */
102 bool setWrapTypeS(const WrapType type) override;
103
104 /**
105 * Sets the texture wrap type in t direction.
106 * @see Texture2D::setWrapTypeT().
107 */
108 bool setWrapTypeT(const WrapType type) override;
109
110 /**
111 * Sets the number of multi-samples.
112 * @param multisamples The number of multi-samples the texture will apply, with range [1, infinity)
113 */
114 bool setMultisamples(const unsigned int multisamples);
115
116 /**
117 * Binds this texture.
118 * @see GLESTexture::bindTexture().
119 */
120 unsigned int bindTexture(GLESShaderProgram& shaderProgram, const unsigned int id) override;
121
122 /**
123 * Binds the framebuffer.
124 * @return True, if succeeded
125 */
127
128 /**
129 * Unbinds the framebuffer.
130 */
132
133 /**
134 * Copies the image content of the color texture to a given frame.
135 * @param frame The frame to which the color texture will be copied, the frame will be adjusted if the pixel format does match
136 * @param subRegion Optional sub-region within the framebuffer to copy; an invalid bounding box to copy the entire framebuffer
137 * @return True, if succeeded
138 */
139 bool copyColorTextureToFrame(Frame& frame, const CV::PixelBoundingBox& subRegion = CV::PixelBoundingBox()) override;
140
141 /**
142 * Copies the image content of the depth texture to a given frame.
143 * @param frame The frame to which the depth texture will be copied, the frame will be adjusted if the pixel format does match
144 * @param subRegion Optional sub-region within the framebuffer to copy; an invalid bounding box to copy the entire framebuffer
145 * @return True, if succeeded
146 */
147 bool copyDepthTextureToFrame(Frame& frame, const CV::PixelBoundingBox& subRegion = CV::PixelBoundingBox()) override;
148
149 /**
150 * Returns the id of the color texture.
151 * @return The OpenGL id of the color texture of this framebuffer.
152 */
153 inline GLuint colorTextureId() const;
154
155 /**
156 * Returns the id of the depth texture.
157 * @return The OpenGL id of the depth texture of this framebuffer.
158 */
159 inline GLuint depthTextureId() const;
160
161 /**
162 * Returns whether the texture framebuffer is ready for use.
163 * @return True, if so
164 */
165 bool isValid() const override;
166
167 protected:
168
169 /**
170 * Creates a new GLESceneGraph texture object.
171 */
173
174 /**
175 * Destructs a GLESceneGraph texture object.
176 */
178
179 /**
180 * Releases this texture framebuffer.
181 */
182 void release();
183
184 /**
185 * Updates the mipmap for this texture.
186 * @see GLESTexture::createMipmap().
187 */
188 void createMipmap() override;
189
190#ifdef OCEAN_PLATFORM_BUILD_APPLE_IOS_ANY
191
192 /**
193 * Creates a texture for the framebuffer on iOS platforms.
194 * @param width The width of the texture, in pixel
195 * @param height The height of the texture, in pixel
196 * @param textureInternalFormat The internal texture format
197 * @param textureFormat The texture format
198 * @param textureType The texture type
199 * @return True, if succeeded
200 */
201 bool createTextureForFramebufferAppleIOS(const unsigned int width, const unsigned int height, const GLint textureInternalFormat, const GLenum textureFormat, const GLenum textureType);
202
203#endif // OCEAN_PLATFORM_BUILD_APPLE
204
205 protected:
206
207 /// The id of the framebuffer object.
208 GLuint framebufferObjectId_ = 0u;
209
210 /// The id of the color texture.
211 GLuint colorTextureId_ = 0u;
212
213 /// The id of the depth texture.
214 GLuint depthTextureId_ = 0u;
215
216 /// The width of the texture framebuffer in pixel, with range [0, infinity).
217 unsigned int width_ = 0u;
218
219 /// The height of the texture framebuffer in pixel, with range [0, infinity).
220 unsigned int height_ = 0u;
221
222 /// The number of multi samples the framebuffer will apply, with range [1, infinity).
223 unsigned int framebufferMultisamples_ = 1u;
224
225 /// The texture's pixel format.
226 FrameType::PixelFormat pixelFormat_ = FrameType::FORMAT_RGBA32;
227
228 /// The texture wrap s type.
229 WrapType wrapTypeS_ = WRAP_CLAMP;
230
231 /// The texture wrap t type.
232 WrapType wrapTypeT_ = WRAP_CLAMP;
233
234 /// The optional texture with one samples, needed when copying the content of the multi sample framebuffer (or depth framebuffer with OpenGLES) to memory.
236
237 /// The optional shader program object, needed when copying the content of the multi sample framebuffer (or depth framebuffer with OpenGLES) to memory.
239
240 /// The optional vertex set object, needed when copying the content of the multi sample framebuffer (or depth framebuffer with OpenGLES) to memory.
242
243 /// The optional triangles object, needed when copying the content of the multi sample framebuffer (or depth framebuffer with OpenGLES) to memory.
245
246 /// The name of the texture in the shader.
247 std::string textureName_ = std::string("primaryTexture");
248
249#ifdef OCEAN_PLATFORM_BUILD_APPLE_IOS_ANY
250
251 /// The texture cache on iOS platforms, if supported.
252 CVOpenGLESTextureCacheRef iosTextureCache_ = nullptr;
253
254 /// The pixel buffer on iOS platforms, if supported.
255 CVPixelBufferRef iosPixelBuffer_ = nullptr;
256
257 /// The texture on iOS platforms, if supported.
258 CVOpenGLESTextureRef iosTexture_ = nullptr;
259
260#endif // OCEAN_PLATFORM_BUILD_APPLE_IOS_ANY
261
262#ifdef OCEAN_PLATFORM_BUILD_WINDOWS
263
264 /// The function pointer to glBlitFramebuffer.
265 PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer_ = nullptr;
266
267#endif // OCEAN_PLATFORM_BUILD_WINDOWS
268};
269
270inline unsigned int GLESTextureFramebuffer::width() const
271{
272 return width_;
273}
274
275inline unsigned int GLESTextureFramebuffer::height() const
276{
277 return height_;
278}
279
281{
282 return colorTextureId_;
283}
284
286{
287 return depthTextureId_;
288}
289
290}
291
292}
293
294}
295
296#endif // META_OCEAN_RENDERING_GLES_TEXTURE_FRAMEBUFFER_H
This class implements Ocean's image class.
Definition Frame.h:1808
PixelFormat
Definition of all pixel formats available in the Ocean framework.
Definition Frame.h:183
This class implements a class factory for all GLESceneGraph objects.
Definition GLESFactory.h:30
This class implements a container for an OpenGL ES shader program.
Definition GLESShaderProgram.h:53
This class is the base class for all GLESceneGraph texture framebuffer objects.
Definition GLESTextureFramebuffer.h:39
bool setWrapTypeT(const WrapType type) override
Sets the texture wrap type in t direction.
bool setPixelFormat(const FrameType::PixelFormat pixelFormat) override
Sets the texture framebuffer's internal pixel format.
GLuint depthTextureId_
The id of the depth texture.
Definition GLESTextureFramebuffer.h:214
bool setWrapTypeS(const WrapType type) override
Sets the texture wrap type in s direction.
ShaderProgramRef shaderProgramForOneSample_
The optional shader program object, needed when copying the content of the multi sample framebuffer (...
Definition GLESTextureFramebuffer.h:238
GLuint colorTextureId() const
Returns the id of the color texture.
Definition GLESTextureFramebuffer.h:280
VertexSetRef vertexSetForOneSample_
The optional vertex set object, needed when copying the content of the multi sample framebuffer (or d...
Definition GLESTextureFramebuffer.h:241
GLESTextureFramebuffer()
Creates a new GLESceneGraph texture object.
unsigned int height() const
Returns the height of this framebuffer.
Definition GLESTextureFramebuffer.h:275
unsigned int width_
The width of the texture framebuffer in pixel, with range [0, infinity).
Definition GLESTextureFramebuffer.h:217
bool copyDepthTextureToFrame(Frame &frame, const CV::PixelBoundingBox &subRegion=CV::PixelBoundingBox()) override
Copies the image content of the depth texture to a given frame.
TextureFramebufferRef textureFramebufferOneSample_
The optional texture with one samples, needed when copying the content of the multi sample framebuffe...
Definition GLESTextureFramebuffer.h:235
FrameType::PixelFormat pixelFormat() const override
Returns the texture framebuffer's internal pixel format.
WrapType wrapTypeT() const override
Returns the texture wrap type in t direction.
unsigned int width() const
Returns the width of this framebuffer.
Definition GLESTextureFramebuffer.h:270
GLuint depthTextureId() const
Returns the id of the depth texture.
Definition GLESTextureFramebuffer.h:285
WrapType wrapTypeS() const override
Returns the texture wrap type in s direction.
GLuint colorTextureId_
The id of the color texture.
Definition GLESTextureFramebuffer.h:211
std::string textureName() const override
Returns the name of the texture e.g., in a shader.
~GLESTextureFramebuffer() override
Destructs a GLESceneGraph texture object.
unsigned int bindTexture(GLESShaderProgram &shaderProgram, const unsigned int id) override
Binds this texture.
bool copyColorTextureToFrame(Frame &frame, const CV::PixelBoundingBox &subRegion=CV::PixelBoundingBox()) override
Copies the image content of the color texture to a given frame.
bool createTextureForFramebufferAppleIOS(const unsigned int width, const unsigned int height, const GLint textureInternalFormat, const GLenum textureFormat, const GLenum textureType)
Creates a texture for the framebuffer on iOS platforms.
TrianglesRef trianglesForOneSample_
The optional triangles object, needed when copying the content of the multi sample framebuffer (or de...
Definition GLESTextureFramebuffer.h:244
bool isValid() const override
Returns whether the texture framebuffer is ready for use.
bool setMultisamples(const unsigned int multisamples)
Sets the number of multi-samples.
bool setTextureName(const std::string &name) override
Sets the name of the texture e.g., in a shader.
void createMipmap() override
Updates the mipmap for this texture.
bool resize(const unsigned int width, const unsigned int height) override
Resizes the texture framebuffer.
unsigned int height_
The height of the texture framebuffer in pixel, with range [0, infinity).
Definition GLESTextureFramebuffer.h:220
void release()
Releases this texture framebuffer.
This class is the base class for all GLESceneGraph texture objects.
Definition GLESTexture.h:37
This class is the base class for all textures based on a framebuffer.
Definition rendering/TextureFramebuffer.h:39
WrapType
Definition of different texture wrapping types.
Definition rendering/Texture.h:96
The namespace covering the entire Ocean framework.
Definition Accessor.h:15