don't create empty vertex / index buffers
This commit is contained in:
parent
d4387a873a
commit
d4327eb7bb
@ -995,8 +995,8 @@ void renderer_cmd_buffer_send_to_gpu(struct renderer_cmd_buffer *cmdbuff)
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Create / grow vertex buffer */
|
||||
if (!buffer->gpu_vertex_buffer || buffer->gpu_vertex_buffer_capacity < buffer->vertex_count) {
|
||||
/* Grow vertex buffer */
|
||||
if (buffer->gpu_vertex_buffer_capacity < buffer->vertex_count) {
|
||||
buffer->gpu_vertex_buffer_capacity = buffer->vertex_count + 5000;
|
||||
D3D11_BUFFER_DESC desc = {
|
||||
.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);
|
||||
}
|
||||
|
||||
/* Create / grow index buffer */
|
||||
if (!buffer->gpu_index_buffer || buffer->gpu_index_buffer_capacity < buffer->index_count) {
|
||||
/* Grow index buffer */
|
||||
if (buffer->gpu_index_buffer_capacity < buffer->index_count) {
|
||||
buffer->gpu_index_buffer_capacity = buffer->index_count + 5000;
|
||||
D3D11_BUFFER_DESC desc = {
|
||||
.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);
|
||||
}
|
||||
|
||||
/* Copy data to GPU */
|
||||
D3D11_MAPPED_SUBRESOURCE vtx_resource, idx_resource;
|
||||
ID3D11DeviceContext_Map(G.devcon, (ID3D11Resource *)buffer->gpu_vertex_buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &vtx_resource);
|
||||
ID3D11DeviceContext_Map(G.devcon, (ID3D11Resource *)buffer->gpu_index_buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &idx_resource);
|
||||
MEMCPY(vtx_resource.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_index_buffer, 0);
|
||||
/* Fill GPU vertex buffer */
|
||||
if (buffer->gpu_vertex_buffer) {
|
||||
D3D11_MAPPED_SUBRESOURCE res;
|
||||
ID3D11DeviceContext_Map(G.devcon, (ID3D11Resource *)buffer->gpu_vertex_buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &res);
|
||||
MEMCPY(res.pData, buffer->cpu_vertex_buffer, buffer->vertex_count * vertex_size);
|
||||
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);
|
||||
}
|
||||
|
||||
/* Reset CPU buffers */
|
||||
buffer->vertex_count = 0;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user