|
Blender V5.0
|
#include "MEM_guardedalloc.h"#include "gpu_backend.hh"#include "gpu_vertex_format_private.hh"#include "GPU_vertex_buffer.hh"#include "gpu_context_private.hh"#include <cstring>Go to the source code of this file.
Namespaces | |
| namespace | blender |
| namespace | blender::gpu |
GPU vertex buffer
Definition in file gpu_vertex_buffer.cc.
| void GPU_vertbuf_attr_fill | ( | blender::gpu::VertBuf * | verts, |
| uint | a_idx, | ||
| const void * | data ) |
Tightly packed, non interleaved input data.
Definition at line 200 of file gpu_vertex_buffer.cc.
References BLI_assert, data, GPU_vertbuf_attr_fill_stride(), GPU_VERTBUF_DATA_DIRTY, GPUVertAttr::Type::size(), GPUVertAttr::type, and verts.
Referenced by circle_draw_rgb(), blender::draw::curve_create_curves_pos(), blender::render::hydra::DrawTexture::DrawTexture(), blender::draw::drw_volume_selection_surface_cb(), blender::draw::drw_volume_wireframe_cb(), GPU_batch_preset_quad(), blender::gpu::tests::test_buffer_texture(), waveform_draw_one(), and wm_gizmo_geometryinfo_draw().
Definition at line 220 of file gpu_vertex_buffer.cc.
References BLI_assert, data, GPU_USAGE_DEVICE_ONLY, GPU_VERTBUF_DATA_DIRTY, GPUVertAttr::offset, GPUVertAttr::Type::size(), GPUVertAttr::type, v, and verts.
Referenced by blender::draw::drw_volume_wireframe_cb(), GPU_vertbuf_attr_fill(), and pygpu_vertbuf_fill_impl().
| void GPU_vertbuf_attr_get_raw_data | ( | VertBuf * | verts, |
| uint | a_idx, | ||
| GPUVertBufRaw * | access ) |
Definition at line 244 of file gpu_vertex_buffer.cc.
References GPUVertBufRaw::_data_end, BLI_assert, GPUVertBufRaw::data, GPUVertBufRaw::data_init, GPU_VERTBUF_DATA_DIRTY, GPU_VERTBUF_DATA_UPLOADED, GPUVertAttr::offset, GPUVertAttr::Type::size(), GPUVertBufRaw::size, GPUVertBufRaw::stride, GPUVertAttr::type, and verts.
Referenced by batch_sphere_wire(), gpu_batch_sphere(), GPU_batch_tris_from_poly_2d_encoded(), GPU_batch_wire_from_poly_2d_encoded(), gpu_viewport_batch_create(), blender::draw::particle_batch_cache_ensure_edit_pos_and_seg(), pygpu_vertbuf_fill_impl(), and ui_batch_roundbox_shadow_get().
| void GPU_vertbuf_attr_set | ( | blender::gpu::VertBuf * | verts, |
| uint | a_idx, | ||
| uint | v_idx, | ||
| const void * | data ) |
The most important #set_attr variant is the untyped one. Get it right first. It takes a void* so the app developer is responsible for matching their app data types to the vertex attribute's type and component count. They're in control of both, so this should not be a problem.
Definition at line 188 of file gpu_vertex_buffer.cc.
References BLI_assert, data, GPU_USAGE_DEVICE_ONLY, GPU_VERTBUF_DATA_DIRTY, GPUVertAttr::offset, GPUVertAttr::Type::size(), GPUVertAttr::type, and verts.
Referenced by blender::draw::curve_create_edit_curves_nor(), blender::draw::curve_create_edit_data_and_handles(), do_vert_pair(), draw_line_bounds(), draw_line_loop(), draw_line_pairs(), knifetool_draw(), blender::draw::lattice_batch_cache_create_overlay_batches(), blender::draw::lattice_batch_cache_get_pos(), blender::draw::particle_batch_cache_ensure_edit_inner_pos(), blender::draw::particle_batch_cache_ensure_edit_tip_pos(), blender::draw::particle_batch_cache_ensure_pos(), blender::draw::particle_batch_cache_fill_segments(), blender::ed::space_node::set_nodelink_vertex(), and stitch_draw().
| void GPU_vertbuf_bind_as_ssbo | ( | VertBuf * | verts, |
| int | binding ) |
Definition at line 304 of file gpu_vertex_buffer.cc.
References verts.
Referenced by bind_attribute_as_ssbo(), blender::draw::draw_subdiv_accumulate_normals(), blender::draw::draw_subdiv_build_edge_fac_buffer(), blender::draw::draw_subdiv_build_edituv_stretch_angle_buffer(), blender::draw::draw_subdiv_build_edituv_stretch_area_buffer(), blender::draw::draw_subdiv_build_fdots_buffers(), blender::draw::draw_subdiv_build_lines_buffer(), blender::draw::draw_subdiv_build_lines_loose_buffer(), blender::draw::draw_subdiv_build_lnor_buffer(), blender::draw::draw_subdiv_build_paint_overlay_flag_buffer(), blender::draw::draw_subdiv_build_sculpt_data_buffer(), blender::draw::draw_subdiv_build_tris_buffer(), blender::draw::draw_subdiv_extract_pos(), blender::draw::draw_subdiv_extract_uvs(), blender::draw::draw_subdiv_interp_corner_normals(), blender::draw::draw_subdiv_interp_custom_data(), blender::draw::command::ResourceBind::execute(), GPU_batch_bind_as_resources(), and blender::gpu::tests::test_shader_compute_vbo().
| void GPU_vertbuf_bind_as_texture | ( | VertBuf * | verts, |
| int | binding ) |
Definition at line 309 of file gpu_vertex_buffer.cc.
References verts.
Referenced by blender::draw::command::ResourceBind::execute(), and blender::gpu::tests::test_buffer_texture().
| VertBuf * GPU_vertbuf_calloc | ( | ) |
Definition at line 111 of file gpu_vertex_buffer.cc.
References blender::gpu::GPUBackend::get(), and blender::gpu::GPUBackend::vertbuf_alloc().
Referenced by blender::draw::build_poly_other_map_vbo(), blender::opensubdiv::GPUVertexBuffer::Create(), blender::draw::draw_subdiv_cache_update_extra_coarse_face_data(), DRW_vbo_request(), blender::draw::drw_volume_wireframe_cb(), blender::draw::extract_attribute(), blender::draw::extract_attribute_subdiv(), blender::draw::extract_edituv_stretch_angle_subdiv(), blender::draw::extract_edituv_stretch_area_subdiv(), blender::draw::extract_lines_loose_geom_subdiv(), blender::draw::extract_sculpt_data_subdiv(), blender::draw::extract_tangents_subdiv(), GPU_vertbuf_create_with_format_ex(), and blender::draw::init_coarse_data().
| void GPU_vertbuf_clear | ( | blender::gpu::VertBuf * | verts | ) |
Same as discard but does not free.
Definition at line 148 of file gpu_vertex_buffer.cc.
References verts.
| VertBuf * GPU_vertbuf_create_on_device | ( | const GPUVertFormat & | format, |
| uint | v_len ) |
Definition at line 136 of file gpu_vertex_buffer.cc.
References GPU_USAGE_DEVICE_ONLY, GPU_vertbuf_create_with_format_ex(), GPU_vertbuf_data_alloc(), and verts.
Referenced by blender::draw::extract_edge_factor_subdiv(), blender::draw::extract_edituv_stretch_angle_subdiv(), blender::draw::extract_edituv_stretch_area_subdiv(), blender::draw::extract_face_dots_subdiv(), blender::draw::extract_normals_subdiv(), blender::draw::extract_paint_overlay_flags_subdiv(), blender::draw::extract_positions_subdiv(), blender::draw::extract_sculpt_data_subdiv(), blender::draw::extract_tangents_subdiv(), blender::draw::extract_uv_maps_subdiv(), and blender::draw::extract_weights_subdiv().
| VertBuf * GPU_vertbuf_create_with_format_ex | ( | const GPUVertFormat & | format, |
| GPUUsageType | usage ) |
Definition at line 116 of file gpu_vertex_buffer.cc.
References GPU_vertbuf_calloc(), and verts.
Referenced by blender::draw::alloc_evaluated_point_attribute_vbo(), blender::opensubdiv::GPUVertexBuffer::Create(), blender::gpu::VertBuf::device_only(), blender::draw::draw_subdiv_init_origindex_buffer(), blender::draw::draw_subdiv_init_origindex_buffer(), blender::draw::ensure_control_point_attribute(), blender::gpu::VertBuf::from_size_with_format(), blender::gpu::VertBuf::from_span(), blender::gpu::VertBuf::from_varray(), blender::gpu::MTLContext::get_dummy_texture(), GPU_vertbuf_create_on_device(), GPU_vertbuf_create_with_format(), blender::draw::grease_pencil_edit_batch_ensure(), blender::draw::grease_pencil_geom_batch_ensure(), blender::draw::grease_pencil_weight_batch_ensure(), blender::draw::interpolate_face_corner_attribute_to_curve(), blender::ed::space_node::nodelink_batch_init(), blender::ed::vse::SeqQuadsBatch::SeqQuadsBatch(), blender::gpu::tests::test_buffer_texture(), blender::draw::test_draw_curves_interpolate_position(), blender::draw::test_draw_curves_lib(), and blender::gpu::tests::test_shader_compute_vbo().
| void GPU_vertbuf_data_alloc | ( | blender::gpu::VertBuf & | verts, |
| uint | v_len ) |
Create a new allocation, discarding any existing data.
Definition at line 171 of file gpu_vertex_buffer.cc.
References verts.
Referenced by blender::draw::alloc_evaluated_point_attribute_vbo(), batch_screen_edges_get(), batch_sphere_wire(), blender::draw::build_poly_other_map_vbo(), circle_draw_rgb(), blender::opensubdiv::GPUVertexBuffer::Create(), blender::draw::create_edit_points_data(), blender::draw::create_edit_points_position(), blender::draw::create_edit_points_position_vbo(), blender::draw::create_edit_points_selection(), blender::draw::create_vbo(), blender::draw::curve_create_attribute(), blender::draw::curve_create_curves_pos(), blender::draw::curve_create_edit_curves_nor(), blender::draw::curve_create_edit_data_and_handles(), blender::ed::greasepencil::image_render::draw_grease_pencil_stroke(), draw_line_bounds(), draw_line_loop(), draw_line_pairs(), blender::draw::draw_subdiv_cache_update_extra_coarse_face_data(), blender::draw::draw_subdiv_init_origindex_buffer(), blender::draw::draw_subdiv_init_origindex_buffer(), blender::render::hydra::DrawTexture::DrawTexture(), blender::draw::DRW_vertbuf_create_wiredata(), blender::draw::drw_volume_selection_surface_cb(), blender::draw::drw_volume_wireframe_cb(), blender::gpu::Context::dummy_vbo_get(), blender::draw::ensure_control_point_attribute(), blender::draw::pbvh::ensure_vbos_allocated_bmesh(), blender::draw::pbvh::ensure_vbos_allocated_grids(), blender::draw::pbvh::ensure_vbos_allocated_mesh(), blender::draw::extract_attr_viewer(), blender::draw::extract_edge_factor(), blender::draw::extract_edit_data(), blender::draw::extract_edit_data_subdiv(), blender::draw::extract_edituv_data(), blender::draw::extract_edituv_data_subdiv(), blender::draw::extract_edituv_stretch_angle(), blender::draw::extract_edituv_stretch_area(), blender::draw::extract_edituv_stretch_area_subdiv(), blender::draw::extract_face_dot_normals(), blender::draw::extract_face_dots_edituv_data(), blender::draw::extract_face_dots_position(), blender::draw::extract_face_dots_uv(), blender::draw::extract_lines_loose_geom_subdiv(), blender::draw::extract_mesh_analysis(), blender::draw::extract_normals(), blender::draw::extract_normals_subdiv(), blender::draw::extract_orco(), blender::draw::extract_paint_overlay_flags(), blender::draw::extract_positions(), blender::draw::extract_sculpt_data(), blender::draw::extract_sculpt_data_subdiv(), blender::draw::extract_skin_roots(), blender::draw::extract_tangents(), blender::draw::extract_tangents_subdiv(), blender::draw::extract_uv_maps(), blender::draw::extract_vert_normals(), blender::draw::extract_weights(), blender::gpu::MTLContext::get_dummy_texture(), blender::opensubdiv::EvalOutputAPI::getPatchMap(), GPU_batch_preset_quad(), gpu_batch_sphere(), GPU_batch_tris_from_poly_2d_encoded(), GPU_batch_unit_cube(), GPU_batch_wire_from_poly_2d_encoded(), GPU_vertbuf_create_on_device(), GPU_vertbuf_init_build_on_device(), gpu_viewport_batch_create(), blender::draw::grease_pencil_edit_batch_ensure(), blender::draw::grease_pencil_geom_batch_ensure(), blender::draw::grease_pencil_weight_batch_ensure(), immBeginBatch(), blender::draw::init_coarse_data(), blender::draw::init_empty_dummy_batch(), blender::draw::init_vbo_for_attribute(), knifetool_draw(), blender::draw::lattice_batch_cache_create_overlay_batches(), blender::draw::lattice_batch_cache_get_pos(), blender::ed::space_node::nodelink_batch_init(), blender::draw::particle_batch_cache_ensure_edit_inner_pos(), blender::draw::particle_batch_cache_ensure_edit_pos_and_seg(), blender::draw::particle_batch_cache_ensure_edit_tip_pos(), blender::draw::particle_batch_cache_ensure_pos(), blender::draw::particle_batch_cache_ensure_pos_and_seg(), blender::draw::pointcloud_extract_attribute(), blender::draw::pointcloud_extract_position_and_radius(), pygpu_vertbuf__tp_new(), blender::ed::vse::SeqQuadsBatch::SeqQuadsBatch(), stitch_draw(), blender::gpu::tests::test_buffer_texture(), blender::gpu::tests::test_shader_compute_vbo(), blender::gpu::tests::test_storage_buffer_copy_from_vertex_buffer(), ui_batch_roundbox_shadow_get(), ui_batch_roundbox_widget_get(), blender::gpu::tests::vertex_buffer_fetch_mode(), waveform_draw_one(), waveform_draw_rgb(), wm_gizmo_geometryinfo_draw(), and wm_xr_controller_model_batch_create().
| void GPU_vertbuf_data_len_set | ( | blender::gpu::VertBuf & | verts, |
| uint | v_len ) |
Set vertex count but does not change allocation. Only this many verts will be uploaded to the GPU and rendered. This is useful for streaming data.
Definition at line 181 of file gpu_vertex_buffer.cc.
References BLI_assert, and verts.
Referenced by blender::draw::init_empty_dummy_batch().
| void GPU_vertbuf_data_resize | ( | blender::gpu::VertBuf & | verts, |
| uint | v_len ) |
Resize buffer keeping existing data.
Definition at line 176 of file gpu_vertex_buffer.cc.
References verts.
Referenced by blender::draw::curve_create_edit_data_and_handles(), immEnd(), and blender::draw::particle_batch_cache_ensure_pos().
| void GPU_vertbuf_discard | ( | VertBuf * | verts | ) |
Definition at line 153 of file gpu_vertex_buffer.cc.
References verts.
Referenced by blender::draw::extract_edge_factor_subdiv(), blender::draw::extract_edituv_stretch_area_subdiv(), blender::draw::extract_lines_loose_geom_subdiv(), blender::draw::extract_sculpt_data_subdiv(), blender::draw::extract_tangents_subdiv(), blender::gpu::MTLContext::free_dummy_resources(), blender::gpu::VertBufDeleter::operator()(), pygpu_vertbuf__tp_dealloc(), blender::gpu::tests::test_buffer_texture(), blender::gpu::tests::test_shader_compute_vbo(), blender::gpu::tests::test_storage_buffer_copy_from_vertex_buffer(), and blender::opensubdiv::GPUVertexBuffer::~GPUVertexBuffer().
| const GPUVertFormat * GPU_vertbuf_get_format | ( | const VertBuf * | verts | ) |
Definition at line 264 of file gpu_vertex_buffer.cc.
References verts.
Referenced by blender::eevee::VelocityModule::geometry_steps_fill(), GPU_texture_create_from_vertbuf(), blender::gpu::MTLTexture::init_internal(), polyline_draw_workaround(), pygpu_vertbuf_attr_fill(), pygpu_vertbuf_fill(), and pygpu_vertbuf_fill_impl().
| uint GPU_vertbuf_get_memory_usage | ( | ) |
Definition at line 289 of file gpu_vertex_buffer.cc.
References blender::gpu::VertBuf::memory_usage.
| GPUVertBufStatus GPU_vertbuf_get_status | ( | const VertBuf * | verts | ) |
Definition at line 279 of file gpu_vertex_buffer.cc.
References verts.
Referenced by DRW_vbo_requested().
Definition at line 269 of file gpu_vertex_buffer.cc.
References verts.
Definition at line 274 of file gpu_vertex_buffer.cc.
References verts.
Referenced by blender::eevee::VelocityModule::end_sync(), blender::eevee::VelocityModule::geometry_steps_fill(), blender::opensubdiv::GPUVertexBuffer::GetNumVertices(), blender::draw::grease_pencil_wire_batch_ensure(), blender::gpu::Texture::init_buffer(), pygpu_batch_vertbuf_add(), and pygpu_vertbuf_fill_impl().
| void GPU_vertbuf_handle_ref_add | ( | blender::gpu::VertBuf * | verts | ) |
Avoid blender::gpu::VertBuf data-block being free but not its data.
Definition at line 159 of file gpu_vertex_buffer.cc.
References verts.
| void GPU_vertbuf_handle_ref_remove | ( | VertBuf * | verts | ) |
Definition at line 164 of file gpu_vertex_buffer.cc.
References verts.
| void GPU_vertbuf_init_build_on_device | ( | VertBuf & | verts, |
| const GPUVertFormat & | format, | ||
| uint | v_len ) |
Definition at line 130 of file gpu_vertex_buffer.cc.
References GPU_USAGE_DEVICE_ONLY, GPU_vertbuf_data_alloc(), GPU_vertbuf_init_with_format_ex(), and verts.
Referenced by blender::opensubdiv::GPUVertexBuffer::Create(), blender::draw::extract_edituv_stretch_angle_subdiv(), blender::draw::extract_sculpt_data_subdiv(), and blender::draw::init_vbo_for_attribute().
| void GPU_vertbuf_init_with_format_ex | ( | VertBuf & | verts, |
| const GPUVertFormat & | format, | ||
| GPUUsageType | usage ) |
Definition at line 123 of file gpu_vertex_buffer.cc.
References verts.
Referenced by blender::draw::draw_subdiv_cache_update_extra_coarse_face_data(), blender::draw::extract_tangents_subdiv(), GPU_vertbuf_init_build_on_device(), blender::draw::init_coarse_data(), blender::draw::pointcloud_extract_attribute(), and blender::draw::pointcloud_extract_position_and_radius().
| void GPU_vertbuf_read | ( | const blender::gpu::VertBuf * | verts, |
| void * | data ) |
(Download and) fill data with the data from the vertex buffer. NOTE: caller is responsible to reserve enough memory of the data parameter.
Definition at line 143 of file gpu_vertex_buffer.cc.
Referenced by blender::gpu::tests::test_shader_compute_vbo().
| void GPU_vertbuf_tag_dirty | ( | VertBuf * | verts | ) |
Definition at line 284 of file gpu_vertex_buffer.cc.
References GPU_VERTBUF_DATA_DIRTY, and verts.
Referenced by blender::ed::vse::SeqQuadsBatch::draw(), blender::draw::draw_subdiv_cache_update_extra_coarse_face_data(), blender::draw::extract_attribute_subdiv(), blender::draw::extract_tangents_subdiv(), blender::opensubdiv::GPUVertexBuffer::UpdateData(), and waveform_draw_rgb().
| void GPU_vertbuf_update_sub | ( | blender::gpu::VertBuf * | verts, |
| uint | start, | ||
| uint | len, | ||
| const void * | data ) |
XXX: do not use! This is just a wrapper for the use of the Hair refine workaround. To be used with GPU_vertbuf_use().
Definition at line 314 of file gpu_vertex_buffer.cc.
References data, len, and verts.
Referenced by blender::draw::extract_edge_factor_subdiv(), blender::draw::extract_loose_positions_subdiv(), blender::draw::update_loose_flags(), blender::draw::update_loose_normals(), and blender::opensubdiv::GPUVertexBuffer::UpdateData().
| void GPU_vertbuf_use | ( | blender::gpu::VertBuf * | verts | ) |
Should be rename to #GPU_vertbuf_data_upload.
Definition at line 294 of file gpu_vertex_buffer.cc.
References verts.
Referenced by blender::ed::vse::SeqQuadsBatch::draw(), blender::draw::extract_edge_factor_subdiv(), blender::draw::extract_loose_positions_subdiv(), blender::draw::pbvh::flush_vbo_data(), blender::draw::grease_pencil_edit_batch_ensure(), blender::draw::grease_pencil_geom_batch_ensure(), blender::draw::grease_pencil_weight_batch_ensure(), blender::draw::update_loose_flags(), blender::draw::update_loose_normals(), blender::opensubdiv::GPUVertexBuffer::UpdateData(), and waveform_draw_rgb().
| void GPU_vertbuf_vert_set | ( | blender::gpu::VertBuf * | verts, |
| uint | v_idx, | ||
| const void * | data ) |
Fills a whole vertex (all attributes). Data must match packed layout.
Definition at line 210 of file gpu_vertex_buffer.cc.
References BLI_assert, data, GPU_USAGE_DEVICE_ONLY, GPU_VERTBUF_DATA_DIRTY, and verts.
Referenced by GPU_batch_unit_cube(), blender::gpu::tests::test_storage_buffer_copy_from_vertex_buffer(), and blender::gpu::tests::vertex_buffer_fetch_mode().
Definition at line 299 of file gpu_vertex_buffer.cc.
References verts.