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;
|
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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user