MCPcopy Create free account
hub / github.com/Redot-Engine/redot-engine / vertex_buffer_create

Method vertex_buffer_create

servers/rendering/rendering_device.cpp:3162–3196  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3160/***********************/
3161
3162RID RenderingDevice::vertex_buffer_create(uint32_t p_size_bytes, Span<uint8_t> p_data, BitField<BufferCreationBits> p_creation_bits) {
3163 ERR_FAIL_COND_V(p_data.size() && (uint32_t)p_data.size() != p_size_bytes, RID());
3164
3165 Buffer buffer;
3166 buffer.size = p_size_bytes;
3167 buffer.usage = RDD::BUFFER_USAGE_TRANSFER_FROM_BIT | RDD::BUFFER_USAGE_TRANSFER_TO_BIT | RDD::BUFFER_USAGE_VERTEX_BIT;
3168 if (p_creation_bits.has_flag(BUFFER_CREATION_AS_STORAGE_BIT)) {
3169 buffer.usage.set_flag(RDD::BUFFER_USAGE_STORAGE_BIT);
3170 }
3171 if (p_creation_bits.has_flag(BUFFER_CREATION_DEVICE_ADDRESS_BIT)) {
3172 buffer.usage.set_flag(RDD::BUFFER_USAGE_DEVICE_ADDRESS_BIT);
3173 }
3174 buffer.driver_id = driver->buffer_create(buffer.size, buffer.usage, RDD::MEMORY_ALLOCATION_TYPE_GPU);
3175 ERR_FAIL_COND_V(!buffer.driver_id, RID());
3176
3177 // Vertex buffers are assumed to be immutable unless they don't have initial data or they've been marked for storage explicitly.
3178 if (p_data.is_empty() || p_creation_bits.has_flag(BUFFER_CREATION_AS_STORAGE_BIT)) {
3179 buffer.draw_tracker = RDG::resource_tracker_create();
3180 buffer.draw_tracker->buffer_driver_id = buffer.driver_id;
3181 }
3182
3183 if (p_data.size()) {
3184 _buffer_initialize(&buffer, p_data);
3185 }
3186
3187 _THREAD_SAFE_LOCK_
3188 buffer_memory += buffer.size;
3189 _THREAD_SAFE_UNLOCK_
3190
3191 RID id = vertex_buffer_owner.make_rid(buffer);
3192#ifdef DEV_ENABLED
3193 set_resource_name(id, "RID:" + itos(id.get_id()));
3194#endif
3195 return id;
3196}
3197
3198// Internally reference counted, this ID is warranted to be unique for the same description, but needs to be freed as many times as it was allocated.
3199RenderingDevice::VertexFormatID RenderingDevice::vertex_format_create(const Vector<VertexAttribute> &p_vertex_descriptions) {

Callers 7

request_polygonMethod · 0.80
MeshStorageMethod · 0.80
mesh_add_surfaceMethod · 0.80

Calls 9

RIDClass · 0.85
itosFunction · 0.85
sizeMethod · 0.65
has_flagMethod · 0.45
set_flagMethod · 0.45
buffer_createMethod · 0.45
is_emptyMethod · 0.45
make_ridMethod · 0.45
get_idMethod · 0.45

Tested by

no test coverage detected