ELF>q@@%$  UH@dH%(HD$81HHt$HD$HFHD$$D$ t0H|$1HT$8dH+%(uhH@]@HT$H|$H5|$HtHt+HH5HPtHuH1Huff.fHGI~H)ǃuHH=LHH51HÐHGI~H)ǃuHH=LHH51HÐUSHHdH%(HD$81HHt$HD$HFHD$$D$ HD$t6H|$1HT$8dH+%(utHH[]fHt$H|$tHl$H=HtHH=uHuHc@HATH0fnFdH%(HD$(1HH4$HD$HGfnȉD$fbfD$uDH(HtD$9D$tIH11E1HD$(dH+%(H0LA\@HHufHHRxH;IMtoI$H5LPtZHuLIHoHbL1HHP@L8fE1H"DIjfH8fnFdH%(HD$(1HH4$HD$HGfnȉD$fbfD$u>H(HtD$9D$t;H111HT$(dH+%(u9H8HHuҐHuHHff.@H8fnFdH%(HD$(1HH4$HD$HGfnȉD$fbfD$u>H(HtD$9D$t;H111HT$(dH+%(u9H8HHuҐHuHHff.@UH@fnFdH%(HD$81HHt$HD$HGfnȉD$(fbfD$ uLHo(Ht!D$ +D$$tFH|$1HT$8dH+%(u_H@]f.HHuϐH5HT$H|$|$HtHHuHHff.UH@fnFdH%(HD$81HHt$HD$HGfnȉD$(fbfD$ uLHo(Ht!D$ +D$$tFH|$1HT$8dH+%(u_H@]f.HHuϐH5HT$H|$|$HtHHuHHff.UH@fnFdH%(HD$81HHt$HD$HGfnȉD$(fbfD$ uLHo(Ht!D$ +D$$tFH|$1HT$8dH+%(u_H@]f.HHuϐH5HT$H|$|$HtHHuHHff.UH@fnFdH%(HD$81HHt$HD$HGfnȉD$(fbfD$ uLHD$Ho(Ht!D$ +D$$t=H|$1HT$8dH+%(uNH@]ÐHHuؐHt$H|$tHt$HHuHH@UH@fnFdH%(HD$81HHt$HD$HGfnȉD$(fbfD$ uLHD$Ho(Ht!D$ +D$$t=H|$1HT$8dH+%(uNH@]ÐHHuؐHt$H|$tHt$HHHuH@UH@fnFdH%(HD$81HHt$HD$HGfnȉD$(fbfD$ uLHD$Ho(Ht!D$ +D$$t=H|$1HT$8dH+%(uMH@]ÐHHuؐHt$H|$tHt$HHuHcDUH@fnFdH%(HD$81HHt$HD$HGfnȉD$(fbfD$ uLHD$Ho(Ht!D$ +D$$t=H|$1HT$8dH+%(uMH@]ÐHHuؐHt$H|$tHt$HHuHcDAVAUATUHHfnFdH%(HD$81HHt$HD$HGfnȉD$(fbfD$ Ho(Ht!D$ +D$$tCacheDataArray("vertexMC", vtkDataArray); vbg->BuildAllVBOs(); if (vbg->GetMTime() > your VAO update time) { vbg->AddAllAttributesToVAO(...); } Appended Use case: make this an ivar of your mapper if (you need to update your VBOs) { vbg->ClearAllVBOs(); vbg->AppendDataArray("vertexMC", vtkDataArray1); vbg->AppendDataArray("vertexMC", vtkDataArray2); vbg->AppendDataArray("vertexMC", vtkDataArray3); vbg->BuildAllVBOs(); vbg->AddAllAttributesToVAO(...); } use VAO vtkRenderingOpenGL2Python.vtkOpenGLVertexBufferObjectGroupV.IsTypeOf(string) -> int C++: static vtkTypeBool IsTypeOf(const char *type) Return 1 if this class type is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeMacro found in vtkSetGet.h. V.IsA(string) -> int C++: vtkTypeBool IsA(const char *type) override; Return 1 if this class is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeMacro found in vtkSetGet.h. V.SafeDownCast(vtkObjectBase) -> vtkOpenGLVertexBufferObjectGroup C++: static vtkOpenGLVertexBufferObjectGroup *SafeDownCast( vtkObjectBase *o) V.NewInstance() -> vtkOpenGLVertexBufferObjectGroup C++: vtkOpenGLVertexBufferObjectGroup *NewInstance() V.GetNumberOfComponents(string) -> int C++: int GetNumberOfComponents(const char *attribute) Returns the number of components for this attribute zero if the attribute does not exist V.GetNumberOfTuples(string) -> int C++: int GetNumberOfTuples(const char *attribute) Returns the number of tuples for this attribute zero if the attribute does not exist V.ReleaseGraphicsResources(vtkWindow) C++: void ReleaseGraphicsResources(vtkWindow *) Release any graphics resources that are being consumed by this mapper. The parameter window could be used to determine which graphic resources to release. V.GetVBO(string) -> vtkOpenGLVertexBufferObject C++: vtkOpenGLVertexBufferObject *GetVBO(const char *attribute) Returns the VBO for an attribute, NULL if it is not present. V.AddAllAttributesToVAO(vtkShaderProgram, vtkOpenGLVertexArrayObject) C++: void AddAllAttributesToVAO(vtkShaderProgram *program, vtkOpenGLVertexArrayObject *vao) Attach all VBOs to their attributes V.RemoveAttribute(string) C++: void RemoveAttribute(const char *attribute) used to remove a no longer needed attribute Calling CacheDataArray with a nullptr attribute will also work. V.CacheDataArray(string, vtkDataArray, vtkOpenGLVertexBufferObjectCache, int) C++: void CacheDataArray(const char *attribute, vtkDataArray *da, vtkOpenGLVertexBufferObjectCache *cache, int destType) V.CacheDataArray(string, vtkDataArray, vtkViewport, int) C++: void CacheDataArray(const char *attribute, vtkDataArray *da, vtkViewport *vp, int destType) Set the data array for an attribute in the VBO Group registers the data array until build is called once this is called a valid VBO will exist V.AppendDataArray(string, vtkDataArray, int) C++: void AppendDataArray(const char *attribute, vtkDataArray *da, int destType) Append a data array for an attribute in the VBO Group registers the data array until build is called V.BuildAllVBOs(vtkOpenGLVertexBufferObjectCache) C++: void BuildAllVBOs(vtkOpenGLVertexBufferObjectCache *) V.BuildAllVBOs(vtkViewport) C++: void BuildAllVBOs(vtkViewport *) using the data arays in this group build all the VBOs, once this has been called the reference to the data arrays will be freed. V.ClearAllVBOs() C++: void ClearAllVBOs() Force all the VBOs to be freed from this group. Call this prior to starting appending operations. Not needed for single array caching. V.ClearAllDataArrays() C++: void ClearAllDataArrays() Clear all the data arrays. Typically an internal method. Automatically called at the end of BuildAllVBOs to prepare for the next set of attributes. V.GetMTime() -> int C++: vtkMTimeType GetMTime() override; Get the mtime of this groups VBOs @V *vtkOpenGLVertexBufferObjectCache@zVVi *vtkDataArray *vtkOpenGLVertexBufferObjectCache@zVVi *vtkDataArray *vtkViewportHHvtkObjectUH=Hu]ÐHH=tH]ATL%UH-HHH=LHH=LH5HHH]A\HDGCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0GNUzRx  0 DEDPa AE zPLRx $HIO|RO|R<EY B W(EAD`j AAJ gFD@ EE DH@ I `H@ I |EDP AK EDP AK EDP AK EDP AB EDP AB 0EDP AB TEDP AB 8x;FBB A(Dp (A BBBG 8=FBB A(Dp (A BBBB 8{FBB A(D (A BBBF 0,^FAA D`  AABH 8`{FBB A(D (A BBBF MFF0OFDD n ABA DDB$dFHN DAB$ED@ AG     4 uO `@O6`ug9z O p ` ^P ; ={2P^j{  dGi     ( 7 @ L _ l  x  ( ! ' - 3 9 ? E K ,Q 9W =] Pc" DS" ! " 1 o  "<     P f x     # f   E v   b   $0MO1=Jh'8Kc{_ZL44PyvtkOpenGLVertexBufferObjectGroup_StaticNewv_ZL47PyvtkOpenGLVertexBufferObjectGroup_SafeDownCastP7_objectS0__ZL47PyvtkOpenGLVertexBufferObjectGroup_BuildAllVBOsP7_objectS0__ZL55PyvtkOpenGLVertexBufferObjectGroup_BuildAllVBOs_Methods_ZL49PyvtkOpenGLVertexBufferObjectGroup_CacheDataArrayP7_objectS0__ZL57PyvtkOpenGLVertexBufferObjectGroup_CacheDataArray_Methods_ZL43PyvtkOpenGLVertexBufferObjectGroup_IsTypeOfP7_objectS0__ZL46PyvtkOpenGLVertexBufferObjectGroup_NewInstanceP7_objectS0__ZL53PyvtkOpenGLVertexBufferObjectGroup_ClearAllDataArraysP7_objectS0__ZL47PyvtkOpenGLVertexBufferObjectGroup_ClearAllVBOsP7_objectS0__ZL50PyvtkOpenGLVertexBufferObjectGroup_BuildAllVBOs_s2P7_objectS0__ZL59PyvtkOpenGLVertexBufferObjectGroup_ReleaseGraphicsResourcesP7_objectS0__ZL50PyvtkOpenGLVertexBufferObjectGroup_BuildAllVBOs_s1P7_objectS0__ZL50PyvtkOpenGLVertexBufferObjectGroup_RemoveAttributeP7_objectS0__ZL41PyvtkOpenGLVertexBufferObjectGroup_GetVBOP7_objectS0__ZL52PyvtkOpenGLVertexBufferObjectGroup_GetNumberOfTuplesP7_objectS0__ZL56PyvtkOpenGLVertexBufferObjectGroup_GetNumberOfComponentsP7_objectS0__ZL56PyvtkOpenGLVertexBufferObjectGroup_AddAllAttributesToVAOP7_objectS0__ZL50PyvtkOpenGLVertexBufferObjectGroup_AppendDataArrayP7_objectS0__ZL52PyvtkOpenGLVertexBufferObjectGroup_CacheDataArray_s2P7_objectS0__ZL38PyvtkOpenGLVertexBufferObjectGroup_IsAP7_objectS0__ZL52PyvtkOpenGLVertexBufferObjectGroup_CacheDataArray_s1P7_objectS0__ZL39PyvtkOpenGLVertexBufferObjectGroup_Type_ZL42PyvtkOpenGLVertexBufferObjectGroup_Methods_GLOBAL__sub_I_vtkOpenGLVertexBufferObjectGroupPython.cxx_ZL28vtkDebugLeaksManagerInstance_ZL37vtkRenderingOpenGL2_AutoInit_Instance_ZL43PyvtkOpenGLVertexBufferObjectGroup_GetMTimeP7_objectS0_.LC0.LC1.LC2.LC3.LC4.LC6.LC5.LC7.LC8.LC9.LC10.LC11.LC12.LC13.LC14.LC15.LC16.LC17.LC18.LC19.LC20.LC21.LC22.LC23.LC25.LC24_ZN28vtkRenderingOpenGL2_AutoInitD5Ev_ZN32vtkOpenGLVertexBufferObjectGroup3NewEv_ZNK32vtkOpenGLVertexBufferObjectGroup19NewInstanceInternalEv_ZN13vtkPythonArgs13ArgCountErrorEii_ZN13vtkPythonArgs17GetArgAsVTKObjectEPKcRbPyErr_Occurred_ZN13vtkPythonUtil20GetObjectFromPointerEP13vtkObjectBase__stack_chk_fail_ZN28vtkRenderingOpenGL2_AutoInitD2EvDW.ref.__gxx_personality_v0_Z37vtkRenderingOpenGL2_AutoInit_Destructv_ZN28vtkRenderingOpenGL2_AutoInitD1Ev_ZN17vtkPythonOverload10CallMethodEP11PyMethodDefP7_objectS3__ZN13vtkPythonArgs13ArgCountErrorEiPKc_ZN32vtkOpenGLVertexBufferObjectGroup3IsAEPKcstrcmp_ZN13vtkObjectBase8IsTypeOfEPKc_ZN13vtkPythonArgs8GetValueERPcPyLong_FromLong_ZN13vtkPythonArgs19GetSelfFromFirstArgEP7_objectS1__GLOBAL_OFFSET_TABLE_PyVTKObject_CheckPyVTKObject_GetObjectPyVTKObject_SetFlag_ZN32vtkOpenGLVertexBufferObjectGroup18ClearAllDataArraysEv_Py_NoneStruct_ZN32vtkOpenGLVertexBufferObjectGroup12ClearAllVBOsEv_ZN32vtkOpenGLVertexBufferObjectGroup12BuildAllVBOsEP11vtkViewport_ZN32vtkOpenGLVertexBufferObjectGroup24ReleaseGraphicsResourcesEP9vtkWindow_ZN32vtkOpenGLVertexBufferObjectGroup12BuildAllVBOsEP32vtkOpenGLVertexBufferObjectCache_ZN32vtkOpenGLVertexBufferObjectGroup15RemoveAttributeEPKc_ZN32vtkOpenGLVertexBufferObjectGroup6GetVBOEPKc_ZN32vtkOpenGLVertexBufferObjectGroup17GetNumberOfTuplesEPKc_ZN32vtkOpenGLVertexBufferObjectGroup21GetNumberOfComponentsEPKc_ZN32vtkOpenGLVertexBufferObjectGroup21AddAllAttributesToVAOEP16vtkShaderProgramP26vtkOpenGLVertexArrayObject_ZN13vtkPythonArgs8GetValueERi_ZN32vtkOpenGLVertexBufferObjectGroup15AppendDataArrayEPKcP12vtkDataArrayi_ZN32vtkOpenGLVertexBufferObjectGroup14CacheDataArrayEPKcP12vtkDataArrayP11vtkViewporti_ZN32vtkOpenGLVertexBufferObjectGroup14CacheDataArrayEPKcP12vtkDataArrayP32vtkOpenGLVertexBufferObjectCacheiPyvtkOpenGLVertexBufferObjectGroup_ClassNewPyVTKClass_AddPyvtkObject_ClassNewPyType_ReadyPyVTKAddFile_vtkOpenGLVertexBufferObjectGroupPyDict_SetItemString_Py_Dealloc__dso_handle_ZN20vtkDebugLeaksManagerC1Ev_ZN20vtkDebugLeaksManagerD1Ev__cxa_atexit_Z38vtkRenderingOpenGL2_AutoInit_Constructv_ZN32vtkOpenGLVertexBufferObjectGroup8GetMTimeEvPyLong_FromUnsignedLongPyType_TypePyVTKObject_DeletePyVTKObject_ReprPyVTKObject_StringPyObject_GenericGetAttrPyObject_GenericSetAttrPyVTKObject_AsBufferPyVTKObject_TraversePyVTKObject_GetSetPyVTKObject_NewPyObject_GC_Del,)`F*G+HIHJ(/,4Qe(|-Q.FU-+5SC/HSQH^VlTuJ0FW:*EEDX+gHtIYZ[HJ1]FW\H*]J2-FQWa^fHr*]}J, F1WC3RGd_iHu*]J4 F1WC5RGd`iHu*]J, F1WC6RGdaiHu*]J7 F1 WK U\ ba Hm *]x J 8 F! W; UL cT Ha Ih J 9 F W+ U< dC HP VW J : F W U, e3 H@ VG Jw ; F < G, =4 GI fN HZ *]q W J >FAW^Un?yGghH*]J-]FU?G3Ggi H*]1WGJt@FWU>*RG+LSZ/_ShHyVTJ-=FvU?G6GgjH*]W'J9'G+N(Vl\'dmn'snk+pA>FaWHVwxJDPmPqD M+S&/+S8T rs$*t/u4v;*OEJuQBX'"yP0zX{|}~8@7 9(P8@HX`@hx(` p P x   P  (8x @(H@X8 `h x8(_`L=(8HHXFpN 4HwL  @$Hd 4p X` |P  0Pd0".symtab.strtab.shstrtab.rela.text.data.bss.rela.text._ZNK32vtkOpenGLVertexBufferObjectGroup19NewInstanceInternalEv.rodata.str1.1.rodata.str1.8.rela.text._ZN28vtkRenderingOpenGL2_AutoInitD2Ev.gcc_except_table._ZN28vtkRenderingOpenGL2_AutoInitD2Ev.rodata._ZN32vtkOpenGLVertexBufferObjectGroup3IsAEPKc.str1.1.rela.text._ZN32vtkOpenGLVertexBufferObjectGroup3IsAEPKc.rela.text.startup.rela.init_array.rela.data.rel.rela.data.rel.local.rela.data.rel.local.DW.ref.__gxx_personality_v0.comment.note.GNU-stack.note.gnu.property.rela.eh_frame.group+@ "E+L"C+\ "R+h "L @Q`"&<,<6@ 1@c" z2IV2p*@d" *2* C*<>@dx"|*dw@d"8+@e"@+ @e ", @f@"/@l"0/,/ / !08@(l" P4` #D @n2