我创建了一个简单的Direct2D Effect,它可以翻转输入的图像(可以水平或垂直翻转,也可以同时翻转)。自定义效果似乎工作正常。当我尝试一个接一个地链接两个效果实例时,问题就出现了:
ID2D1Effect *flip1; // initialized
ID2D1Effect *flip2; // initialized
ID2D1Bitmap1 *bmp; // initialized
flip1->SetInput(0, bmp);
flip2->SetInputEffect(0, flip1);
// ...
ID2D1DeviceContext *pContext; // initialized
pContext->BeginDraw();
pContext->DrawImage(flip2);
pContext->EndDraw();
结果我有时会得到一个“垃圾”图像作为输出。我注意到,只要第二翻转配置为保持图像不变,此链就可以工作了。当第二次翻转修改图像时,我得到目标图像的全部或部分“被涂抹”。
我的怀疑是,由于翻转效果使用复杂的采样(像素xy
的目标颜色取决于不同位置的原始像素),不知何故第二次翻转效果试图访问第一次翻转的输出像素,尚未准备好。
这个假设有意义吗?有没有办法避免它?我总是在不同的目标Bitmap上渲染每个效果的后备,但我认为这比将这些效果链接在一起需要更长的时间。