don't create empty vertex / index buffers

This commit is contained in:
jacob 2025-01-21 15:27:16 -06:00
parent d4387a873a
commit d4327eb7bb

View File

@ -995,8 +995,8 @@ void renderer_cmd_buffer_send_to_gpu(struct renderer_cmd_buffer *cmdbuff)
continue; continue;
} }
/* Create / grow vertex buffer */ /* Grow vertex buffer */
if (!buffer->gpu_vertex_buffer || buffer->gpu_vertex_buffer_capacity < buffer->vertex_count) { if (buffer->gpu_vertex_buffer_capacity < buffer->vertex_count) {
buffer->gpu_vertex_buffer_capacity = buffer->vertex_count + 5000; buffer->gpu_vertex_buffer_capacity = buffer->vertex_count + 5000;
D3D11_BUFFER_DESC desc = { D3D11_BUFFER_DESC desc = {
.Usage = D3D11_USAGE_DYNAMIC, .Usage = D3D11_USAGE_DYNAMIC,
@ -1008,8 +1008,8 @@ void renderer_cmd_buffer_send_to_gpu(struct renderer_cmd_buffer *cmdbuff)
ID3D11Device_CreateBuffer(G.dev, &desc, NULL, &buffer->gpu_vertex_buffer); ID3D11Device_CreateBuffer(G.dev, &desc, NULL, &buffer->gpu_vertex_buffer);
} }
/* Create / grow index buffer */ /* Grow index buffer */
if (!buffer->gpu_index_buffer || buffer->gpu_index_buffer_capacity < buffer->index_count) { if (buffer->gpu_index_buffer_capacity < buffer->index_count) {
buffer->gpu_index_buffer_capacity = buffer->index_count + 5000; buffer->gpu_index_buffer_capacity = buffer->index_count + 5000;
D3D11_BUFFER_DESC desc = { D3D11_BUFFER_DESC desc = {
.Usage = D3D11_USAGE_DYNAMIC, .Usage = D3D11_USAGE_DYNAMIC,
@ -1021,14 +1021,21 @@ void renderer_cmd_buffer_send_to_gpu(struct renderer_cmd_buffer *cmdbuff)
ID3D11Device_CreateBuffer(G.dev, &desc, NULL, &buffer->gpu_index_buffer); ID3D11Device_CreateBuffer(G.dev, &desc, NULL, &buffer->gpu_index_buffer);
} }
/* Copy data to GPU */ /* Fill GPU vertex buffer */
D3D11_MAPPED_SUBRESOURCE vtx_resource, idx_resource; if (buffer->gpu_vertex_buffer) {
ID3D11DeviceContext_Map(G.devcon, (ID3D11Resource *)buffer->gpu_vertex_buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &vtx_resource); D3D11_MAPPED_SUBRESOURCE res;
ID3D11DeviceContext_Map(G.devcon, (ID3D11Resource *)buffer->gpu_index_buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &idx_resource); ID3D11DeviceContext_Map(G.devcon, (ID3D11Resource *)buffer->gpu_vertex_buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &res);
MEMCPY(vtx_resource.pData, buffer->cpu_vertex_buffer, buffer->vertex_count * vertex_size); MEMCPY(res.pData, buffer->cpu_vertex_buffer, buffer->vertex_count * vertex_size);
MEMCPY(idx_resource.pData, buffer->cpu_index_buffer, buffer->index_count * index_size);
ID3D11DeviceContext_Unmap(G.devcon, (ID3D11Resource *)buffer->gpu_vertex_buffer, 0); ID3D11DeviceContext_Unmap(G.devcon, (ID3D11Resource *)buffer->gpu_vertex_buffer, 0);
}
/* Fill GPU index buffer */
if (buffer->gpu_index_buffer) {
D3D11_MAPPED_SUBRESOURCE res;
ID3D11DeviceContext_Map(G.devcon, (ID3D11Resource *)buffer->gpu_index_buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &res);
MEMCPY(res.pData, buffer->cpu_index_buffer, buffer->index_count * index_size);
ID3D11DeviceContext_Unmap(G.devcon, (ID3D11Resource *)buffer->gpu_index_buffer, 0); ID3D11DeviceContext_Unmap(G.devcon, (ID3D11Resource *)buffer->gpu_index_buffer, 0);
}
/* Reset CPU buffers */ /* Reset CPU buffers */
buffer->vertex_count = 0; buffer->vertex_count = 0;