限制DirectX上的绘图区域

时间:2012-11-08 21:03:35

标签: graphics directx direct2d

我正在使用Direct2D绘制自定义图表。该图表在图表的侧面绘有x和y轴标签。当我垂直缩放图表时,一些数据将被绘制在x轴标签的顶部,我希望始终保持轴标签的清洁。将绘画区域限制为自定义矩形的最佳方法是什么,而不是整个控件?

我有几个想法,但我不确定是否有更好的方法来做到这一点:

方法1)

在一个面板上绘制GDI样式并绘制图表区域,在另一个面板上绘制轴标签。这种方式,当我绘制到图表面板时,我无法弄乱轴标签。问题是我必须制作更多的Direct2D对象(至少为每个控件(hWnd)渲染目标),如果我这样做,我不确定性能影响。

方法2)

每次更新轴标签时都会将轴标签复制到位图,然后在图表面板命令之后将这些位图绘制在控件之上。这比方法1便宜吗?

方法3)

在每次绘图操作中手动检查像素位置,然后在必要时进行修改。这似乎是最糟糕的选择。

编辑:

方法4)

与方法1相同)但使用GDI +绘制轴标签并仅将Direct2D用于图表。

方法5)

使用ID2DLayer。我刚从MSDN Documentation找到了此功能。这似乎是我正在寻找的东西,但它伴随着频繁使用的性能影响而出现了很多警告。

您的意见?

1 个答案:

答案 0 :(得分:1)

你可以使用轴对齐的剪辑,它不那么饿了。

to push

to pop

来自msdn的样本:

pRT->PushAxisAlignedClip(
D2D1::RectF(20, 20, 100, 100),
D2D1_ANTIALIAS_MODE_PER_PRIMITIVE
);

pRT->FillRectangle(D2D1::RectF(0, 0, 200, 133), m_pOriginalBitmapBrush);
pRT->PopAxisAlignedClip();