mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-10-26 12:27:30 +00:00 
			
		
		
		
	Examples: DirectX11: Removed unnecessary vertices conversion and CUSTOMVERTEX types.
This commit is contained in:
		| @@ -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; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 ocornut
					ocornut