Ocean
Loading...
Searching...
No Matches
platform/gl/Texture.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_PLATFORM_GL_GL_TEXTURE_H
9#define META_OCEAN_PLATFORM_GL_GL_TEXTURE_H
10
13
14#include "ocean/base/Frame.h"
15
16namespace Ocean
17{
18
19namespace Platform
20{
21
22namespace GL
23{
24
25/**
26 * This class implements a 2D OpenGL texture.
27 * @ingroup platformgl
28 */
29class OCEAN_PLATFORM_GL_EXPORT Texture : public ContextAssociated
30{
31 public:
32
33 /**
34 * Creates a new OpenGL texture object.
35 */
37
38 /**
39 * Creates a new OpenGL texture object.
40 * @param frame The frame for the texture
41 */
42 explicit Texture(const Frame& frame);
43
44 /**
45 * Destructs a texture.
46 */
48
49 /**
50 * Returns the id of the texture.
51 * @return The texture's id, 0 if the texture has not been initialized yet
52 */
53 inline GLuint id() const;
54
55 /**
56 * Resizes the texture. without uploading any texture data.
57 * @param frameType The frameType to set
58 * @param enableFiltering If set, the best available filtering (either tri-linear filtering or anisotropic filtering) is enabled; otherwise nearest neighbor sampling is used.
59 * @return True, if succeeded
60 */
61 bool resize(const FrameType& frameType, const bool enableFiltering = true);
62
63 /**
64 * Sets the image content of the texture.
65 * Beware: If filtering is disabled, then no mipmaps are generated.
66 * @param frame The frame to set
67 * @param enableFiltering If set, the best available filtering (either tri-linear filtering or anisotropic filtering) is enabled; otherwise nearest neighbor sampling is used.
68 * @return True, if succeeded
69 */
70 bool update(const Frame& frame, const bool enableFiltering = true);
71
72 /**
73 * Generates mipmaps.
74 */
76
77 /**
78 * Bind this texture.
79 */
80 inline void bind();
81
82 /**
83 * Bind this texture to a given shader program.
84 * @param programId The id of the shader program
85 * @param attributeName The name of the texture attribute
86 * @param index The index of the texture
87 * @return True, if succeeded
88 */
89 bool bindToProgram(const GLuint programId, const std::string& attributeName, const unsigned int index = 0u);
90
91 /**
92 * Unbinds this texture.
93 */
94 inline void unbind();
95
96 /**
97 * Releases the texture.
98 */
99 void release();
100
101 /**
102 * Returns the frame type of this texture object.
103 * @return The frame type
104 */
105 inline const FrameType& frameType() const;
106
107 /**
108 * Returns whether this object holds a valid OpenGL texture object.
109 * @return True, if so
110 */
111 explicit inline operator bool() const;
112
113 /**
114 * Translates a pixel format to a corresponding OpenGL texture format.
115 * @param pixelFormat The pixel format to translate
116 * @param internalFormat Optional the corresponding internal texture format
117 * @return The corresponding texture format, 0 if no corresponding format exists
118 */
119 static GLenum pixelFormat2textureFormat(const FrameType::PixelFormat pixelFormat, GLint* internalFormat = nullptr);
120
121 protected:
122
123 /// The OpenGL texture id.
124 GLuint textureId;
125
126 /// OpenGL texture (pixel) format.
128
129 /// The frame type of the texture.
131};
132
133inline GLuint Texture::id() const
134{
135 return textureId;
136}
137
138inline void Texture::bind()
139{
140 ocean_assert(GL_NO_ERROR == glGetError());
141 glBindTexture(GL_TEXTURE_2D, textureId);
142 ocean_assert(GL_NO_ERROR == glGetError());
143}
144
145inline void Texture::unbind()
146{
147 ocean_assert(GL_NO_ERROR == glGetError());
148 glBindTexture(GL_TEXTURE_2D, 0);
149 ocean_assert(GL_NO_ERROR == glGetError());
150}
151
152inline const FrameType& Texture::frameType() const
153{
154 return textureFrameType;
155}
156
157inline Texture::operator bool() const
158{
159 return textureId != 0u;
160}
161
162}
163
164}
165
166}
167
168#endif // META_OCEAN_PLATFORM_GL_GL_TEXTURE_H
This class implements Ocean's image class.
Definition Frame.h:1808
Definition of a frame type composed by the frame dimension, pixel format and pixel origin.
Definition Frame.h:30
PixelFormat
Definition of all pixel formats available in the Ocean framework.
Definition Frame.h:183
This class implements the base class for all object which have an associated context.
Definition ContextAssociated.h:31
This class implements a 2D OpenGL texture.
Definition platform/gl/Texture.h:30
~Texture()
Destructs a texture.
GLuint id() const
Returns the id of the texture.
Definition platform/gl/Texture.h:133
bool update(const Frame &frame, const bool enableFiltering=true)
Sets the image content of the texture.
void updateMipmap()
Generates mipmaps.
FrameType textureFrameType
The frame type of the texture.
Definition platform/gl/Texture.h:130
GLuint textureId
The OpenGL texture id.
Definition platform/gl/Texture.h:124
static GLenum pixelFormat2textureFormat(const FrameType::PixelFormat pixelFormat, GLint *internalFormat=nullptr)
Translates a pixel format to a corresponding OpenGL texture format.
Texture(const Frame &frame)
Creates a new OpenGL texture object.
void release()
Releases the texture.
void bind()
Bind this texture.
Definition platform/gl/Texture.h:138
Texture()
Creates a new OpenGL texture object.
const FrameType & frameType() const
Returns the frame type of this texture object.
Definition platform/gl/Texture.h:152
bool bindToProgram(const GLuint programId, const std::string &attributeName, const unsigned int index=0u)
Bind this texture to a given shader program.
bool resize(const FrameType &frameType, const bool enableFiltering=true)
Resizes the texture.
GLuint textureFormat
OpenGL texture (pixel) format.
Definition platform/gl/Texture.h:127
void unbind()
Unbinds this texture.
Definition platform/gl/Texture.h:145
The namespace covering the entire Ocean framework.
Definition Accessor.h:15