该函数使用给定缓冲区中的数据更新顶点缓冲区的内容。
重要信息 您无法将 冻结 顶点缓冲区作为目标缓冲区传递。
vertex_update_buffer_from_buffer(dest_vbuff, dest_offset, src_buffer[, src_offset, src_size]);
参数 | 类型 | 描述 |
---|---|---|
dest_vbuff | Vertex Buffer | 要复制到的顶点缓冲区 |
dest_offset | Real | 开始写入数据的目标缓冲区中的偏移量 |
src_buffer | Buffer | 要复制的源缓冲区 |
src_offset | Real | 可选 开始复制的源缓冲区中的偏移量 (以字节为单位)。默认为 0。 |
src_size | Real | 可选 要从源缓冲区复制的数据大小 (以字节为单位)。默认为 -1。当 -1 时,复制整个缓冲区。 |
N/A
vertex_format_begin();
vertex_format_add_position_3d(); // Three buffer_f32 values
vertex_format_add_texcoord(); // Two buffer_f32 values
vertex_format = vertex_format_end();
var _i = 0, _vertex_size = (3 + 2) * buffer_sizeof(buffer_f32), _buff = buffer_create(1000, buffer_fixed, 4);
repeat(51)
{
repeat(3) buffer_write(_buff, buffer_f32, random(500)); // x, y, z
repeat(2) buffer_write(_buff, buffer_f32, ((_i++ mod 6) < 3)); // u, v
}
vb = vertex_create_buffer_from_buffer_ext(_buff, vertex_format, 0, 30);
vertex_update_buffer_from_buffer(vb, 0, _buff, 40 * _vertex_size, 3 * _vertex_size);
上面的代码首先创建一个新的顶点格式,其中包含 3D 位置属性和纹理坐标属性。然后它初始化几个临时变量:循环计数器、源缓冲区和单个顶点的字节大小。(3 + 2) 指的是用于存储位置的三个浮点值和用于存储 UV 坐标的两个浮点值。然后,缓冲区会填充一些随机值,以创建总共 51 个随机定位的顶点或 17 个三角形,并存储为 pr_trianglelist( 请参阅 基元类型常量 )。之后,从缓冲区中的前 30 个顶点创建一个新的顶点缓冲区。最后,通过调用 vertex_update_buffer_from_buffer; 更新此顶点缓冲区中的前三个顶点 ; 它们被原始缓冲区中顶点索引 40、41 和 42 的数据覆盖。