|
|
|
@ -29,13 +29,6 @@ static ID3D11ShaderResourceView*g_pFontTextureView = NULL; |
|
|
|
|
static ID3D11BlendState* g_blendState = NULL; |
|
|
|
|
static int VERTEX_BUFFER_SIZE = 30000; // TODO: Make vertex buffer smaller and grow dynamically as needed.
|
|
|
|
|
|
|
|
|
|
struct CUSTOMVERTEX |
|
|
|
|
{ |
|
|
|
|
float pos[2]; |
|
|
|
|
float uv[2]; |
|
|
|
|
unsigned int col; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct VERTEX_CONSTANT_BUFFER |
|
|
|
|
{ |
|
|
|
|
float mvp[4][4]; |
|
|
|
@ -50,21 +43,13 @@ static void ImGui_ImplDX11_RenderDrawLists(ImDrawList** const cmd_lists, int cmd |
|
|
|
|
D3D11_MAPPED_SUBRESOURCE mappedResource; |
|
|
|
|
if (g_pd3dDeviceContext->Map(g_pVB, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource) != S_OK) |
|
|
|
|
return; |
|
|
|
|
CUSTOMVERTEX* vtx_dst = (CUSTOMVERTEX*)mappedResource.pData; |
|
|
|
|
ImDrawVert* vtx_dst = (ImDrawVert*)mappedResource.pData; |
|
|
|
|
for (int n = 0; n < cmd_lists_count; n++) |
|
|
|
|
{ |
|
|
|
|
const ImDrawList* cmd_list = cmd_lists[n]; |
|
|
|
|
const ImDrawVert* vtx_src = &cmd_list->vtx_buffer[0]; |
|
|
|
|
for (size_t i = 0; i < cmd_list->vtx_buffer.size(); i++) |
|
|
|
|
{ |
|
|
|
|
vtx_dst->pos[0] = vtx_src->pos.x; |
|
|
|
|
vtx_dst->pos[1] = vtx_src->pos.y; |
|
|
|
|
vtx_dst->uv[0] = vtx_src->uv.x; |
|
|
|
|
vtx_dst->uv[1] = vtx_src->uv.y; |
|
|
|
|
vtx_dst->col = vtx_src->col; |
|
|
|
|
vtx_dst++; |
|
|
|
|
vtx_src++; |
|
|
|
|
} |
|
|
|
|
memcpy(vtx_dst, vtx_src, cmd_list->vtx_buffer.size() * sizeof(ImDrawVert)); |
|
|
|
|
vtx_dst += cmd_list->vtx_buffer.size(); |
|
|
|
|
} |
|
|
|
|
g_pd3dDeviceContext->Unmap(g_pVB, 0); |
|
|
|
|
|
|
|
|
@ -104,7 +89,7 @@ static void ImGui_ImplDX11_RenderDrawLists(ImDrawList** const cmd_lists, int cmd |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Bind shader and vertex buffers
|
|
|
|
|
unsigned int stride = sizeof(CUSTOMVERTEX); |
|
|
|
|
unsigned int stride = sizeof(ImDrawVert); |
|
|
|
|
unsigned int offset = 0; |
|
|
|
|
g_pd3dDeviceContext->IASetInputLayout(g_pInputLayout); |
|
|
|
|
g_pd3dDeviceContext->IASetVertexBuffers(0, 1, &g_pVB, &stride, &offset); |
|
|
|
@ -293,9 +278,9 @@ bool ImGui_ImplDX11_CreateDeviceObjects() |
|
|
|
|
|
|
|
|
|
// Create the input layout
|
|
|
|
|
D3D11_INPUT_ELEMENT_DESC localLayout[] = { |
|
|
|
|
{ "POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, (size_t)(&((CUSTOMVERTEX*)0)->pos), D3D11_INPUT_PER_VERTEX_DATA, 0 }, |
|
|
|
|
{ "COLOR", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, (size_t)(&((CUSTOMVERTEX*)0)->col), D3D11_INPUT_PER_VERTEX_DATA, 0 }, |
|
|
|
|
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, (size_t)(&((CUSTOMVERTEX*)0)->uv), D3D11_INPUT_PER_VERTEX_DATA, 0 }, |
|
|
|
|
{ "POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, (size_t)(&((ImDrawVert*)0)->pos), D3D11_INPUT_PER_VERTEX_DATA, 0 }, |
|
|
|
|
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, (size_t)(&((ImDrawVert*)0)->uv), D3D11_INPUT_PER_VERTEX_DATA, 0 }, |
|
|
|
|
{ "COLOR", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, (size_t)(&((ImDrawVert*)0)->col), D3D11_INPUT_PER_VERTEX_DATA, 0 }, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
if (g_pd3dDevice->CreateInputLayout(localLayout, 3, g_pVertexShaderBlob->GetBufferPointer(), g_pVertexShaderBlob->GetBufferSize(), &g_pInputLayout) != S_OK) |
|
|
|
@ -359,7 +344,7 @@ bool ImGui_ImplDX11_CreateDeviceObjects() |
|
|
|
|
D3D11_BUFFER_DESC bufferDesc; |
|
|
|
|
memset(&bufferDesc, 0, sizeof(D3D11_BUFFER_DESC)); |
|
|
|
|
bufferDesc.Usage = D3D11_USAGE_DYNAMIC; |
|
|
|
|
bufferDesc.ByteWidth = VERTEX_BUFFER_SIZE * sizeof(CUSTOMVERTEX); |
|
|
|
|
bufferDesc.ByteWidth = VERTEX_BUFFER_SIZE * sizeof(ImDrawVert); |
|
|
|
|
bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; |
|
|
|
|
bufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; |
|
|
|
|
bufferDesc.MiscFlags = 0; |
|
|
|
|