@@ -260,24 +260,24 @@ void CursorDrawer::Draw(ID3D11Texture2D* backBuffer, POINT drawOffset) noexcept
260260 _tempCursorTextureSize = cursorSize;
261261 }
262262
263- D3D11_BOX srcBox {
264- UINT ( std::max (cursorRect. left , viewportRect. left ) + drawOffset. x ),
265- UINT (std::max (cursorRect.top , viewportRect.top ) + drawOffset.y ),
266- 0 ,
267- UINT ( std::min (cursorRect. right , viewportRect. right ) + drawOffset. x ) ,
268- UINT (std::min (cursorRect.bottom , viewportRect.bottom ) + drawOffset.y ),
269- 1
270- };
271- d3dDC-> CopySubresourceRegion (
272- _tempCursorTexture. get (),
273- 0 ,
274- UINT ( std::max ( 0l , viewportRect. left - cursorRect. left )) ,
275- UINT ( std::max ( 0l , viewportRect. top - cursorRect .left )),
276- 0 ,
277- backBuffer,
278- 0 ,
279- &srcBox
280- );
263+ {
264+ D3D11_BOX srcBox{
265+ UINT (std::max (cursorRect.left , viewportRect.left ) + drawOffset.x ),
266+ UINT ( std::max (cursorRect. top , viewportRect. top ) + drawOffset. y ) ,
267+ 0 ,
268+ UINT (std::min (cursorRect.right , viewportRect.right ) + drawOffset.x ),
269+ UINT ( std::min (cursorRect. bottom , viewportRect. bottom ) + drawOffset. y ),
270+ 1
271+ };
272+ UINT destLeft = UINT ( std::max ( 0l , viewportRect. left - cursorRect. left ));
273+ UINT destTop = UINT ( std::max ( 0l , viewportRect. top - cursorRect. top ));
274+
275+ assert (destLeft + srcBox. right - srcBox .left <= cursorSize. cx );
276+ assert (destTop + srcBox. bottom - srcBox. top <= cursorSize. cy );
277+
278+ d3dDC-> CopySubresourceRegion (_tempCursorTexture. get () ,
279+ 0 , destLeft, destTop, 0 , backBuffer, 0 , &srcBox);
280+ }
281281
282282 if (cursorInfo->type == _CursorType::MaskedColor) {
283283 if (!_maskedCursorPS) {
0 commit comments