Directx 链接Direct2D效果

Directx 链接Direct2D效果,directx,directx-11,direct2d,Directx,Directx 11,Direct2d,我创建了一个简单的Direct2D,它可以翻转传入的图像(可以水平或垂直翻转,也可以同时翻转)。自定义效果似乎很好。当我尝试将效果的两个实例一个接一个地链接起来时,问题就出现了: ID2D1Effect *flip1; // initialized ID2D1Effect *flip2; // initialized ID2D1Bitmap1 *bmp; // initialized flip1->SetInput(0, bmp); flip2->SetInputEffect

我创建了一个简单的Direct2D,它可以翻转传入的图像(可以水平或垂直翻转,也可以同时翻转)。自定义效果似乎很好。当我尝试将效果的两个实例一个接一个地链接起来时,问题就出现了:

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
的目标颜色取决于不同位置的原始像素),因此第二个翻转效果会尝试访问第一个翻转的输出像素,而第一个翻转尚未就绪


这个假设有意义吗?有办法避免吗?我总是在不同的目标位图上渲染每个效果,但我认为这比简单地将效果链接在一起需要更长的时间。

在init:effect1->SetInput(0,inputImage)期间尝试此操作;ID2D1Image*effect1Output=0;effect1->GetOutput(&effect1Output);效应2->设置输入(0,效应1输出);谢谢你的想法,但这没有帮助,我仍然得到同样的问题。此外,对于内置效果,使用
SetInputEffect
链接可以正常工作,无需额外工作,因此我假设它是在效果本身的实现中实现的;ID2D1Image*effect1Output=0;effect1->GetOutput(&effect1Output);效应2->设置输入(0,效应1输出);谢谢你的想法,但这没有帮助,我仍然得到同样的问题。而且,对于内置的效果,使用
SetInputEffect
链接可以正常工作,而不需要额外的工作,因此我认为这是效果本身的实现。