d3d11screencapture: Set viewport when drawing mouse cursor
authorJakub Adam <jakub.adam@collabora.com>
Fri, 29 Apr 2022 18:28:53 +0000 (20:28 +0200)
committerJakub Adam <jakub.adam@collabora.com>
Wed, 4 May 2022 15:18:32 +0000 (17:18 +0200)
If there weren't any moved/dirty regions in the captured frame, the
viewport of the ID3D11DeviceContext would be left at whatever previous
value it had, which could lead to the cursor being drawn in a wrong
position and/or in an incorrect size.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2362>

subprojects/gst-plugins-bad/sys/d3d11/gstd3d11screencapture.cpp

index 56669f2..f1647e7 100644 (file)
@@ -516,6 +516,15 @@ public:
     context_handle->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
     context_handle->IASetInputLayout(layout_.Get());
 
+    D3D11_VIEWPORT VP;
+    VP.Width = static_cast<FLOAT>(FullDesc.Width);
+    VP.Height = static_cast<FLOAT>(FullDesc.Height);
+    VP.MinDepth = 0.0f;
+    VP.MaxDepth = 1.0f;
+    VP.TopLeftX = 0.0f;
+    VP.TopLeftY = 0.0f;
+    context_handle->RSSetViewports(1, &VP);
+
     context_handle->Draw(NUMVERTICES, 0);
 
     /* Unbind srv and rtv from context */