class mrpt::opengl::TrianglesProxy
Overview
GPU-side proxy for rendering triangle meshes.
This proxy handles rendering of any CVisualObject that uses triangle-based shaders, such as:
CMesh
CBox
CSphere
CCylinder
Any object derived from VisualObjectParams_Triangles
The proxy manages:
Vertex buffer (3D triangle vertices)
Normal buffer (per-vertex normals for lighting)
Color buffer (per-vertex RGBA colors)
VAO for efficient attribute binding
Lighting and material parameters
Face culling modes
Triangle rendering features:
Phong lighting (ambient, diffuse, specular)
Per-vertex colors with optional lighting modulation
Face culling (FRONT, BACK, NONE)
Shadow casting (2-pass rendering)
Material properties (shininess)
Shader selection:
Normal rendering: TRIANGLES_LIGHT or TRIANGLES_NO_LIGHT
Shadow 1st pass: TRIANGLES_SHADOW_1ST (depth only)
Shadow 2nd pass: TRIANGLES_SHADOW_2ND (with shadow mapping)
Typical data flow:
compile() : Upload triangle vertices, normals, colors to GPU
updateBuffers() : Re-upload when mesh changes
render() : Draw triangles with appropriate shader every frame
See also:
TrianglesProxyBase, mrpt::viz::VisualObjectParams_Triangles
#include <mrpt/opengl/TrianglesProxy.h> class TrianglesProxy: public mrpt::opengl::TrianglesProxyBase { public: // structs struct TriangleParams; // construction TrianglesProxy(); // methods virtual void compile(const mrpt::viz::CVisualObject* sourceObj); virtual void updateBuffers(const mrpt::viz::CVisualObject* sourceObj); virtual void render(const RenderContext& rc) const; virtual std::vector<shader_id_t> requiredShaders() const; virtual const char* typeName() const; };
Inherited Members
public: // typedefs typedef std::shared_ptr<RenderableProxy> Ptr; // methods virtual void compile(const mrpt::viz::CVisualObject* sourceObj) = 0; virtual void updateBuffers(const mrpt::viz::CVisualObject* sourceObj); virtual void render(const RenderContext& rc) const = 0; virtual std::vector<shader_id_t> requiredShaders() const = 0; virtual bool castsShadows() const; virtual mrpt::math::TBoundingBoxf getBoundingBoxLocal() const; virtual const char* typeName() const; RenderableProxy& operator = (const RenderableProxy&); RenderableProxy& operator = (RenderableProxy&&); virtual void compile(const mrpt::viz::CVisualObject* sourceObj); virtual void updateBuffers(const mrpt::viz::CVisualObject* sourceObj); virtual void render(const RenderContext& rc) const; virtual std::vector<shader_id_t> requiredShaders() const; virtual const char* typeName() const;
Methods
virtual void compile(const mrpt::viz::CVisualObject* sourceObj)
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
Must be called from OpenGL context thread
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)
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)
Must be called from OpenGL context thread
Default implementation calls compile() - override for efficiency
Parameters:
sourceObj |
The abstract viz object (read-only access) |
virtual void render(const RenderContext& rc) const
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.)
Must be called from OpenGL context thread
The shader program is already bound when this is called
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
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 const char* typeName() const
Returns a human-readable type name for this proxy.
Used for debugging and logging.