Graphics 为什么Direct2D中的FillGeometry(带缠绕和大坐标)填充不正确

Graphics 为什么Direct2D中的FillGeometry(带缠绕和大坐标)填充不正确,graphics,mfc,direct2d,Graphics,Mfc,Direct2d,我有一个使用Direct2D绘制的MFC程序。 下面是使用FillGeometry填充三角形的draw方法的一个非常简单的版本 //AFX\u WM\u DRAW2D事件处理程序 afx_msg LRESULT CChildView::OnDraw2d(WPARAM WPARAM,LPARAM LPARAM) { CHwndRenderTarget*pclRenderTarget=(CHwndRenderTarget*)LPRAM; ASSERT_VALID(pclRenderTarget);

我有一个使用Direct2D绘制的MFC程序。
下面是使用FillGeometry填充三角形的draw方法的一个非常简单的版本

//AFX\u WM\u DRAW2D事件处理程序
afx_msg LRESULT CChildView::OnDraw2d(WPARAM WPARAM,LPARAM LPARAM)
{
CHwndRenderTarget*pclRenderTarget=(CHwndRenderTarget*)LPRAM;
ASSERT_VALID(pclRenderTarget);
//清除窗口背景
pclRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::Red));
常量浮点fZoom=0.2f;
常量浮动偏移量=50000000;
pclRenderTarget->SetTransform(D2D1::Matrix3x2F::Translation(D2D1::Size(-fOffset,-fOffset))*D2D1::Matrix3x2F::Scale(fZoom,fZoom));
CD2DPathGeometry clPath(pclRenderTarget);
创建(pclRenderTarget);
ID2D1GeometrySink*pclSink=clPath.Open();
pclSink->SetFillMode(D2D1填充模式绕组);
pclSink->BeginFigure(D2D1::Point2F(偏移量+100,偏移量+100),D2D1\u图形\u开始\u填充);
pclSink->AddLine(D2D1::Point2F(偏移量+100,偏移量+10000));
pclSink->AddLine(D2D1::Point2F(偏移量+10000,偏移量+100));
pclSink->EndFigure(D2D1\u FIGURE\u END\u关闭);
pclSink->Close();
pclRenderTarget->FillGeometry(&clPath,m_pBlueBrush);
返回TRUE;
}
当我运行程序时,它看起来是这样的。

如图所示,三角形有一些红色的水平线和垂直线,不应该在那里。
我发现,如果我移除D2D1填充模式,三角形将被填充,没有任何预期的线条。
我还发现,如果减小偏移量,线条会变细并最终消失。
我已在不同的计算机上试用过该程序。

行显示在
*带Nvidia GeForce GTX 1050 Ti的Windows 10(1803)
*配备AMD Radeon R9 370的Windows 10(1803)
*配备Nvidia Quadro P400的Windows 10(1709)
*带英特尔高清5500的Windows 10(1803)

行不显示在
*配备AMD FirePro2270的Windows 10(1803)
*带AMD Radeon 8790M/Intel的Windows 7
*VirualBox中的Windows 10(1803)

但我找不到任何行为模式。

有人能解释一下这里可能发生了什么吗?

首先,我认为这可能是一个驱动程序错误,但由于我在不同的图形卡上看到它,我不愿意接受这一点。

更新
这是我在Visual Studio图形分析器中获得的输出。
这些线显示在第一次绘制中。

胡乱猜测:
50000000
对于
浮点值来说可能太大。试着使用更小的比例和精确的点。我试着看这些线是否与可以用浮点表示的值对齐,但事实并非如此。浮点数可以存储值50000100.0、50000104.0、50000108.0、50000112.0等。因此,如果是这种情况,应该有更多的行。您启用了吗?也许它产生的信息提供了有用的提示。在公开Direct2D代码转换到的Direct3D调用方面,可能也被证明是很有见地的。发出的网格看起来像什么(可以使用图形调试器进行检查)?我不确定“发出的网格”到底是什么,但在图形调试器中,我可以在GPU工作视图中看到ID3D11DeviceContext->Draw(6,0)。当我选择渲染目标显示线的第一个符号时。