/
d.vision
/
division_engine_core
Обзор
Документация
Войти
/
d.vision
/
division_engine_core
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/uniform_buffer.c
89 строк
3 KB
Den163
Renamed all division_engine to division for convenient typing
20 май 2025, 00:20
20 май 2025, 00:20
683494c
Код
Авторство
О чём код?
#include "division_engine_core/uniform_buffer.h" #include "division_engine_core/uniform_buffer_internal.h" #include "division_engine_core/platform_internal/platform_uniform_buffer.h" #include <stdlib.h> bool division_uniform_buffer_context_alloc( DivisionContext* ctx, const DivisionSettings* settings ) { ctx->uniform_buffer_context = malloc(sizeof(DivisionUniformBufferContext)); *ctx->uniform_buffer_context = (DivisionUniformBufferContext ){.uniform_buffers = NULL, .uniform_buffer_count = 0}; division_unordered_id_table_alloc(&ctx->uniform_buffer_context->id_table, 10); return division_internal_platform_uniform_buffer_context_alloc(ctx, settings); } void division_uniform_buffer_context_free(DivisionContext* ctx) { division_internal_platform_uniform_buffer_context_free(ctx); division_unordered_id_table_free(&ctx->uniform_buffer_context->id_table); free(ctx->uniform_buffer_context->uniform_buffers); free(ctx->uniform_buffer_context); } bool division_uniform_buffer_alloc( DivisionContext* ctx, DivisionUniformBufferDescriptor buffer, uint32_t* out_buffer_id ) { DivisionUniformBufferContext* uniform_buffer_ctx = ctx->uniform_buffer_context; const uint32_t buff_id = division_unordered_id_table_new_id(&uniform_buffer_ctx->id_table); if (buff_id >= uniform_buffer_ctx->uniform_buffer_count) { uint32_t new_buffers_count = buff_id + 1; uniform_buffer_ctx->uniform_buffer_count = new_buffers_count; uniform_buffer_ctx->uniform_buffers = realloc( uniform_buffer_ctx->uniform_buffers, sizeof(DivisionUniformBufferDescriptor) * new_buffers_count ); if (uniform_buffer_ctx->uniform_buffers == NULL || !division_internal_platform_uniform_buffer_realloc( ctx, new_buffers_count )) { ctx->lifecycle.error_callback( ctx, DIVISION_INTERNAL_ERROR, "Failed to reallocate Uniform Buffers array" ); division_unordered_id_table_remove_id(&uniform_buffer_ctx->id_table, buff_id); return false; } } *out_buffer_id = buff_id; uniform_buffer_ctx->uniform_buffers[buff_id] = buffer; return division_internal_platform_uniform_buffer_impl_init_element( ctx, buff_id ); } void division_uniform_buffer_free(DivisionContext* ctx, uint32_t buffer_id) { division_internal_platform_uniform_buffer_free(ctx, buffer_id); division_unordered_id_table_remove_id(&ctx->uniform_buffer_context->id_table, buffer_id); } void* division_uniform_buffer_borrow_data_pointer( DivisionContext* ctx, uint32_t buffer_id ) { return division_internal_platform_uniform_buffer_borrow_data_pointer( ctx, buffer_id ); } void division_uniform_buffer_return_data_pointer( DivisionContext* ctx, uint32_t buffer_id, void* data_pointer ) { division_internal_platform_uniform_buffer_return_data_pointer( ctx, buffer_id, data_pointer ); }