DirectX 9.0中的UpdateSurface问题

flmilan 2008-12-23 11:47:10
小弟最近在写一个图像采集卡显示的窗体控件,想用Managed DX9实现,基本思路是在SystemMemory中创建一个Off-Screen Surface,将图像采集卡的数据重采样至此Surface中,屏幕的刷新则用UpdateSurface将此Surface更新至BackBuffer中。程序通常状况运行正常,但是在DeviceLost事件触发后就有问题了。按照MSDN中的说法,SystemMemory中创建的资源在DeviceLost时是不需要re-create的,但实际调试过程中,发现DeviceLost之后,SystemMemory中的Surface对象内容被清空。请教各位大虾是否遇到同样的问题。部分源代码示意如下:

Device device = null;
PresentParameter present = null;
Surface surfMem = null;
Surface surfBack = null;
bool deviceLost = false;

InitializeGraphic()
{
...
present = new PresentParameter();
surfMem = device.CreateOffScreenPlainSurface(..., Pool.SystemMemory);
// for test, fill data from a bitmap file to the surface in memory
...
device.DeviceLost += new System.EventHandler(this.OnDeviceLost);
device.DeviceReset += new System.EventHandler(this.OnDeviceReset);
}

OnDeviceLost()
{
// do nothing
}

OnDeviceReset()
{
// do nothing
}

AttemptRestroeDevice()
{
try
{
TestCooperativeLevel();
}
catch(DeviceLostException)
{
System.Thread.Sleep(50);
}
catch(DeviceNotResetException)
{
device.Reset();
deviceLost = false;
}
}

Render()
{
if (device == null)
return;

if (deviceLost)
AttemptRestroeDevice();

if (deviceLost)
return;

try
{
device.BeginScene();
surfBack = device.GetBackBuffer();
device.UpdateSurface(surfMem, surfBack);
device.EndScene();
device.Present();
}
catch(DevciceLostException)
{
deviceLost = true;
}
}

调试时监视surfMem对象,发现在进入OnDeviceLost时,其内容均正常,一旦离开OnDeviceLost函数后,其内容全部被清空,难道说SystemMemory中的内容也会被清空?不解!
...全文
444 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangsky2 2012-09-24
  • 打赏
  • 举报
回复
DeviceLost之后要手动恢复Off-Screen Surface中的数据,
参考:http://blog.sina.com.cn/s/blog_53948edf0100qv4x.html
最近也在搞这方面的信息,遇到视频信息显示慢的问题
huhuaqiwen 2009-07-01
  • 打赏
  • 举报
回复
顶!
学习!
xysyzj 2009-06-30
  • 打赏
  • 举报
回复
帮顶,等待高手
stromboy007 2009-06-30
  • 打赏
  • 举报
回复
顶下。等高手
heyu1000 2008-12-23
  • 打赏
  • 举报
回复
太多了,看不下去了,呵呵
帮顶一下

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧