mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-10-26 12:27:30 +00:00 
			
		
		
		
	Backends: DX9: Fix potential resource leak (#4093)
This commit is contained in:
		 Hattrick HttrckCldHKS
					Hattrick HttrckCldHKS
				
			
				
					committed by
					
						 ocornut
						ocornut
					
				
			
			
				
	
			
			
			 ocornut
						ocornut
					
				
			
						parent
						
							ea9122b0ac
						
					
				
				
					commit
					a8dcab8e2a
				
			| @@ -157,16 +157,25 @@ void ImGui_ImplDX9_RenderDrawData(ImDrawData* draw_data) | |||||||
|     g_pd3dDevice->GetTransform(D3DTS_VIEW, &last_view); |     g_pd3dDevice->GetTransform(D3DTS_VIEW, &last_view); | ||||||
|     g_pd3dDevice->GetTransform(D3DTS_PROJECTION, &last_projection); |     g_pd3dDevice->GetTransform(D3DTS_PROJECTION, &last_projection); | ||||||
|  |  | ||||||
|  |     // Allocate buffers | ||||||
|  |     CUSTOMVERTEX* vtx_dst; | ||||||
|  |     ImDrawIdx* idx_dst; | ||||||
|  |     if (g_pVB->Lock(0, (UINT)(draw_data->TotalVtxCount * sizeof(CUSTOMVERTEX)), (void**)&vtx_dst, D3DLOCK_DISCARD) < 0) | ||||||
|  |     { | ||||||
|  |         d3d9_state_block->Release(); | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |     if (g_pIB->Lock(0, (UINT)(draw_data->TotalIdxCount * sizeof(ImDrawIdx)), (void**)&idx_dst, D3DLOCK_DISCARD) < 0) | ||||||
|  |     { | ||||||
|  |         g_pVB->Unlock(); | ||||||
|  |         d3d9_state_block->Release(); | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     // Copy and convert all vertices into a single contiguous buffer, convert colors to DX9 default format. |     // Copy and convert all vertices into a single contiguous buffer, convert colors to DX9 default format. | ||||||
|     // FIXME-OPT: This is a minor waste of resource, the ideal is to use imconfig.h and |     // FIXME-OPT: This is a minor waste of resource, the ideal is to use imconfig.h and | ||||||
|     //  1) to avoid repacking colors:   #define IMGUI_USE_BGRA_PACKED_COLOR |     //  1) to avoid repacking colors:   #define IMGUI_USE_BGRA_PACKED_COLOR | ||||||
|     //  2) to avoid repacking vertices: #define IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT struct ImDrawVert { ImVec2 pos; float z; ImU32 col; ImVec2 uv; } |     //  2) to avoid repacking vertices: #define IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT struct ImDrawVert { ImVec2 pos; float z; ImU32 col; ImVec2 uv; } | ||||||
|     CUSTOMVERTEX* vtx_dst; |  | ||||||
|     ImDrawIdx* idx_dst; |  | ||||||
|     if (g_pVB->Lock(0, (UINT)(draw_data->TotalVtxCount * sizeof(CUSTOMVERTEX)), (void**)&vtx_dst, D3DLOCK_DISCARD) < 0) |  | ||||||
|         return; |  | ||||||
|     if (g_pIB->Lock(0, (UINT)(draw_data->TotalIdxCount * sizeof(ImDrawIdx)), (void**)&idx_dst, D3DLOCK_DISCARD) < 0) |  | ||||||
|         return; |  | ||||||
|     for (int n = 0; n < draw_data->CmdListsCount; n++) |     for (int n = 0; n < draw_data->CmdListsCount; n++) | ||||||
|     { |     { | ||||||
|         const ImDrawList* cmd_list = draw_data->CmdLists[n]; |         const ImDrawList* cmd_list = draw_data->CmdLists[n]; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user