class mrpt::opengl::LinesProxy
Overview
GPU-side proxy for rendering lines and wireframes.
This proxy handles rendering of any CVisualObject that uses the WIREFRAME shader, such as:
CSetOfLines
CSimpleLine
CGridPlaneXY / CGridPlaneXZ
CAxis
Wireframe rendering of meshes
Any object derived from VisualObjectParams_Lines
The proxy manages:
Vertex buffer (line endpoints as pairs)
Color buffer (per-vertex RGBA colors)
Line rendering parameters (width, anti-aliasing)
VAO for efficient attribute binding
Line rendering features:
Variable line width
Per-vertex colors
Optional anti-aliasing (GL_LINE_SMOOTH)
Alpha blending for transparency
Typical data flow:
compile() : Upload initial line vertices and colors to GPU
updateBuffers() : Re-upload when lines change
render() : Draw lines every frame
See also:
LinesProxyBase, mrpt::viz::VisualObjectParams_Lines
#include <mrpt/opengl/LinesProxy.h> class LinesProxy: public mrpt::opengl::LinesProxyBase { public: // structs struct LineParams; // construction LinesProxy(); // 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 const char* typeName() const; };
Inherited Members
public: // typedefs typedef std::shared_ptr<RenderableProxy> Ptr; // fields mrpt::math::CMatrixFloat44 m_modelMatrix = mrpt::math::CMatrixFloat44::Identity(); bool m_visible = true; bool m_castShadows = true; uint64_t m_changeCount = 0; mrpt::math::TPoint3Df m_sortPointLocal {0, 0, 0}; // 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 bool isTransparent() const; virtual bool isBackground() const; virtual shader_id_t shadowMapShader() const; virtual bool cullEligible() const; const std::optional<mrpt::math::TBoundingBoxf>& localBoundingBox() const; virtual const char* typeName() const; void setSourceObject(std::weak_ptr<const mrpt::viz::CVisualObject> obj); void setResourceScope(const void* scope); std::shared_ptr<const mrpt::viz::CVisualObject> getSourceObject() const; bool isSourceValid() const; bool sourceNeedsUpdate() 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 bool castsShadows() 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 data version of the source object changes (mrpt::viz::CVisualObject::dataVersion()). 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 const char* typeName() const
Returns a human-readable type name for this proxy.
Used for debugging and logging.