mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-29 16:20:11 -04:00
text: slight perf improvement for TextNode card/frame generation
This commit is contained in:
parent
3ac50a2347
commit
5457d76b94
@ -255,11 +255,16 @@ is_whitespace(wchar_t character) const {
|
||||
*/
|
||||
PN_stdfloat TextNode::
|
||||
calc_width(const std::wstring &line) const {
|
||||
TextFont *font = get_font();
|
||||
if (font == nullptr) {
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
PN_stdfloat width = 0.0f;
|
||||
|
||||
std::wstring::const_iterator si;
|
||||
for (si = line.begin(); si != line.end(); ++si) {
|
||||
width += calc_width(*si);
|
||||
width += TextAssembler::calc_width(*si, *this);
|
||||
}
|
||||
|
||||
return width;
|
||||
@ -730,15 +735,16 @@ make_frame() {
|
||||
CPT(RenderState) state = RenderState::make(thick);
|
||||
|
||||
PT(GeomVertexData) vdata = new GeomVertexData
|
||||
("text", GeomVertexFormat::get_v3(), get_usage_hint());
|
||||
("text", GeomVertexFormat::get_v3(), _usage_hint);
|
||||
vdata->unclean_set_num_rows(4);
|
||||
GeomVertexWriter vertex(vdata, InternalName::get_vertex());
|
||||
|
||||
vertex.add_data3(left, 0.0f, top);
|
||||
vertex.add_data3(left, 0.0f, bottom);
|
||||
vertex.add_data3(right, 0.0f, bottom);
|
||||
vertex.add_data3(right, 0.0f, top);
|
||||
vertex.set_data3(left, 0.0f, top);
|
||||
vertex.set_data3(left, 0.0f, bottom);
|
||||
vertex.set_data3(right, 0.0f, bottom);
|
||||
vertex.set_data3(right, 0.0f, top);
|
||||
|
||||
PT(GeomLinestrips) frame = new GeomLinestrips(get_usage_hint());
|
||||
PT(GeomLinestrips) frame = new GeomLinestrips(_usage_hint);
|
||||
frame->add_consecutive_vertices(0, 4);
|
||||
frame->add_vertex(0);
|
||||
frame->close_primitive();
|
||||
@ -772,19 +778,20 @@ make_card() {
|
||||
PN_stdfloat top = dimensions[3];
|
||||
|
||||
PT(GeomVertexData) vdata = new GeomVertexData
|
||||
("text", GeomVertexFormat::get_v3t2(), get_usage_hint());
|
||||
("text", GeomVertexFormat::get_v3t2(), _usage_hint);
|
||||
vdata->unclean_set_num_rows(4);
|
||||
GeomVertexWriter vertex(vdata, InternalName::get_vertex());
|
||||
GeomVertexWriter texcoord(vdata, InternalName::get_texcoord());
|
||||
|
||||
vertex.add_data3(left, 0.0f, top);
|
||||
vertex.add_data3(left, 0.0f, bottom);
|
||||
vertex.add_data3(right, 0.0f, top);
|
||||
vertex.add_data3(right, 0.0f, bottom);
|
||||
vertex.set_data3(left, 0.0f, top);
|
||||
vertex.set_data3(left, 0.0f, bottom);
|
||||
vertex.set_data3(right, 0.0f, top);
|
||||
vertex.set_data3(right, 0.0f, bottom);
|
||||
|
||||
texcoord.add_data2(0.0f, 1.0f);
|
||||
texcoord.add_data2(0.0f, 0.0f);
|
||||
texcoord.add_data2(1.0f, 1.0f);
|
||||
texcoord.add_data2(1.0f, 0.0f);
|
||||
texcoord.set_data2(0.0f, 1.0f);
|
||||
texcoord.set_data2(0.0f, 0.0f);
|
||||
texcoord.set_data2(1.0f, 1.0f);
|
||||
texcoord.set_data2(1.0f, 0.0f);
|
||||
|
||||
PT(GeomTristrips) card = new GeomTristrips(get_usage_hint());
|
||||
card->add_consecutive_vertices(0, 4);
|
||||
@ -820,57 +827,59 @@ make_card_with_border() {
|
||||
*/
|
||||
|
||||
PT(GeomVertexData) vdata = new GeomVertexData
|
||||
("text", GeomVertexFormat::get_v3t2(), get_usage_hint());
|
||||
("text", GeomVertexFormat::get_v3t2(), _usage_hint);
|
||||
vdata->unclean_set_num_rows(16);
|
||||
GeomVertexWriter vertex(vdata, InternalName::get_vertex());
|
||||
GeomVertexWriter texcoord(vdata, InternalName::get_texcoord());
|
||||
|
||||
// verts 1,2,3,4
|
||||
vertex.add_data3(left, 0.02, top);
|
||||
vertex.add_data3(left, 0.02, top - _card_border_size);
|
||||
vertex.add_data3(left + _card_border_size, 0.02, top);
|
||||
vertex.add_data3(left + _card_border_size, 0.02,
|
||||
vertex.set_data3(left, 0.02, top);
|
||||
vertex.set_data3(left, 0.02, top - _card_border_size);
|
||||
vertex.set_data3(left + _card_border_size, 0.02, top);
|
||||
vertex.set_data3(left + _card_border_size, 0.02,
|
||||
top - _card_border_size);
|
||||
// verts 5,6,7,8
|
||||
vertex.add_data3(right - _card_border_size, 0.02, top);
|
||||
vertex.add_data3(right - _card_border_size, 0.02,
|
||||
vertex.set_data3(right - _card_border_size, 0.02, top);
|
||||
vertex.set_data3(right - _card_border_size, 0.02,
|
||||
top - _card_border_size);
|
||||
vertex.add_data3(right, 0.02, top);
|
||||
vertex.add_data3(right, 0.02, top - _card_border_size);
|
||||
vertex.set_data3(right, 0.02, top);
|
||||
vertex.set_data3(right, 0.02, top - _card_border_size);
|
||||
// verts 9,10,11,12
|
||||
vertex.add_data3(left, 0.02, bottom + _card_border_size);
|
||||
vertex.add_data3(left, 0.02, bottom);
|
||||
vertex.add_data3(left + _card_border_size, 0.02,
|
||||
vertex.set_data3(left, 0.02, bottom + _card_border_size);
|
||||
vertex.set_data3(left, 0.02, bottom);
|
||||
vertex.set_data3(left + _card_border_size, 0.02,
|
||||
bottom + _card_border_size);
|
||||
vertex.add_data3(left + _card_border_size, 0.02, bottom);
|
||||
vertex.set_data3(left + _card_border_size, 0.02, bottom);
|
||||
// verts 13,14,15,16
|
||||
vertex.add_data3(right - _card_border_size, 0.02,
|
||||
vertex.set_data3(right - _card_border_size, 0.02,
|
||||
bottom + _card_border_size);
|
||||
vertex.add_data3(right - _card_border_size, 0.02, bottom);
|
||||
vertex.add_data3(right, 0.02, bottom + _card_border_size);
|
||||
vertex.add_data3(right, 0.02, bottom);
|
||||
vertex.set_data3(right - _card_border_size, 0.02, bottom);
|
||||
vertex.set_data3(right, 0.02, bottom + _card_border_size);
|
||||
vertex.set_data3(right, 0.02, bottom);
|
||||
|
||||
texcoord.add_data2(0.0f, 1.0f); //1
|
||||
texcoord.add_data2(0.0f, 1.0f - _card_border_uv_portion); //2
|
||||
texcoord.add_data2(0.0f + _card_border_uv_portion, 1.0f); //3
|
||||
texcoord.add_data2(0.0f + _card_border_uv_portion,
|
||||
texcoord.set_data2(0.0f, 1.0f); //1
|
||||
texcoord.set_data2(0.0f, 1.0f - _card_border_uv_portion); //2
|
||||
texcoord.set_data2(0.0f + _card_border_uv_portion, 1.0f); //3
|
||||
texcoord.set_data2(0.0f + _card_border_uv_portion,
|
||||
1.0f - _card_border_uv_portion); //4
|
||||
texcoord.add_data2(1.0f -_card_border_uv_portion, 1.0f); //5
|
||||
texcoord.add_data2(1.0f -_card_border_uv_portion,
|
||||
texcoord.set_data2(1.0f -_card_border_uv_portion, 1.0f); //5
|
||||
texcoord.set_data2(1.0f -_card_border_uv_portion,
|
||||
1.0f - _card_border_uv_portion); //6
|
||||
texcoord.add_data2(1.0f, 1.0f); //7
|
||||
texcoord.add_data2(1.0f, 1.0f - _card_border_uv_portion); //8
|
||||
texcoord.set_data2(1.0f, 1.0f); //7
|
||||
texcoord.set_data2(1.0f, 1.0f - _card_border_uv_portion); //8
|
||||
|
||||
texcoord.add_data2(0.0f, _card_border_uv_portion); //9
|
||||
texcoord.add_data2(0.0f, 0.0f); //10
|
||||
texcoord.add_data2(_card_border_uv_portion, _card_border_uv_portion); //11
|
||||
texcoord.add_data2(_card_border_uv_portion, 0.0f); //12
|
||||
texcoord.set_data2(0.0f, _card_border_uv_portion); //9
|
||||
texcoord.set_data2(0.0f, 0.0f); //10
|
||||
texcoord.set_data2(_card_border_uv_portion, _card_border_uv_portion); //11
|
||||
texcoord.set_data2(_card_border_uv_portion, 0.0f); //12
|
||||
|
||||
texcoord.add_data2(1.0f - _card_border_uv_portion, _card_border_uv_portion);//13
|
||||
texcoord.add_data2(1.0f - _card_border_uv_portion, 0.0f);//14
|
||||
texcoord.add_data2(1.0f, _card_border_uv_portion);//15
|
||||
texcoord.add_data2(1.0f, 0.0f);//16
|
||||
texcoord.set_data2(1.0f - _card_border_uv_portion, _card_border_uv_portion);//13
|
||||
texcoord.set_data2(1.0f - _card_border_uv_portion, 0.0f);//14
|
||||
texcoord.set_data2(1.0f, _card_border_uv_portion);//15
|
||||
texcoord.set_data2(1.0f, 0.0f);//16
|
||||
|
||||
PT(GeomTristrips) card = new GeomTristrips(get_usage_hint());
|
||||
PT(GeomTristrips) card = new GeomTristrips(_usage_hint);
|
||||
card->reserve_num_vertices(24);
|
||||
|
||||
// tristrip #1
|
||||
card->add_consecutive_vertices(0, 8);
|
||||
|
Loading…
x
Reference in New Issue
Block a user