mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 02:15:43 -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::
|
void GeomTristrips::
|
||||||
append_unused_vertices(GeomVertexArrayData *vertices, int vertex) {
|
append_unused_vertices(GeomVertexArrayData *vertices, int vertex) {
|
||||||
GeomVertexReader from(vertices, 0);
|
size_t offset = vertices->get_num_rows();
|
||||||
from.set_row_unsafe(vertices->get_num_rows() - 1);
|
vertices->set_num_rows(offset + 2);
|
||||||
int prev = from.get_data1i();
|
|
||||||
|
|
||||||
GeomVertexWriter to(vertices, 0);
|
PT(GeomVertexArrayDataHandle) handle = vertices->modify_handle();
|
||||||
to.set_row_unsafe(vertices->get_num_rows());
|
unsigned char *ptr = handle->get_write_pointer();
|
||||||
|
switch (vertices->get_array_format()->get_stride()) {
|
||||||
to.add_data1i(prev);
|
case 1:
|
||||||
to.add_data1i(vertex);
|
((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
|
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():
|
def test_geom_triangles_adjacency():
|
||||||
prim = core.GeomTriangles(core.GeomEnums.UH_static)
|
prim = core.GeomTriangles(core.GeomEnums.UH_static)
|
||||||
prim.add_vertex(0)
|
prim.add_vertex(0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user