MeshLib C++ Docs
Loading...
Searching...
No Matches
MRRenderMeshObject.h
Go to the documentation of this file.
1#pragma once
2#include "exports.h"
5#include "MRMesh/MRBuffer.h"
6#include "MRGLStaticHolder.h"
7#include "MRRenderGLHelpers.h"
8#include "MRRenderHelpers.h"
9
10namespace MR
11{
12class MRVIEWER_CLASS RenderMeshObject : public virtual IRenderObject
13{
14public:
15 MRVIEWER_API RenderMeshObject( const VisualObject& visObj );
16 MRVIEWER_API virtual ~RenderMeshObject();
17
18 MRVIEWER_API virtual bool render( const ModelRenderParams& params ) override;
19 MRVIEWER_API virtual void renderPicker( const ModelBaseRenderParams& params, unsigned geomId ) override;
20 MRVIEWER_API virtual size_t heapBytes() const override;
21 MRVIEWER_API virtual size_t glBytes() const override;
22 MRVIEWER_API virtual void forceBindAll() override;
23protected:
25
26 int vertPosSize_{ 0 };
27 int vertNormalsSize_{ 0 };
28 int vertColorsSize_{ 0 };
29 int vertUVSize_{ 0 };
30 int faceIndicesSize_{ 0 };
31 int edgeSize_{ 0 };
32 int selEdgeSize_{ 0 };
33 int bordersSize_{ 0 };
34 int pointSize_{ 0 };
35 int pointValidSize_{ 0 };
39
49
50 typedef unsigned int GLuint;
51
52 GLuint edgesArrayObjId_{ 0 };
53 GLuint borderArrayObjId_{ 0 };
55
56 GLuint selectedEdgesArrayObjId_{ 0 };
58
59 GLuint meshArrayObjId_{ 0 };
60 GLuint meshPickerArrayObjId_{ 0 };
61
66
68
73
75
82
83 int maxTexSize_{ 0 };
84
85 GLuint pointsArrayObjId_{ 0 };
87 bool dirtyPointPos_ = false;
88
89 MRVIEWER_API virtual void renderEdges_( const ModelRenderParams& parameters, RenderModelPassMask desiredPass, GLuint vao, const Color& color, uint32_t dirtyFlag );
90
91 MRVIEWER_API virtual void renderMeshEdges_( const ModelRenderParams& parameters, RenderModelPassMask desiredPass );
92 MRVIEWER_API virtual void renderMeshVerts_( const ModelRenderParams& parameters, RenderModelPassMask desiredPass );
93
94 MRVIEWER_API virtual void bindMesh_( GLStaticHolder::ShaderType shaderType );
95
96 MRVIEWER_API virtual void bindMeshPicker_();
97
98 MRVIEWER_API virtual void bindEdges_();
99 MRVIEWER_API virtual void bindBorders_();
100 MRVIEWER_API virtual void bindSelectedEdges_();
101 MRVIEWER_API virtual void bindEmptyTextures_( GLuint shaderId );
102 MRVIEWER_API virtual void bindPoints_( GLStaticHolder::ShaderType shaderType );
103
104 MRVIEWER_API virtual void drawMesh_( bool solid, ViewportId viewportId, bool picker = false ) const;
105
106 // Create a new set of OpenGL buffer objects
107 MRVIEWER_API virtual void initBuffers_();
108
109 // Release the OpenGL buffer objects
110 MRVIEWER_API virtual void freeBuffers_();
111
112 MRVIEWER_API virtual void update_( ViewportMask mask );
113
114 // Marks dirty buffers that need to be uploaded to OpenGL
115 uint32_t dirty_{ 0 };
116 // ...
117 bool dirtyEdges_{ false };
118
119#ifdef __EMSCRIPTEN__
120 bool cornerMode = true;
121#else
122 bool cornerMode = false;
123#endif
124};
125
126}
ShaderType
Definition MRGLStaticHolder.h:16
Definition MRRenderGLHelpers.h:16
Definition MRRenderGLHelpers.h:88
Definition MRRenderGLHelpers.h:65
Definition MRIRenderObject.h:131
Definition MRObjectMeshHolder.h:32
Definition MRRenderHelpers.h:16
Definition MRRenderMeshObject.h:13
virtual MRVIEWER_API void forceBindAll() override
binds all data for this render object, not to bind ever again (until object becomes dirty)
GlBuffer facesIndicesBuffer_
Definition MRRenderMeshObject.h:67
GlBuffer vertUVBuffer_
Definition MRRenderMeshObject.h:63
MRVIEWER_API RenderBufferRef< Vector3f > loadVertPosBuffer_()
MRVIEWER_API RenderBufferRef< UVCoord > loadVertUVBuffer_()
MRVIEWER_API RenderBufferRef< Vector4f > loadFaceNormalsTextureBuffer_()
GlTexture2 selEdgesTexture_
Definition MRRenderMeshObject.h:77
MRVIEWER_API RenderBufferRef< uint8_t > loadTexturePerFaceTextureBuffer_()
GlTexture2 emptyScnLengthColorTexture_
Definition MRRenderMeshObject.h:81
GlTexture2 emptyVertsColorTexture_
Definition MRRenderMeshObject.h:79
virtual MRVIEWER_API void bindSelectedEdges_()
MRVIEWER_API RenderBufferRef< Vector3i > loadFaceIndicesBuffer_()
virtual MRVIEWER_API void initBuffers_()
virtual MRVIEWER_API void bindMesh_(GLStaticHolder::ShaderType shaderType)
MRVIEWER_API RenderBufferRef< Vector3f > loadVertNormalsBuffer_()
unsigned int GLuint
Definition MRRenderMeshObject.h:50
MRVIEWER_API RenderMeshObject(const VisualObject &visObj)
GlTexture2 emptyLinesColorTexture_
Definition MRRenderMeshObject.h:80
MRVIEWER_API RenderBufferRef< VertId > loadPointValidIndicesBuffer_()
virtual MRVIEWER_API void bindMeshPicker_()
virtual MRVIEWER_API void renderPicker(const ModelBaseRenderParams &params, unsigned geomId) override
const ObjectMeshHolder * objMesh_
Definition MRRenderMeshObject.h:24
virtual MRVIEWER_API ~RenderMeshObject()
virtual MRVIEWER_API void bindEmptyTextures_(GLuint shaderId)
GlBuffer borderBuffer_
Definition MRRenderMeshObject.h:54
virtual MRVIEWER_API void freeBuffers_()
virtual MRVIEWER_API size_t glBytes() const override
returns the amount of memory this object allocated in OpenGL
GlTexture2 facesNormalsTex_
Definition MRRenderMeshObject.h:71
GlTexture2 faceSelectionTex_
Definition MRRenderMeshObject.h:69
Vector2i texturePerFaceSize_
Definition MRRenderMeshObject.h:38
GlBuffer vertNormalsBuffer_
Definition MRRenderMeshObject.h:64
virtual MRVIEWER_API void drawMesh_(bool solid, ViewportId viewportId, bool picker=false) const
GlBuffer selectedEdgesBuffer_
Definition MRRenderMeshObject.h:57
MRVIEWER_API RenderBufferRef< Color > loadVertColorsBuffer_()
GlBuffer vertColorsBuffer_
Definition MRRenderMeshObject.h:65
GlTexture2 texturePerFace_
Definition MRRenderMeshObject.h:72
virtual MRVIEWER_API void bindPoints_(GLStaticHolder::ShaderType shaderType)
virtual MRVIEWER_API void renderMeshEdges_(const ModelRenderParams &parameters, RenderModelPassMask desiredPass)
virtual MRVIEWER_API void renderEdges_(const ModelRenderParams &parameters, RenderModelPassMask desiredPass, GLuint vao, const Color &color, uint32_t dirtyFlag)
GlTexture2DArray textureArray_
Definition MRRenderMeshObject.h:74
virtual MRVIEWER_API size_t heapBytes() const override
returns the amount of memory this object occupies on heap
MRVIEWER_API RenderBufferRef< unsigned > loadFaceSelectionTextureBuffer_()
GlBuffer vertPosBuffer_
Definition MRRenderMeshObject.h:62
GlBuffer pointValidBuffer_
Definition MRRenderMeshObject.h:86
virtual MRVIEWER_API void update_(ViewportMask mask)
virtual MRVIEWER_API void renderMeshVerts_(const ModelRenderParams &parameters, RenderModelPassMask desiredPass)
virtual MRVIEWER_API void bindBorders_()
GlTexture2 borderTexture_
Definition MRRenderMeshObject.h:78
virtual MRVIEWER_API void bindEdges_()
GlTexture2 edgesTexture_
Definition MRRenderMeshObject.h:76
Vector2i faceSelectionTextureSize_
Definition MRRenderMeshObject.h:36
Vector2i faceNormalsTextureSize_
Definition MRRenderMeshObject.h:37
virtual MRVIEWER_API bool render(const ModelRenderParams &params) override
GlTexture2 faceColorsTex_
Definition MRRenderMeshObject.h:70
Definition MRViewportId.h:16
stores mask of viewport unique identifiers
Definition MRViewportId.h:42
Visual Object.
Definition MRVisualObject.h:119
Definition MRCameraOrientationPlugin.h:8
RenderModelPassMask
Various passes of the 3D rendering.
Definition MRRenderModelParameters.h:37
Definition MRMesh/MRColor.h:9
Definition MRIRenderObject.h:43
Mesh rendering parameters for primary rendering (as opposed to the picker).
Definition MRIRenderObject.h:51