mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 21:21:06 +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, | - 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). |   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. | - 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), | - 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 |   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 |   enabled back by using '#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS' in imconfig.h. Re-added | ||||||
|   | |||||||
| @@ -11,6 +11,7 @@ | |||||||
|  |  | ||||||
| // CHANGELOG | // CHANGELOG | ||||||
| // (minor and older changes stripped away, please see git history for details) | // (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-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. | //  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(). | //  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->VSSetConstantBuffers(0, 1, &g_pVertexConstantBuffer); | ||||||
|     ctx->PSSetShader(g_pPixelShader); |     ctx->PSSetShader(g_pPixelShader); | ||||||
|     ctx->PSSetSamplers(0, 1, &g_pFontSampler); |     ctx->PSSetSamplers(0, 1, &g_pFontSampler); | ||||||
|  |     ctx->GSSetShader(NULL); | ||||||
|  |  | ||||||
|     // Setup render state |     // Setup render state | ||||||
|     const float blend_factor[4] = { 0.f, 0.f, 0.f, 0.f }; |     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; |         ID3D10SamplerState*         PSSampler; | ||||||
|         ID3D10PixelShader*          PS; |         ID3D10PixelShader*          PS; | ||||||
|         ID3D10VertexShader*         VS; |         ID3D10VertexShader*         VS; | ||||||
|  |         ID3D10GeometryShader*       GS; | ||||||
|         D3D10_PRIMITIVE_TOPOLOGY    PrimitiveTopology; |         D3D10_PRIMITIVE_TOPOLOGY    PrimitiveTopology; | ||||||
|         ID3D10Buffer*               IndexBuffer, *VertexBuffer, *VSConstantBuffer; |         ID3D10Buffer*               IndexBuffer, *VertexBuffer, *VSConstantBuffer; | ||||||
|         UINT                        IndexBufferOffset, VertexBufferStride, VertexBufferOffset; |         UINT                        IndexBufferOffset, VertexBufferStride, VertexBufferOffset; | ||||||
| @@ -201,6 +204,7 @@ void ImGui_ImplDX10_RenderDrawData(ImDrawData* draw_data) | |||||||
|     ctx->PSGetShader(&old.PS); |     ctx->PSGetShader(&old.PS); | ||||||
|     ctx->VSGetShader(&old.VS); |     ctx->VSGetShader(&old.VS); | ||||||
|     ctx->VSGetConstantBuffers(0, 1, &old.VSConstantBuffer); |     ctx->VSGetConstantBuffers(0, 1, &old.VSConstantBuffer); | ||||||
|  |     ctx->GSGetShader(&old.GS); | ||||||
|     ctx->IAGetPrimitiveTopology(&old.PrimitiveTopology); |     ctx->IAGetPrimitiveTopology(&old.PrimitiveTopology); | ||||||
|     ctx->IAGetIndexBuffer(&old.IndexBuffer, &old.IndexBufferFormat, &old.IndexBufferOffset); |     ctx->IAGetIndexBuffer(&old.IndexBuffer, &old.IndexBufferFormat, &old.IndexBufferOffset); | ||||||
|     ctx->IAGetVertexBuffers(0, 1, &old.VertexBuffer, &old.VertexBufferStride, &old.VertexBufferOffset); |     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->PSSetSamplers(0, 1, &old.PSSampler); if (old.PSSampler) old.PSSampler->Release(); | ||||||
|     ctx->PSSetShader(old.PS); if (old.PS) old.PS->Release(); |     ctx->PSSetShader(old.PS); if (old.PS) old.PS->Release(); | ||||||
|     ctx->VSSetShader(old.VS); if (old.VS) old.VS->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->VSSetConstantBuffers(0, 1, &old.VSConstantBuffer); if (old.VSConstantBuffer) old.VSConstantBuffer->Release(); | ||||||
|     ctx->IASetPrimitiveTopology(old.PrimitiveTopology); |     ctx->IASetPrimitiveTopology(old.PrimitiveTopology); | ||||||
|     ctx->IASetIndexBuffer(old.IndexBuffer, old.IndexBufferFormat, old.IndexBufferOffset); if (old.IndexBuffer) old.IndexBuffer->Release(); |     ctx->IASetIndexBuffer(old.IndexBuffer, old.IndexBufferFormat, old.IndexBufferOffset); if (old.IndexBuffer) old.IndexBuffer->Release(); | ||||||
|   | |||||||
| @@ -11,6 +11,7 @@ | |||||||
|  |  | ||||||
| // CHANGELOG | // CHANGELOG | ||||||
| // (minor and older changes stripped away, please see git history for details) | // (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-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. | //  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(). | //  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->VSSetConstantBuffers(0, 1, &g_pVertexConstantBuffer); | ||||||
|     ctx->PSSetShader(g_pPixelShader, NULL, 0); |     ctx->PSSetShader(g_pPixelShader, NULL, 0); | ||||||
|     ctx->PSSetSamplers(0, 1, &g_pFontSampler); |     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 |     // Setup blend state | ||||||
|     const float blend_factor[4] = { 0.f, 0.f, 0.f, 0.f }; |     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; |         ID3D11SamplerState*         PSSampler; | ||||||
|         ID3D11PixelShader*          PS; |         ID3D11PixelShader*          PS; | ||||||
|         ID3D11VertexShader*         VS; |         ID3D11VertexShader*         VS; | ||||||
|         UINT                        PSInstancesCount, VSInstancesCount; |         ID3D11GeometryShader*       GS; | ||||||
|         ID3D11ClassInstance*        PSInstances[256], *VSInstances[256];   // 256 is max according to PSSetShader documentation |         UINT                        PSInstancesCount, VSInstancesCount, GSInstancesCount; | ||||||
|  |         ID3D11ClassInstance         *PSInstances[256], *VSInstances[256], *GSInstances[256];   // 256 is max according to PSSetShader documentation | ||||||
|         D3D11_PRIMITIVE_TOPOLOGY    PrimitiveTopology; |         D3D11_PRIMITIVE_TOPOLOGY    PrimitiveTopology; | ||||||
|         ID3D11Buffer*               IndexBuffer, *VertexBuffer, *VSConstantBuffer; |         ID3D11Buffer*               IndexBuffer, *VertexBuffer, *VSConstantBuffer; | ||||||
|         UINT                        IndexBufferOffset, VertexBufferStride, VertexBufferOffset; |         UINT                        IndexBufferOffset, VertexBufferStride, VertexBufferOffset; | ||||||
| @@ -206,6 +212,8 @@ void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data) | |||||||
|     ctx->PSGetShader(&old.PS, old.PSInstances, &old.PSInstancesCount); |     ctx->PSGetShader(&old.PS, old.PSInstances, &old.PSInstancesCount); | ||||||
|     ctx->VSGetShader(&old.VS, old.VSInstances, &old.VSInstancesCount); |     ctx->VSGetShader(&old.VS, old.VSInstances, &old.VSInstancesCount); | ||||||
|     ctx->VSGetConstantBuffers(0, 1, &old.VSConstantBuffer); |     ctx->VSGetConstantBuffers(0, 1, &old.VSConstantBuffer); | ||||||
|  |     ctx->GSGetShader(&old.GS, old.GSInstances, &old.GSInstancesCount); | ||||||
|  |  | ||||||
|     ctx->IAGetPrimitiveTopology(&old.PrimitiveTopology); |     ctx->IAGetPrimitiveTopology(&old.PrimitiveTopology); | ||||||
|     ctx->IAGetIndexBuffer(&old.IndexBuffer, &old.IndexBufferFormat, &old.IndexBufferOffset); |     ctx->IAGetIndexBuffer(&old.IndexBuffer, &old.IndexBufferFormat, &old.IndexBufferOffset); | ||||||
|     ctx->IAGetVertexBuffers(0, 1, &old.VertexBuffer, &old.VertexBufferStride, &old.VertexBufferOffset); |     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(); |     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->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->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(); |     for (UINT i = 0; i < old.VSInstancesCount; i++) if (old.VSInstances[i]) old.VSInstances[i]->Release(); | ||||||
|     ctx->IASetPrimitiveTopology(old.PrimitiveTopology); |     ctx->IASetPrimitiveTopology(old.PrimitiveTopology); | ||||||
|     ctx->IASetIndexBuffer(old.IndexBuffer, old.IndexBufferFormat, old.IndexBufferOffset); if (old.IndexBuffer) old.IndexBuffer->Release(); |     ctx->IASetIndexBuffer(old.IndexBuffer, old.IndexBufferFormat, old.IndexBufferOffset); if (old.IndexBuffer) old.IndexBuffer->Release(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user