deleting vertex : issues with setSubdata

Because of performance issues, I want to remove some vertex from a vertex_data rather than copying all the vertex I want to keep.
From what I had read here: https://discourse.panda3d.org/viewtopic.php?t=7777, I decided to try playing with the setSubdata.
But it doesn’t seems to work the way I expected it.

When executing this code:

import direct.directbase.DirectStart
from pandac.PandaModules import *

def test_setSubdata():
    geomNode      = GeomNode('line')
    node          = NodePath(geomNode)
    vertex_format = GeomVertexFormat.getV3()
    vertex_data   = GeomVertexData('hf_vertices', vertex_format, Geom.UHStatic)
    geom          = Geom(vertex_data)
    geomNode.addGeom(geom)
    index_buffer  = GeomLines(Geom.UHStatic)
    geom.addPrimitive(index_buffer)
    node.reparentTo(render)
    # ==
    fill_vertex_data(vertex_data, index_buffer)
    # ==
    display_vertex_data(vertex_data)
    # ==
    start  = 0
    array  = vertex_data.modifyArray(0)
    handle = array.modifyHandle()
    length = array.getArrayFormat().getStride()
    handle.setSubdata(start*length, length*2, '')
    # ==
    display_vertex_data(vertex_data)
    

def fill_vertex_data(vertex_data, index_buffer):
    vertex_coord = GeomVertexWriter(vertex_data, 'vertex')
    vertex_coord.addData3f(0,0,0)
    vertex_coord.addData3f(10,0,0)
    index_buffer.closePrimitive()
    vertex_coord.addData3f(20,0,0)
    vertex_coord.addData3f(30,0,0)
    index_buffer.closePrimitive()
    
def display_vertex_data(vertex_data):
    print '-'*20
    vertex_reader = GeomVertexReader(vertex_data,'vertex')
    index = 0
    vertex_reader.setRow(0)
    while index<vertex_data.getNumRows():
        index = index+1
        print vertex_reader.getData3f()
    
        
if __name__ == '__main__':    
    test_setSubdata()

I get:

--------------------
VBase3(0, 0, 0)
VBase3(10, 0, 0)
VBase3(20, 0, 0)
VBase3(30, 0, 0)
--------------------
VBase3(0, 0, 0)
VBase3(10, 0, 0)

Where I would I have expected

VBase3(20, 0, 0)
VBase3(30, 0, 0)

in the second print.

Did I miss something, or is there an actual issue with setSubdata?

If so, is there another efficient way to remove vertex without recreating the whole vertexData?

You’re right, my apologies: this is indeed a bug with setSubdata(). I have just committed a fix for future releases of Panda.

In the meantime, you can use getData() and setData() instead, which should be almost as efficient.

David

Thank you.