mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	Backends: DX10/DX11: Backup, clear and restore Geometry Shader is any is bound when calling renderer.
Backends: DX11: Clear Hull Shader, Domain Shader, Compute Shader before rendering. Not backing/restoring them.
This commit is contained in:
		| @@ -85,6 +85,8 @@ Other Changes: | ||||
| - ImDrawListSplitter: Fixed memory leak when using low-level split api (was not affecting ImDrawList api, | ||||
|   also this type was added in 1.71 and not advertised as a public-facing feature). | ||||
| - Fonts: binary_to_compressed_c.cpp: Display an error message if failing to open/read the input font file. | ||||
| - Backends: DX10/DX11: Backup, clear and restore Geometry Shader is any is bound when calling renderer. | ||||
| - Backends: DX11: Clear Hull Shader, Domain Shader, Compute Shader before rendering. Not backing/restoring them. | ||||
| - Backends: OSX: Disabled default native Mac clipboard copy/paste implementation in core library (added in 1.71), | ||||
|   because it needs application to be linked with '-framework ApplicationServices'. It can be explicitly | ||||
|   enabled back by using '#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS' in imconfig.h. Re-added | ||||
|   | ||||
| @@ -11,6 +11,7 @@ | ||||
|  | ||||
| // CHANGELOG | ||||
| // (minor and older changes stripped away, please see git history for details) | ||||
| //  2019-07-21: DirectX10: Backup, clear and restore Geometry Shader is any is bound when calling ImGui_ImplDX10_RenderDrawData(). | ||||
| //  2019-05-29: DirectX10: Added support for large mesh (64K+ vertices), enable ImGuiBackendFlags_RendererHasVtxOffset flag. | ||||
| //  2019-04-30: DirectX10: Added support for special ImDrawCallback_ResetRenderState callback to reset render state. | ||||
| //  2018-12-03: Misc: Added #pragma comment statement to automatically link with d3dcompiler.lib when using D3DCompile(). | ||||
| @@ -81,6 +82,7 @@ static void ImGui_ImplDX10_SetupRenderState(ImDrawData* draw_data, ID3D10Device* | ||||
|     ctx->VSSetConstantBuffers(0, 1, &g_pVertexConstantBuffer); | ||||
|     ctx->PSSetShader(g_pPixelShader); | ||||
|     ctx->PSSetSamplers(0, 1, &g_pFontSampler); | ||||
|     ctx->GSSetShader(NULL); | ||||
|  | ||||
|     // Setup render state | ||||
|     const float blend_factor[4] = { 0.f, 0.f, 0.f, 0.f }; | ||||
| @@ -183,6 +185,7 @@ void ImGui_ImplDX10_RenderDrawData(ImDrawData* draw_data) | ||||
|         ID3D10SamplerState*         PSSampler; | ||||
|         ID3D10PixelShader*          PS; | ||||
|         ID3D10VertexShader*         VS; | ||||
|         ID3D10GeometryShader*       GS; | ||||
|         D3D10_PRIMITIVE_TOPOLOGY    PrimitiveTopology; | ||||
|         ID3D10Buffer*               IndexBuffer, *VertexBuffer, *VSConstantBuffer; | ||||
|         UINT                        IndexBufferOffset, VertexBufferStride, VertexBufferOffset; | ||||
| @@ -201,6 +204,7 @@ void ImGui_ImplDX10_RenderDrawData(ImDrawData* draw_data) | ||||
|     ctx->PSGetShader(&old.PS); | ||||
|     ctx->VSGetShader(&old.VS); | ||||
|     ctx->VSGetConstantBuffers(0, 1, &old.VSConstantBuffer); | ||||
|     ctx->GSGetShader(&old.GS); | ||||
|     ctx->IAGetPrimitiveTopology(&old.PrimitiveTopology); | ||||
|     ctx->IAGetIndexBuffer(&old.IndexBuffer, &old.IndexBufferFormat, &old.IndexBufferOffset); | ||||
|     ctx->IAGetVertexBuffers(0, 1, &old.VertexBuffer, &old.VertexBufferStride, &old.VertexBufferOffset); | ||||
| @@ -255,6 +259,7 @@ void ImGui_ImplDX10_RenderDrawData(ImDrawData* draw_data) | ||||
|     ctx->PSSetSamplers(0, 1, &old.PSSampler); if (old.PSSampler) old.PSSampler->Release(); | ||||
|     ctx->PSSetShader(old.PS); if (old.PS) old.PS->Release(); | ||||
|     ctx->VSSetShader(old.VS); if (old.VS) old.VS->Release(); | ||||
|     ctx->GSSetShader(old.GS); if (old.GS) old.GS->Release(); | ||||
|     ctx->VSSetConstantBuffers(0, 1, &old.VSConstantBuffer); if (old.VSConstantBuffer) old.VSConstantBuffer->Release(); | ||||
|     ctx->IASetPrimitiveTopology(old.PrimitiveTopology); | ||||
|     ctx->IASetIndexBuffer(old.IndexBuffer, old.IndexBufferFormat, old.IndexBufferOffset); if (old.IndexBuffer) old.IndexBuffer->Release(); | ||||
|   | ||||
| @@ -11,6 +11,7 @@ | ||||
|  | ||||
| // CHANGELOG | ||||
| // (minor and older changes stripped away, please see git history for details) | ||||
| //  2019-07-21: DirectX11: Backup, clear and restore Geometry Shader is any is bound when calling ImGui_ImplDX10_RenderDrawData. Clearing Hull/Domain/Compute shaders without backup/restore. | ||||
| //  2019-05-29: DirectX11: Added support for large mesh (64K+ vertices), enable ImGuiBackendFlags_RendererHasVtxOffset flag. | ||||
| //  2019-04-30: DirectX11: Added support for special ImDrawCallback_ResetRenderState callback to reset render state. | ||||
| //  2018-12-03: Misc: Added #pragma comment statement to automatically link with d3dcompiler.lib when using D3DCompile(). | ||||
| @@ -81,6 +82,10 @@ static void ImGui_ImplDX11_SetupRenderState(ImDrawData* draw_data, ID3D11DeviceC | ||||
|     ctx->VSSetConstantBuffers(0, 1, &g_pVertexConstantBuffer); | ||||
|     ctx->PSSetShader(g_pPixelShader, NULL, 0); | ||||
|     ctx->PSSetSamplers(0, 1, &g_pFontSampler); | ||||
|     ctx->GSSetShader(NULL, NULL, 0); | ||||
|     ctx->HSSetShader(NULL, NULL, 0); // In theory we should backup and restore this as well.. very infrequently used.. | ||||
|     ctx->DSSetShader(NULL, NULL, 0); // In theory we should backup and restore this as well.. very infrequently used.. | ||||
|     ctx->CSSetShader(NULL, NULL, 0); // In theory we should backup and restore this as well.. very infrequently used.. | ||||
|  | ||||
|     // Setup blend state | ||||
|     const float blend_factor[4] = { 0.f, 0.f, 0.f, 0.f }; | ||||
| @@ -185,8 +190,9 @@ void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data) | ||||
|         ID3D11SamplerState*         PSSampler; | ||||
|         ID3D11PixelShader*          PS; | ||||
|         ID3D11VertexShader*         VS; | ||||
|         UINT                        PSInstancesCount, VSInstancesCount; | ||||
|         ID3D11ClassInstance*        PSInstances[256], *VSInstances[256];   // 256 is max according to PSSetShader documentation | ||||
|         ID3D11GeometryShader*       GS; | ||||
|         UINT                        PSInstancesCount, VSInstancesCount, GSInstancesCount; | ||||
|         ID3D11ClassInstance         *PSInstances[256], *VSInstances[256], *GSInstances[256];   // 256 is max according to PSSetShader documentation | ||||
|         D3D11_PRIMITIVE_TOPOLOGY    PrimitiveTopology; | ||||
|         ID3D11Buffer*               IndexBuffer, *VertexBuffer, *VSConstantBuffer; | ||||
|         UINT                        IndexBufferOffset, VertexBufferStride, VertexBufferOffset; | ||||
| @@ -206,6 +212,8 @@ void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data) | ||||
|     ctx->PSGetShader(&old.PS, old.PSInstances, &old.PSInstancesCount); | ||||
|     ctx->VSGetShader(&old.VS, old.VSInstances, &old.VSInstancesCount); | ||||
|     ctx->VSGetConstantBuffers(0, 1, &old.VSConstantBuffer); | ||||
|     ctx->GSGetShader(&old.GS, old.GSInstances, &old.GSInstancesCount); | ||||
|  | ||||
|     ctx->IAGetPrimitiveTopology(&old.PrimitiveTopology); | ||||
|     ctx->IAGetIndexBuffer(&old.IndexBuffer, &old.IndexBufferFormat, &old.IndexBufferOffset); | ||||
|     ctx->IAGetVertexBuffers(0, 1, &old.VertexBuffer, &old.VertexBufferStride, &old.VertexBufferOffset); | ||||
| @@ -262,6 +270,7 @@ void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data) | ||||
|     for (UINT i = 0; i < old.PSInstancesCount; i++) if (old.PSInstances[i]) old.PSInstances[i]->Release(); | ||||
|     ctx->VSSetShader(old.VS, old.VSInstances, old.VSInstancesCount); if (old.VS) old.VS->Release(); | ||||
|     ctx->VSSetConstantBuffers(0, 1, &old.VSConstantBuffer); if (old.VSConstantBuffer) old.VSConstantBuffer->Release(); | ||||
|     ctx->GSSetShader(old.GS, old.GSInstances, old.GSInstancesCount); if (old.GS) old.GS->Release(); | ||||
|     for (UINT i = 0; i < old.VSInstancesCount; i++) if (old.VSInstances[i]) old.VSInstances[i]->Release(); | ||||
|     ctx->IASetPrimitiveTopology(old.PrimitiveTopology); | ||||
|     ctx->IASetIndexBuffer(old.IndexBuffer, old.IndexBufferFormat, old.IndexBufferOffset); if (old.IndexBuffer) old.IndexBuffer->Release(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user