MRPT  2.0.3
CRenderizableShaderTexturedTriangles.h
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | https://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2020, Individual contributors, see AUTHORS file |
6  | See: https://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See: https://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 #pragma once
10 
11 #include <mrpt/img/CImage.h>
15 #include <mrpt/opengl/TTriangle.h>
16 
17 namespace mrpt::opengl
18 {
19 /** Renderizable generic renderer for objects using the triangles-with-a-texture
20  * shader.
21  *
22  * \sa CTexturedPlane, opengl::CSetOfTexturedTriangles
23  * \ingroup mrpt_opengl_grp
24  */
26 {
28 
29  public:
31  virtual ~CRenderizableShaderTexturedTriangles() override;
32 
33  virtual shader_list_t requiredShaders() const override
34  {
36  }
37  void render(const RenderContext& rc) const override;
38  void renderUpdateBuffers() const override;
39 
40  /** Must be implemented in derived classes to update the geometric entities
41  * to be drawn in "m_*_buffer" fields. */
42  virtual void onUpdateBuffers_TexturedTriangles() = 0;
43 
44  // See base docs
45  void freeOpenGLResources() override
46  {
48  m_vao.destroy();
49  }
50 
51  /** Assigns a texture and a transparency image, and enables transparency (If
52  * the images are not 2^N x 2^M, they will be internally filled to its
53  * dimensions to be powers of two)
54  * \note Images are copied, the original ones can be deleted.
55  */
56  void assignImage(
57  const mrpt::img::CImage& img, const mrpt::img::CImage& imgAlpha);
58 
59  /** Assigns a texture image, and disable transparency.
60  * \note Images are copied, the original ones can be deleted. */
61  void assignImage(const mrpt::img::CImage& img);
62 
63  /** Similar to assignImage, but the passed images are moved in (move
64  * semantic). */
65  void assignImage(mrpt::img::CImage&& img, mrpt::img::CImage&& imgAlpha);
66 
67  /** Similar to assignImage, but with move semantics. */
68  void assignImage(mrpt::img::CImage&& img);
69 
70  bool isLightEnabled() const { return m_enableLight; }
71  void enableLight(bool enable = true) { m_enableLight = enable; }
72 
73  /** VERY IMPORTANT: If you use a multi-thread application, you MUST call
74  * this from the same thread that will later destruct the object in order to
75  * the OpenGL texture memory to be correctly deleted.
76  * Calling this method more than once has no effects. If you use one
77  * thread, this method will be automatically called when rendering, so there
78  * is no need to explicitly call it.
79  */
80  virtual void initializeTextures() const override;
81 
83 
85  {
86  return m_textureImageAlpha;
87  }
88 
90 
91  /** Enable linear interpolation of textures (default=false, use nearest
92  * pixel) */
94  {
95  m_textureInterpolate = enable;
96  }
97 
98  protected:
99  /** List of triangles \sa TTriangle */
100  mutable std::vector<mrpt::opengl::TTriangle> m_triangles;
101 
104 
105  private:
106  bool m_enableLight = false;
107 
108  mutable unsigned int m_glTextureName{0};
109  mutable bool m_texture_is_loaded{false};
113 
114  /** Of the texture using "m_textureImageAlpha" */
115  mutable bool m_enableTransparency{false};
116 
117  bool m_textureInterpolate = false;
118 
119  void unloadTexture();
120 
121  static unsigned int getNewTextureNumber();
122  static void releaseTextureName(unsigned int i);
123 
126 };
127 
128 } // namespace mrpt::opengl
COpenGLBuffer.h
mrpt::opengl::CRenderizableShaderTexturedTriangles::m_glTextureName
unsigned int m_glTextureName
Definition: CRenderizableShaderTexturedTriangles.h:108
mrpt::opengl::CRenderizableShaderTexturedTriangles
Renderizable generic renderer for objects using the triangles-with-a-texture shader.
Definition: CRenderizableShaderTexturedTriangles.h:25
mrpt::opengl::CRenderizableShaderTexturedTriangles::m_textureInterpolate
bool m_textureInterpolate
Definition: CRenderizableShaderTexturedTriangles.h:117
mrpt::opengl::COpenGLVertexArrayObject
A wrapper for an OpenGL vertex array object (VAO).
Definition: COpenGLVertexArrayObject.h:21
mrpt::opengl::CRenderizableShaderTexturedTriangles::assignImage
void assignImage(const mrpt::img::CImage &img, const mrpt::img::CImage &imgAlpha)
Assigns a texture and a transparency image, and enables transparency (If the images are not 2^N x 2^M...
Definition: CRenderizableShaderTexturedTriangles.cpp:168
mrpt::opengl::CRenderizable
The base class of 3D objects that can be directly rendered through OpenGL.
Definition: CRenderizable.h:48
mrpt::opengl::CRenderizableShaderTexturedTriangles::m_textureImageAssigned
bool m_textureImageAssigned
Definition: CRenderizableShaderTexturedTriangles.h:110
mrpt::opengl::CRenderizableShaderTexturedTriangles::freeOpenGLResources
void freeOpenGLResources() override
Free opengl buffers.
Definition: CRenderizableShaderTexturedTriangles.h:45
mrpt::opengl::DefaultShaderID::TEXTURED_TRIANGLES
static constexpr shader_id_t TEXTURED_TRIANGLES
Definition: DefaultShaders.h:28
mrpt::opengl::CRenderizableShaderTexturedTriangles::m_vertexBuffer
COpenGLBuffer m_vertexBuffer
Definition: CRenderizableShaderTexturedTriangles.h:124
mrpt::opengl::CRenderizableShaderTexturedTriangles::readFromStreamTexturedObject
void readFromStreamTexturedObject(mrpt::serialization::CArchive &in)
Definition: CRenderizableShaderTexturedTriangles.cpp:528
mrpt::opengl::CRenderizableShaderTexturedTriangles::enableLight
void enableLight(bool enable=true)
Definition: CRenderizableShaderTexturedTriangles.h:71
mrpt::opengl::CRenderizableShaderTexturedTriangles::enableTextureLinearInterpolation
void enableTextureLinearInterpolation(bool enable)
Enable linear interpolation of textures (default=false, use nearest pixel)
Definition: CRenderizableShaderTexturedTriangles.h:93
out
mrpt::vision::TStereoCalibResults out
Definition: chessboard_stereo_camera_calib_unittest.cpp:25
mrpt::opengl::CRenderizableShaderTexturedTriangles::m_enableTransparency
bool m_enableTransparency
Of the texture using "m_textureImageAlpha".
Definition: CRenderizableShaderTexturedTriangles.h:115
mrpt::opengl::CRenderizableShaderTexturedTriangles::CRenderizableShaderTexturedTriangles
CRenderizableShaderTexturedTriangles()=default
mrpt::opengl::CRenderizableShaderTexturedTriangles::onUpdateBuffers_TexturedTriangles
virtual void onUpdateBuffers_TexturedTriangles()=0
Must be implemented in derived classes to update the geometric entities to be drawn in "m_*_buffer" f...
mrpt::opengl::CRenderizableShaderTexturedTriangles::requiredShaders
virtual shader_list_t requiredShaders() const override
Returns the ID of the OpenGL shader program required to render this class.
Definition: CRenderizableShaderTexturedTriangles.h:33
mrpt::opengl::CRenderizableShaderTexturedTriangles::m_vao
COpenGLVertexArrayObject m_vao
Definition: CRenderizableShaderTexturedTriangles.h:125
mrpt::serialization::CArchive
Virtual base class for "archives": classes abstracting I/O streams.
Definition: CArchive.h:54
mrpt::opengl::CRenderizableShaderTexturedTriangles::m_textureImage
mrpt::img::CImage m_textureImage
Definition: CRenderizableShaderTexturedTriangles.h:111
mrpt::opengl::CRenderizableShaderTexturedTriangles::unloadTexture
void unloadTexture()
Definition: CRenderizableShaderTexturedTriangles.cpp:506
TTriangle.h
mrpt::opengl::COpenGLVertexArrayObject::destroy
void destroy()
Automatically called upon destructor, no need for the user to call it in normal situations.
Definition: COpenGLVertexArrayObject.h:40
mrpt::opengl::CRenderizableShaderTexturedTriangles::render
void render(const RenderContext &rc) const override
Implements the rendering of 3D objects in each class derived from CRenderizable.
CRenderizable.h
mrpt::opengl::CRenderizableShaderTexturedTriangles::m_texture_is_loaded
bool m_texture_is_loaded
Definition: CRenderizableShaderTexturedTriangles.h:109
mrpt::opengl::CRenderizableShaderTexturedTriangles::releaseTextureName
static void releaseTextureName(unsigned int i)
Definition: CRenderizableShaderTexturedTriangles.cpp:582
mrpt::opengl::CRenderizableShaderTexturedTriangles::m_triangles
std::vector< mrpt::opengl::TTriangle > m_triangles
List of triangles.
Definition: CRenderizableShaderTexturedTriangles.h:100
DEFINE_VIRTUAL_SERIALIZABLE
#define DEFINE_VIRTUAL_SERIALIZABLE(class_name)
This declaration must be inserted in virtual CSerializable classes definition:
Definition: CSerializable.h:171
mrpt::img::CImage
A class for storing images as grayscale or RGB bitmaps.
Definition: img/CImage.h:148
mrpt::opengl::CRenderizableShaderTexturedTriangles::getTextureImage
const mrpt::img::CImage & getTextureImage() const
Definition: CRenderizableShaderTexturedTriangles.h:82
mrpt::opengl::CRenderizableShaderTexturedTriangles::getNewTextureNumber
static unsigned int getNewTextureNumber()
Definition: CRenderizableShaderTexturedTriangles.cpp:566
mrpt::opengl::COpenGLBuffer
A wrapper for an OpenGL buffer object.
Definition: COpenGLBuffer.h:21
mrpt::opengl::CRenderizableShaderTexturedTriangles::initializeTextures
virtual void initializeTextures() const override
VERY IMPORTANT: If you use a multi-thread application, you MUST call this from the same thread that w...
Definition: CRenderizableShaderTexturedTriangles.cpp:267
COpenGLVertexArrayObject.h
mrpt::opengl::CRenderizableShaderTexturedTriangles::~CRenderizableShaderTexturedTriangles
virtual ~CRenderizableShaderTexturedTriangles() override
Definition: CRenderizableShaderTexturedTriangles.cpp:493
mrpt::opengl::CRenderizableShaderTexturedTriangles::textureImageHasBeenAssigned
bool textureImageHasBeenAssigned() const
Definition: CRenderizableShaderTexturedTriangles.h:89
mrpt::opengl::CRenderizableShaderTexturedTriangles::getTextureAlphaImage
const mrpt::img::CImage & getTextureAlphaImage() const
Definition: CRenderizableShaderTexturedTriangles.h:84
mrpt::opengl::CRenderizableShaderTexturedTriangles::m_enableLight
bool m_enableLight
Definition: CRenderizableShaderTexturedTriangles.h:106
mrpt::opengl::CRenderizableShaderTexturedTriangles::isLightEnabled
bool isLightEnabled() const
Definition: CRenderizableShaderTexturedTriangles.h:70
mrpt::opengl::shader_list_t
std::vector< shader_id_t > shader_list_t
A list of shader IDs.
Definition: Shader.h:26
CImage.h
mrpt::opengl::CRenderizableShaderTexturedTriangles::renderUpdateBuffers
void renderUpdateBuffers() const override
Called whenever m_outdatedBuffers is true: used to re-generate OpenGL vertex buffers,...
mrpt::opengl
The namespace for 3D scene representation and rendering.
Definition: CGlCanvasBase.h:13
mrpt::opengl::COpenGLBuffer::destroy
void destroy()
Automatically called upon destructor, no need for the user to call it in normal situations.
Definition: COpenGLBuffer.h:68
mrpt::opengl::CRenderizableShaderTexturedTriangles::m_textureImageAlpha
mrpt::img::CImage m_textureImageAlpha
Definition: CRenderizableShaderTexturedTriangles.h:112
mrpt::opengl::CRenderizableShaderTexturedTriangles::writeToStreamTexturedObject
void writeToStreamTexturedObject(mrpt::serialization::CArchive &out) const
Definition: CRenderizableShaderTexturedTriangles.cpp:516



Page generated by Doxygen 1.8.17 for MRPT 2.0.3 at Thu May 21 21:53:32 UTC 2020