Blender
V3.3
|
#include "MEM_guardedalloc.h"
#include "BLI_math_base.h"
#include "BLI_utildefines.h"
#include "gpu_backend.hh"
#include "gpu_index_buffer_private.hh"
#include <cstring>
Go to the source code of this file.
Namespaces | |
blender | |
blender::gpu | |
Macros | |
#define | KEEP_SINGLE_COPY 1 |
#define | RESTART_INDEX 0xFFFFFFFF |
GPU element list (AKA index buffer)
Definition in file gpu_index_buffer.cc.
#define KEEP_SINGLE_COPY 1 |
Definition at line 21 of file gpu_index_buffer.cc.
#define RESTART_INDEX 0xFFFFFFFF |
Definition at line 23 of file gpu_index_buffer.cc.
void GPU_indexbuf_add_generic_vert | ( | GPUIndexBufBuilder * | builder, |
uint | v | ||
) |
Definition at line 79 of file gpu_index_buffer.cc.
References GPUIndexBufBuilder::data, GPUIndexBufBuilder::index_len, GPUIndexBufBuilder::index_max, GPUIndexBufBuilder::index_min, MAX2, GPUIndexBufBuilder::max_index_len, MIN2, and v.
Referenced by curve_create_curves_lines(), curves_batch_cache_fill_segments_indices(), DRW_cache_bone_stick_get(), DRW_cache_cursor_get(), gpencil_lines_indices_cb(), GPU_indexbuf_add_line_adj_verts(), GPU_indexbuf_add_line_verts(), GPU_indexbuf_add_point_vert(), GPU_indexbuf_add_tri_verts(), particle_batch_cache_fill_segments(), particle_batch_cache_fill_segments_edit(), particle_batch_cache_fill_segments_indices(), and pygpu_IndexBuf__tp_new().
void GPU_indexbuf_add_line_adj_verts | ( | GPUIndexBufBuilder * | builder, |
uint | v1, | ||
uint | v2, | ||
uint | v3, | ||
uint | v4 | ||
) |
Definition at line 129 of file gpu_index_buffer.cc.
References GPU_indexbuf_add_generic_vert(), GPU_PRIM_LINES_ADJ, GPUIndexBufBuilder::prim_type, v1, and v2.
Referenced by DRW_cache_bone_box_wire_get(), DRW_cache_bone_octahedral_wire_get(), DRW_displist_indexbuf_create_edges_adjacency_lines(), blender::draw::extract_lines_adjacency_finish(), blender::draw::lines_adjacency_triangle(), and set_edge_adjacency_lines_indices().
void GPU_indexbuf_add_line_verts | ( | GPUIndexBufBuilder * | builder, |
uint | v1, | ||
uint | v2 | ||
) |
Definition at line 108 of file gpu_index_buffer.cc.
References GPU_indexbuf_add_generic_vert(), GPU_PRIM_LINES, GPUIndexBufBuilder::prim_type, v1, and v2.
Referenced by curve_create_edit_data_and_handles(), drw_volume_wireframe_cb(), blender::draw::edituv_edge_add(), GPU_pbvh_bmesh_buffers_update(), gpu_pbvh_grid_fill_index_buffers(), GPU_pbvh_mesh_buffers_build(), lattice_batch_cache_get_edges(), set_overlay_wires_quad_tri_indices(), and set_overlay_wires_tri_indices().
void GPU_indexbuf_add_point_vert | ( | GPUIndexBufBuilder * | builder, |
uint | v | ||
) |
Definition at line 100 of file gpu_index_buffer.cc.
References GPU_indexbuf_add_generic_vert(), GPU_PRIM_POINTS, GPUIndexBufBuilder::prim_type, and v.
Referenced by curve_create_edit_data_and_handles(), and blender::draw::edituv_point_add().
void GPU_indexbuf_add_primitive_restart | ( | GPUIndexBufBuilder * | builder | ) |
Definition at line 91 of file gpu_index_buffer.cc.
References GPUIndexBufBuilder::data, GPUIndexBufBuilder::index_len, GPUIndexBufBuilder::max_index_len, and RESTART_INDEX.
Referenced by curve_create_curves_lines(), curves_batch_cache_fill_segments_indices(), DRW_cache_bone_stick_get(), DRW_cache_cursor_get(), gpencil_lines_indices_cb(), particle_batch_cache_fill_segments(), particle_batch_cache_fill_segments_edit(), and particle_batch_cache_fill_segments_indices().
void GPU_indexbuf_add_tri_verts | ( | GPUIndexBufBuilder * | builder, |
uint | v1, | ||
uint | v2, | ||
uint | v3 | ||
) |
Definition at line 118 of file gpu_index_buffer.cc.
References GPU_indexbuf_add_generic_vert(), GPU_PRIM_TRIS, GPUIndexBufBuilder::prim_type, v1, and v2.
Referenced by DRW_cache_cube_get(), DRW_displist_indexbuf_create_triangles_in_order(), drw_volume_selection_surface_cb(), blender::draw::edituv_tri_add(), gpencil_buffer_add_fill(), GPU_batch_tris_from_poly_2d_encoded(), GPU_pbvh_bmesh_buffers_update(), gpu_pbvh_grid_fill_index_buffers(), pointcloud_batch_cache_ensure_geom(), ui_batch_roundbox_widget_get(), wm_gizmo_geometryinfo_draw(), and wm_xr_controller_model_batch_create().
void GPU_indexbuf_bind_as_ssbo | ( | GPUIndexBuf * | elem, |
int | binding | ||
) |
Definition at line 408 of file gpu_index_buffer.cc.
References blender::bke::image::partial_update::unwrap().
Referenced by draw_subdiv_build_fdots_buffers(), draw_subdiv_build_lines_buffer(), draw_subdiv_build_lines_loose_buffer(), draw_subdiv_build_tris_buffer(), and blender::gpu::tests::test_gpu_shader_compute_ibo().
GPUIndexBuf* GPU_indexbuf_build | ( | GPUIndexBufBuilder * | builder | ) |
Definition at line 347 of file gpu_index_buffer.cc.
References GPU_indexbuf_build_in_place(), and GPU_indexbuf_calloc().
Referenced by curves_batch_cache_ensure_procedural_indices(), DRW_cache_bone_box_wire_get(), DRW_cache_bone_octahedral_wire_get(), DRW_cache_bone_stick_get(), DRW_cache_cube_get(), DRW_cache_cursor_get(), DRW_cache_gpencil_face_wireframe_get(), drw_volume_selection_surface_cb(), drw_volume_wireframe_cb(), gpencil_batches_ensure(), gpencil_sbuffer_stroke_ensure(), GPU_batch_tris_from_poly_2d_encoded(), GPU_pbvh_bmesh_buffers_update(), gpu_pbvh_grid_fill_index_buffers(), GPU_pbvh_mesh_buffers_build(), lattice_batch_cache_get_edges(), particle_batch_cache_ensure_edit_pos_and_seg(), particle_batch_cache_ensure_pos_and_seg(), particle_batch_cache_ensure_procedural_indices(), pointcloud_batch_cache_ensure_geom(), pygpu_IndexBuf__tp_new(), blender::gpu::tests::test_gpu_index_buffer_subbuilders(), ui_batch_roundbox_widget_get(), wm_gizmo_geometryinfo_draw(), and wm_xr_controller_model_batch_create().
void GPU_indexbuf_build_in_place | ( | GPUIndexBufBuilder * | builder, |
GPUIndexBuf * | elem | ||
) |
Definition at line 361 of file gpu_index_buffer.cc.
References BLI_assert, GPUIndexBufBuilder::data, GPUIndexBufBuilder::index_len, GPUIndexBufBuilder::index_max, GPUIndexBufBuilder::index_min, and blender::bke::image::partial_update::unwrap().
Referenced by curve_create_curves_lines(), curve_create_edit_data_and_handles(), DRW_displist_indexbuf_create_edges_adjacency_lines(), DRW_displist_indexbuf_create_lines_in_order(), DRW_displist_indexbuf_create_triangles_in_order(), blender::draw::extract_edituv_fdots_finish(), blender::draw::extract_edituv_lines_finish(), blender::draw::extract_edituv_lines_finish_subdiv(), blender::draw::extract_edituv_points_finish(), blender::draw::extract_edituv_points_finish_subdiv(), blender::draw::extract_edituv_tris_finish(), blender::draw::extract_edituv_tris_finish_subdiv(), blender::draw::extract_fdots_finish(), blender::draw::extract_lines_adjacency_finish(), blender::draw::extract_lines_finish(), blender::draw::extract_lines_paint_mask_finish(), blender::draw::extract_lines_with_lines_loose_finish(), blender::draw::extract_points_finish(), blender::draw::extract_points_finish_subdiv(), blender::draw::extract_tris_finish(), blender::draw::extract_tris_single_mat_finish(), GPU_indexbuf_build(), and GPU_pbvh_bmesh_buffers_update().
GPUIndexBuf* GPU_indexbuf_build_on_device | ( | uint | index_len | ) |
Definition at line 58 of file gpu_index_buffer.cc.
References GPU_indexbuf_calloc(), and GPU_indexbuf_init_build_on_device().
Referenced by blender::gpu::tests::test_gpu_shader_compute_ibo().
GPUIndexBuf* GPU_indexbuf_calloc | ( | void | ) |
Definition at line 342 of file gpu_index_buffer.cc.
References blender::bke::image::partial_update::wrap().
Referenced by DRW_ibo_request(), DRW_metaball_batch_cache_get_triangles_with_normals(), DRW_metaball_batch_cache_get_wireframes_face(), blender::draw::extract_tris_finish(), blender::draw::extract_tris_init_subdiv(), blender::draw::extract_tris_single_mat_finish(), GPU_indexbuf_build(), GPU_indexbuf_build_on_device(), GPU_indexbuf_create_subrange(), and mball_batch_cache_get_edges_adj_lines().
GPUIndexBuf* GPU_indexbuf_create_subrange | ( | GPUIndexBuf * | elem_src, |
uint | start, | ||
uint | length | ||
) |
Definition at line 354 of file gpu_index_buffer.cc.
References GPU_indexbuf_calloc(), GPU_indexbuf_create_subrange_in_place(), and blender::math::length().
void GPU_indexbuf_create_subrange_in_place | ( | GPUIndexBuf * | elem, |
GPUIndexBuf * | elem_src, | ||
uint | start, | ||
uint | length | ||
) |
Definition at line 370 of file gpu_index_buffer.cc.
References blender::math::length(), and blender::bke::image::partial_update::unwrap().
Referenced by blender::draw::extract_lines_loose_subbuffer(), blender::draw::extract_lines_with_lines_loose_finish_subdiv(), blender::draw::extract_tris_finish(), blender::draw::extract_tris_init_subdiv(), blender::draw::extract_tris_single_mat_finish(), and GPU_indexbuf_create_subrange().
void GPU_indexbuf_discard | ( | GPUIndexBuf * | elem | ) |
Definition at line 388 of file gpu_index_buffer.cc.
References blender::bke::image::partial_update::unwrap().
Referenced by GPU_batch_clear(), GPU_batch_elembuf_set(), pygpu_IndexBuf__tp_dealloc(), and blender::gpu::tests::test_gpu_shader_compute_ibo().
void GPU_indexbuf_init | ( | GPUIndexBufBuilder * | builder, |
GPUPrimType | prim_type, | ||
uint | prim_len, | ||
uint | vertex_len | ||
) |
Definition at line 46 of file gpu_index_buffer.cc.
References GPU_indexbuf_init_ex(), and GPU_indexbuf_primitive_len().
Referenced by curve_create_edit_data_and_handles(), DRW_cache_bone_box_wire_get(), DRW_cache_bone_octahedral_wire_get(), DRW_cache_cube_get(), DRW_displist_indexbuf_create_edges_adjacency_lines(), DRW_displist_indexbuf_create_lines_in_order(), DRW_displist_indexbuf_create_triangles_in_order(), drw_volume_selection_surface_cb(), drw_volume_wireframe_cb(), blender::draw::extract_edituv_fdots_init(), blender::draw::extract_edituv_lines_init(), blender::draw::extract_edituv_lines_init_subdiv(), blender::draw::extract_edituv_points_init(), blender::draw::extract_edituv_points_init_subdiv(), blender::draw::extract_edituv_tris_init(), blender::draw::extract_edituv_tris_init_subdiv(), blender::draw::extract_fdots_init(), blender::draw::extract_lines_init(), blender::draw::extract_lines_paint_mask_init(), blender::draw::extract_lines_paint_mask_init_subdiv(), blender::draw::extract_points_init(), blender::draw::extract_points_init_subdiv(), blender::draw::extract_tris_init(), blender::draw::extract_tris_single_mat_init(), gpencil_batches_ensure(), gpencil_sbuffer_stroke_ensure(), GPU_batch_tris_from_poly_2d_encoded(), GPU_pbvh_bmesh_buffers_update(), GPU_pbvh_grid_buffers_update(), gpu_pbvh_grid_fill_index_buffers(), GPU_pbvh_mesh_buffers_build(), lattice_batch_cache_get_edges(), blender::draw::line_adjacency_data_init(), pointcloud_batch_cache_ensure_geom(), pygpu_IndexBuf__tp_new(), blender::gpu::tests::test_gpu_index_buffer_subbuilders(), ui_batch_roundbox_widget_get(), wm_gizmo_geometryinfo_draw(), and wm_xr_controller_model_batch_create().
void GPU_indexbuf_init_build_on_device | ( | GPUIndexBuf * | elem, |
uint | index_len | ||
) |
Definition at line 65 of file gpu_index_buffer.cc.
References blender::gpu::IndexBuf::init_build_on_device(), and blender::gpu::unwrap().
Referenced by blender::draw::extract_fdots_init_subdiv(), blender::draw::extract_lines_init_subdiv(), blender::draw::extract_tris_init_subdiv(), and GPU_indexbuf_build_on_device().
void GPU_indexbuf_init_ex | ( | GPUIndexBufBuilder * | builder, |
GPUPrimType | prim_type, | ||
uint | index_len, | ||
uint | vertex_len | ||
) |
Definition at line 32 of file gpu_index_buffer.cc.
References GPUIndexBufBuilder::data, GPUIndexBufBuilder::index_len, GPUIndexBufBuilder::index_max, GPUIndexBufBuilder::index_min, GPUIndexBufBuilder::max_allowed_index, GPUIndexBufBuilder::max_index_len, MEM_callocN, GPUIndexBufBuilder::prim_type, and UINT32_MAX.
Referenced by curve_create_curves_lines(), curves_batch_cache_ensure_procedural_indices(), DRW_cache_bone_stick_get(), DRW_cache_cursor_get(), DRW_cache_gpencil_face_wireframe_get(), GPU_indexbuf_init(), particle_batch_cache_ensure_edit_pos_and_seg(), particle_batch_cache_ensure_pos_and_seg(), and particle_batch_cache_ensure_procedural_indices().
bool GPU_indexbuf_is_init | ( | GPUIndexBuf * | elem | ) |
Definition at line 393 of file gpu_index_buffer.cc.
References blender::bke::image::partial_update::unwrap().
Referenced by DRW_ibo_requested().
void GPU_indexbuf_join | ( | GPUIndexBufBuilder * | builder_to, |
const GPUIndexBufBuilder * | builder_from | ||
) |
Definition at line 71 of file gpu_index_buffer.cc.
References BLI_assert, GPUIndexBufBuilder::data, GPUIndexBufBuilder::index_len, GPUIndexBufBuilder::index_max, GPUIndexBufBuilder::index_min, max_uu(), and min_uu().
Referenced by blender::draw::extract_lines_task_reduce(), blender::draw::extract_points_task_reduce(), blender::draw::extract_tris_mat_task_reduce(), and blender::gpu::tests::test_gpu_index_buffer_subbuilders().
int GPU_indexbuf_primitive_len | ( | GPUPrimType | prim_type | ) |
Definition at line 398 of file gpu_index_buffer.cc.
References blender::gpu::indices_per_primitive().
Referenced by GPU_indexbuf_init(), and pygpu_IndexBuf__tp_new().
const uint32_t* GPU_indexbuf_read | ( | GPUIndexBuf * | elem | ) |
(Download and) return a pointer containing the data of an index buffer.
Note that the returned pointer is still owned by the driver. To get an local copy, use GPU_indexbuf_unmap
after calling GPU_indexbuf_read
.
Definition at line 378 of file gpu_index_buffer.cc.
References blender::bke::image::partial_update::unwrap().
Referenced by blender::gpu::tests::test_gpu_shader_compute_ibo().
void GPU_indexbuf_set_line_restart | ( | GPUIndexBufBuilder * | builder, |
uint | elem | ||
) |
Definition at line 193 of file gpu_index_buffer.cc.
References BLI_assert, GPUIndexBufBuilder::data, GPU_PRIM_LINES, GPUIndexBufBuilder::index_len, MAX2, GPUIndexBufBuilder::max_index_len, GPUIndexBufBuilder::prim_type, and RESTART_INDEX.
Referenced by blender::draw::extract_lines_iter_ledge_bm(), blender::draw::extract_lines_iter_ledge_mesh(), blender::draw::extract_lines_iter_poly_bm(), blender::draw::extract_lines_iter_poly_mesh(), blender::draw::extract_lines_paint_mask_iter_poly_mesh(), and blender::draw::extract_lines_paint_mask_iter_subdiv_mesh().
void GPU_indexbuf_set_line_verts | ( | GPUIndexBufBuilder * | builder, |
uint | elem, | ||
uint | v1, | ||
uint | v2 | ||
) |
Definition at line 152 of file gpu_index_buffer.cc.
References BLI_assert, GPUIndexBufBuilder::data, GPU_PRIM_LINES, GPUIndexBufBuilder::index_len, GPUIndexBufBuilder::index_max, GPUIndexBufBuilder::index_min, MAX2, MAX3, GPUIndexBufBuilder::max_index_len, MIN3, GPUIndexBufBuilder::prim_type, v1, and v2.
Referenced by blender::draw::extract_lines_iter_ledge_bm(), blender::draw::extract_lines_iter_ledge_mesh(), blender::draw::extract_lines_iter_poly_bm(), blender::draw::extract_lines_iter_poly_mesh(), blender::draw::extract_lines_paint_mask_iter_poly_mesh(), and blender::draw::extract_lines_paint_mask_iter_subdiv_mesh().
void GPU_indexbuf_set_point_restart | ( | GPUIndexBufBuilder * | builder, |
uint | elem | ||
) |
Definition at line 185 of file gpu_index_buffer.cc.
References BLI_assert, GPUIndexBufBuilder::data, GPU_PRIM_POINTS, GPUIndexBufBuilder::index_len, MAX2, GPUIndexBufBuilder::prim_type, and RESTART_INDEX.
Referenced by blender::draw::edituv_facedot_add(), blender::draw::extract_fdots_iter_poly_bm(), blender::draw::extract_fdots_iter_poly_mesh(), blender::draw::extract_points_iter_subdiv_common(), blender::draw::vert_set_bm(), and blender::draw::vert_set_mesh().
void GPU_indexbuf_set_point_vert | ( | GPUIndexBufBuilder * | builder, |
uint | elem, | ||
uint | v1 | ||
) |
Definition at line 142 of file gpu_index_buffer.cc.
References BLI_assert, GPUIndexBufBuilder::data, GPU_PRIM_POINTS, GPUIndexBufBuilder::index_len, GPUIndexBufBuilder::index_max, GPUIndexBufBuilder::index_min, MAX2, MIN2, GPUIndexBufBuilder::prim_type, and v1.
Referenced by blender::draw::edituv_facedot_add(), blender::draw::extract_fdots_iter_poly_bm(), blender::draw::extract_fdots_iter_poly_mesh(), blender::draw::extract_points_iter_subdiv_common(), blender::gpu::tests::test_gpu_index_buffer_subbuilders(), blender::draw::vert_set_bm(), and blender::draw::vert_set_mesh().
void GPU_indexbuf_set_tri_restart | ( | GPUIndexBufBuilder * | builder, |
uint | elem | ||
) |
Definition at line 203 of file gpu_index_buffer.cc.
References BLI_assert, GPUIndexBufBuilder::data, GPU_PRIM_TRIS, GPUIndexBufBuilder::index_len, MAX2, GPUIndexBufBuilder::max_index_len, GPUIndexBufBuilder::prim_type, and RESTART_INDEX.
Referenced by blender::draw::extract_tris_single_mat_iter_looptri_bm(), and blender::draw::extract_tris_single_mat_iter_looptri_mesh().
void GPU_indexbuf_set_tri_verts | ( | GPUIndexBufBuilder * | builder, |
uint | elem, | ||
uint | v1, | ||
uint | v2, | ||
uint | v3 | ||
) |
Definition at line 167 of file gpu_index_buffer.cc.
References BLI_assert, GPUIndexBufBuilder::data, GPU_PRIM_TRIS, GPUIndexBufBuilder::index_len, GPUIndexBufBuilder::index_max, GPUIndexBufBuilder::index_min, MAX2, MAX4, GPUIndexBufBuilder::max_index_len, MIN4, GPUIndexBufBuilder::prim_type, v1, and v2.
Referenced by blender::draw::extract_tris_iter_poly_bm(), blender::draw::extract_tris_iter_poly_mesh(), blender::draw::extract_tris_single_mat_iter_looptri_bm(), and blender::draw::extract_tris_single_mat_iter_looptri_mesh().
uint32_t* GPU_indexbuf_unmap | ( | const GPUIndexBuf * | elem, |
const uint32_t * | mapped_buffer | ||
) |
Definition at line 383 of file gpu_index_buffer.cc.
References blender::bke::image::partial_update::unwrap().
void GPU_indexbuf_update_sub | ( | GPUIndexBuf * | elem, |
uint | start, | ||
uint | len, | ||
const void * | data | ||
) |
Definition at line 413 of file gpu_index_buffer.cc.
References data, len, and blender::bke::image::partial_update::unwrap().
void GPU_indexbuf_use | ( | GPUIndexBuf * | elem | ) |
Definition at line 403 of file gpu_index_buffer.cc.
References blender::bke::image::partial_update::unwrap().