Class TrianglesProxyBase

Inheritance Relationships

Base Type

Derived Types

Class Documentation

class TrianglesProxyBase : public mrpt::opengl::RenderableProxy

Specialization for proxies that render triangles (with or without lighting).

This provides common functionality for triangle mesh rendering.

Subclassed by mrpt::opengl::TexturedTrianglesProxyBase, mrpt::opengl::TrianglesProxy

Public Functions

TrianglesProxyBase() = default
virtual void compile(const mrpt::viz::CVisualObject *sourceObj) override

Initial compilation: uploads object data to GPU.

This is called once when the proxy is first created. It should:

  • Create OpenGL buffers (VBOs, VAOs, textures)

  • Upload initial vertex/color/normal/texture data

  • Cache any frequently-used values

Note

Must be called from OpenGL context thread

Note

After this call, the proxy should be ready to render

Parameters:

sourceObj – The abstract viz object (read-only access)

virtual void updateBuffers(const mrpt::viz::CVisualObject *sourceObj) override

Incremental update: refreshes GPU buffers with changed data.

This is called when the source object’s dirty flag is set (hasToUpdateBuffers() returns true). It should:

  • Re-upload only the changed data (vertices, colors, etc.)

  • Be as efficient as possible (don’t recompile everything)

Note

Must be called from OpenGL context thread

Note

Default implementation calls compile() - override for efficiency

Parameters:

sourceObj – The abstract viz object (read-only access)

virtual void render(const RenderContext &rc) const override

Renders this object using the provided context.

This is called every frame for visible objects. It should:

  • Bind appropriate buffers (VAO, VBO, textures)

  • Set shader uniforms (model matrix, material properties, etc.)

  • Issue draw calls (glDrawArrays, glDrawElements, etc.)

Note

Must be called from OpenGL context thread

Note

The shader program is already bound when this is called

Note

Common matrices (P, V, M) are already uploaded by CompiledViewport

Parameters:

rc – Rendering context (shader, matrices, lights)

virtual std::vector<shader_id_t> requiredShaders() const override

Returns the list of shader programs this object needs.

Most objects use a single shader, but some may use multiple (e.g., different shaders for shadow map pass vs. normal rendering).

Returns:

Vector of shader IDs, typically with 1 element

virtual mrpt::math::TBoundingBoxf getBoundingBoxLocal() const override

Returns the object’s bounding box in local coordinates.

Used for frustum culling and spatial queries. The bounding box should be as tight as possible for efficient culling.

Note

This is in the object’s local frame, before applying pose transform

Returns:

Bounding box, or empty box if not applicable

inline virtual const char *typeName() const override

Returns a human-readable type name for this proxy. Used for debugging and logging.

Protected Functions

shader_id_t selectShader(bool isShadowMapPass) const

Determines which shader to use based on lighting and shadow settings

Protected Attributes

Buffer m_vertexBuffer = {Buffer::Type::Vertex}

Vertex buffer (triangle vertices)

Buffer m_normalBuffer = {Buffer::Type::Vertex}

Normal buffer (per-vertex normals)

Buffer m_colorBuffer = {Buffer::Type::Vertex}

Color buffer (per-vertex colors)

VertexArrayObject m_vao

Vertex Array Object

size_t m_triangleCount = 0

Number of triangles

bool m_lightEnabled = true

Lighting enabled

mrpt::viz::TCullFace m_cullFace = mrpt::viz::TCullFace::NONE

Face culling mode

mutable std::optional<mrpt::math::TBoundingBoxf> m_cachedBBox

Cached bounding box