该函数将给定顶点缓冲区中的一系列顶点提交给 GPU 进行绘制。
该范围以偏移量和要提交的顶点数的形式提供。偏移量可以是任何大于 0 的值、要提交的实际数量的顶点数或值 -1( 表示应提交从该偏移量开始的所有顶点)。
警告 使用表面作为纹理 (由 surface_get_texture 返回) 时,应确保表面本身存在 (surface_exists) 。
vertex_submit_ext(buffer, primtype, texture, offset, number);
参数 | 类型 | 描述 |
---|---|---|
buffer | Vertex Buffer | 要使用的顶点缓冲区。 |
primtype | Primitive Type Constant | 要使用的原始类型。 |
texture | Texture | 要使用的纹理 (或 -1 表示无纹理)。 |
offset | Real | 顶点缓冲区中的偏移量,或者缓冲区中要提交的第一个顶点的索引。必须是 & gt; 0. 使用 -1 提交给定偏移量之后的所有顶点。 |
number | Real | 要提交的顶点数。该值被限制为顶点缓冲区的大小。 |
N/A
Draw Event
vertex_submit_ext(vb, pr_trianglelist, -1, 5, 6);
上面的代码显示了对函数 vertex_submit_ext 的基本调用。顶点数量为 6,是 3 的倍数,符合使用的 pr_trianglelist 基元类型的要求。
Create Event
vb = vertex_create_buffer();
vertex_begin(vb, fmt_default);
repeat(100)
{
vertex_position_3d(vb, random(room_width), random(room_height), 0);
vertex_color(vb, c_white, 1);
vertex_texcoord(vb, 0, 0);
}
vertex_end(vb);
Draw Event
var _num = (current_time / 1000 * 12) mod (vertex_get_number(vb) + 1);
vertex_submit_ext(vb, pr_linestrip, -1, 0, _num);
上面的代码示例用 100 个随机点填充顶点缓冲区,然后使用内置变量 current_time 的值逐步绘制更多点。
在 Create 事件中,使用 vertex_create_buffer 创建顶点缓冲区。然后,在 repeat 循环中向其中添加 100 个顶点。根据所使用的 passthrough_vertex_format,每个顶点都会在房间中获得一个随机位置、白色和未使用但必须存在的纹理坐标。
在 Draw 事件中,使用 vertex_submit_ext 作为 pr_linestrip 提交顶点缓冲区。起始顶点始终是第一个顶点 (由偏移值 0 表示),顶点数使用 current_time 和用于创建循环的简单动画的模运算符来计算。
Create Event
vb = vertex_create_buffer();
arr_groups = [];
var _px, _py, _col;
vertex_begin(vb, fmt_default);
for(var i = 0;i < 8;i++)
{
_px = random(room_width);
_py = random(room_height);
_col = choose(c_red, c_blue, c_green, c_yellow);
repeat(3)
{
vertex_position_3d(vb, _px + random_range(-20, 20), _py + random_range(-20, 20), 0);
vertex_color(vb, _col, 1);
vertex_texcoord(vb, 0, 0);
}
array_push(arr_groups, {visible: true, range: {offset: i * 3, num: 3}});
}
vertex_end(vb);
vertex_freeze(vb);
Draw Event
var i = 0, _num = array_length(arr_groups);
repeat(_num)
{
var _group = arr_groups[i++];
if (!_group.visible) { continue; }
vertex_submit_ext(vb, pr_trianglelist, -1, _group.range.offset, _group.range.num);
}
上面的代码示例展示了如何将顶点缓冲区视为顶点组,每个顶点由顶点的范围和数量给定。每组顶点的可见性可以单独设置。
在 Create 事件中,将创建一个顶点缓冲区和一个空数组,用于存储有关每个顶点范围的信息。使用默认的 passthrough_vertex_format 总共将 8 个三角形添加到顶点缓冲区中,每个三角形在房间中的某个位置具有随机位置、随机颜色以及随机宽度和高度。还使用存储每个三角形顶点的可见性和范围的 array_push 将 struct 推送到数组中。最后,使用 vertex_freeze 冻结顶点缓冲区,以便可以更快地将其提交给 GPU。
在 Draw 事件中,所有顶点组均通过在 repeat 循环内调用 vertex_submit_ext 来单独提交。如果任何组不可见,则会跳过该组并检查下一组。