mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-01 01:07:51 -04:00
gobj: Slight optimization for GeomTristrips::append_unused_vertices()
This commit is contained in:
parent
454179a276
commit
902ada10b8
@ -482,15 +482,28 @@ requires_unused_vertices() const {
|
||||
*/
|
||||
void GeomTristrips::
|
||||
append_unused_vertices(GeomVertexArrayData *vertices, int vertex) {
|
||||
GeomVertexReader from(vertices, 0);
|
||||
from.set_row_unsafe(vertices->get_num_rows() - 1);
|
||||
int prev = from.get_data1i();
|
||||
size_t offset = vertices->get_num_rows();
|
||||
vertices->set_num_rows(offset + 2);
|
||||
|
||||
GeomVertexWriter to(vertices, 0);
|
||||
to.set_row_unsafe(vertices->get_num_rows());
|
||||
|
||||
to.add_data1i(prev);
|
||||
to.add_data1i(vertex);
|
||||
PT(GeomVertexArrayDataHandle) handle = vertices->modify_handle();
|
||||
unsigned char *ptr = handle->get_write_pointer();
|
||||
switch (vertices->get_array_format()->get_stride()) {
|
||||
case 1:
|
||||
((uint8_t *)ptr)[offset] = ((uint8_t *)ptr)[offset - 1];
|
||||
((uint8_t *)ptr)[offset + 1] = vertex;
|
||||
break;
|
||||
case 2:
|
||||
((uint16_t *)ptr)[offset] = ((uint16_t *)ptr)[offset - 1];
|
||||
((uint16_t *)ptr)[offset + 1] = vertex;
|
||||
break;
|
||||
case 4:
|
||||
((uint32_t *)ptr)[offset] = ((uint32_t *)ptr)[offset - 1];
|
||||
((uint32_t *)ptr)[offset + 1] = vertex;
|
||||
break;
|
||||
default:
|
||||
nassert_raise("unsupported index type");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,6 +1,26 @@
|
||||
from panda3d import core
|
||||
|
||||
|
||||
def test_geom_tristrips():
|
||||
prim = core.GeomTristrips(core.GeomEnums.UH_static)
|
||||
prim.add_vertex(0)
|
||||
prim.add_vertex(1)
|
||||
prim.add_vertex(2)
|
||||
prim.add_vertex(3)
|
||||
prim.close_primitive()
|
||||
prim.add_vertex(0)
|
||||
prim.add_vertex(1)
|
||||
prim.add_vertex(2)
|
||||
prim.close_primitive()
|
||||
|
||||
verts = prim.get_vertex_list()
|
||||
assert tuple(verts) == (
|
||||
0, 1, 2, 3,
|
||||
3, 0,
|
||||
0, 1, 2,
|
||||
)
|
||||
|
||||
|
||||
def test_geom_triangles_adjacency():
|
||||
prim = core.GeomTriangles(core.GeomEnums.UH_static)
|
||||
prim.add_vertex(0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user