【发布时间】:2012-08-10 02:46:34
【问题描述】:
我正在使用 direct3d 来渲染 yuv 视频数据。基本流程是:
使用 CreateOffscreenPlain 创建一个 yv12 表面 lockrectangle 在这个表面上获取数据指针,将 yuv 数据复制到它。 从这个表面拉伸矩形到后台缓冲区 调用 present 来显示后台缓冲区。
在 LockRectangle 调用中有一个 LockFlags 参数,我们一直在使用 LockFlags.Discard,这听起来意味着我们将覆盖整个缓冲区。
这似乎会在某些英特尔板载图形设备上引起一些问题(目前有例外),而如果我将 LockFlags 更改为 LockFlags.None,问题似乎就消失了。我这样做是否创造了竞争条件?
我想我可能需要了解这里锁定的必要性。显示器是 32 位 rgb,所以我猜 yuv 到 rgb 的转换是在stretchrectangle 调用中完成的。这个过程是同步的还是异步的?我想我已经读过 present 是异步的,但这对我来说并不重要,因为这是对后缓冲区的操作,我不直接接触。
如果问题没有意义,请道歉,我认为到目前为止我还没有很好地处理这个问题。
【问题讨论】: