Ocean
GLESLines.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_LINES_H
9 #define META_OCEAN_RENDERING_GLES_LINES_H
10 
13 
14 #include "ocean/rendering/Lines.h"
15 
16 namespace Ocean
17 {
18 
19 namespace Rendering
20 {
21 
22 namespace GLESceneGraph
23 {
24 
25 /**
26  * This class implements a GLESceneGraph lines object.
27  * @ingroup renderinggles
28  */
29 class OCEAN_RENDERING_GLES_EXPORT GLESLines :
30  virtual public GLESIndependentPrimitive,
31  virtual public Lines
32 {
33  friend class GLESFactory;
34 
35  public:
36 
37  /**
38  * Returns the indices of the used vertex lines.
39  * @see Lines::indices().
40  */
41  VertexIndices indices() const override;
42 
43  /**
44  * Returns the number of line indices defined in this primitive.
45  * @see Lines::numberIndices().
46  */
47  unsigned int numberIndices() const override;
48 
49  /**
50  * Returns the width (thickness ) in pixels at which all lines will be rendered
51  * @see Lines::lineWidth().
52  */
53  Scalar lineWidth() const override;
54 
55  /**
56  * Sets the indices of the used vertex lines.
57  * @see Lines::setIndices().
58  */
59  void setIndices(const VertexIndices& indices) override;
60 
61  /**
62  * Sets the indices of the used vertex lines.
63  * @see Lines::setIndices().
64  */
65  void setIndices(const unsigned int numberImplicitLines) override;
66 
67  /**
68  * Sets the width (thickness) in pixels at which all lines will be rendered.
69  * @see Lines::setLineWidth().
70  */
71  void setLineWidth(const Scalar width) override;
72 
73  /**
74  * Renders the lines defined by the associated vertex set and the defined indices.
75  * @see GLESRenderable::render().
76  */
77  void render(const GLESFramebuffer& framebuffer, const SquareMatrix4& projectionMatrix, const HomogenousMatrix4& camera_T_object, const HomogenousMatrix4& camera_T_world, const SquareMatrix3& normalMatrix, GLESAttributeSet& attributeSet, const Lights& lights) override;
78 
79  /**
80  * Renders the triangles defined by the associated vertex set and the defined triangle faces.
81  * @see Renderable::render().
82  */
83  void render(const SquareMatrix4& projectionMatrix, const HomogenousMatrix4& camera_T_object, const HomogenousMatrix4& camera_T_world, const SquareMatrix3& normalMatrix, GLESShaderProgram& shaderProgram) override;
84 
85  /**
86  * Draws all lines with the currently bound shader program.
87  */
88  void drawLines();
89 
90  protected:
91 
92  /**
93  * Creates a new GLESceneGraph lines object.
94  */
96 
97  /**
98  * Destructs a GLESceneGraph lines object.
99  */
100  ~GLESLines() override;
101 
102  /**
103  * Releases the internal vertex buffer object containing the line indices.
104  */
105  void release();
106 
107  /**
108  * Updates the bounding box of this primitive.
109  * @see GLESPrimitive::updateBoundingBox().
110  */
111  void updateBoundingBox() override;
112 
113  protected:
114 
115  /// Vertex buffer object for line indices.
116  GLuint vboIndices_ = 0u;
117 
118  /// The line indices, in case lines are defined via explicit line indices.
120 
121  /// Number of lines, in case lines are defined implicitly based on lines with consecutive indices.
122  unsigned int numberImplicitLines_ = 0u;
123 
124  /// The width (thickness) of the line in pixels, with range [1, infinity)
125  Scalar lineWidth_ = Scalar(1);
126 };
127 
128 }
129 
130 }
131 
132 }
133 
134 #endif // META_OCEAN_RENDERING_GLES_LINES_H
This class implements a GLESceneGraph attribute set object.
Definition: GLESAttributeSet.h:40
This class implements a class factory for all GLESceneGraph objects.
Definition: GLESFactory.h:30
This class implements a base for all GLESceneGraph framebuffers.
Definition: rendering/glescenegraph/GLESFramebuffer.h:34
This class implements the base class for all GLESceneGraph independent primitive.
Definition: GLESIndependentPrimitive.h:32
This class implements a GLESceneGraph lines object.
Definition: GLESLines.h:32
~GLESLines() override
Destructs a GLESceneGraph lines object.
void updateBoundingBox() override
Updates the bounding box of this primitive.
GLESLines()
Creates a new GLESceneGraph lines object.
void setIndices(const VertexIndices &indices) override
Sets the indices of the used vertex lines.
VertexIndices explicitLineIndices_
The line indices, in case lines are defined via explicit line indices.
Definition: GLESLines.h:119
void drawLines()
Draws all lines with the currently bound shader program.
void setLineWidth(const Scalar width) override
Sets the width (thickness) in pixels at which all lines will be rendered.
Scalar lineWidth() const override
Returns the width (thickness ) in pixels at which all lines will be rendered.
unsigned int numberIndices() const override
Returns the number of line indices defined in this primitive.
void render(const SquareMatrix4 &projectionMatrix, const HomogenousMatrix4 &camera_T_object, const HomogenousMatrix4 &camera_T_world, const SquareMatrix3 &normalMatrix, GLESShaderProgram &shaderProgram) override
Renders the triangles defined by the associated vertex set and the defined triangle faces.
VertexIndices indices() const override
Returns the indices of the used vertex lines.
void setIndices(const unsigned int numberImplicitLines) override
Sets the indices of the used vertex lines.
void render(const GLESFramebuffer &framebuffer, const SquareMatrix4 &projectionMatrix, const HomogenousMatrix4 &camera_T_object, const HomogenousMatrix4 &camera_T_world, const SquareMatrix3 &normalMatrix, GLESAttributeSet &attributeSet, const Lights &lights) override
Renders the lines defined by the associated vertex set and the defined indices.
void release()
Releases the internal vertex buffer object containing the line indices.
This class implements a container for an OpenGL ES shader program.
Definition: GLESShaderProgram.h:53
This class is the base for all lines objects.
Definition: Lines.h:39
float Scalar
Definition of a scalar type.
Definition: Math.h:128
std::vector< VertexIndex > VertexIndices
Definition of a vector holding vertex indices.
Definition: rendering/Rendering.h:101
std::vector< LightPair > Lights
Definition of a set holding light sources.
Definition: GLESLightSource.h:44
The namespace covering the entire Ocean framework.
Definition: Accessor.h:15