gpt4 book ai didi

c# - SlimDX9 - Device.Reset 与 RenderToSurface

转载 作者:太空宇宙 更新时间:2023-11-03 13:49:23 26 4
gpt4 key购买 nike

我有一个具体的问题。

我一直在尝试在调整窗口大小以更改分辨率后重置 SlimDX9 设备。一切都在 Pool.Managed 中,没有字体,没有状态 block ,一切正常,但纹理+表面+RenderToSurface 组合。我需要纹理作为着色器的 renderTarget,用于稍后的后处理,所以我需要它调整大小以适应客户端大小以及后台缓冲区。

我确实是这样创建组合的:

rtTexture = new Texture(this.Device, this.owner.ClientSize.Width, this.owner.ClientSize.Height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default);
rtSurface = rtTexture.GetSurfaceLevel(0);
rtHelper = new RenderToSurface(this.Device, this.owner.ClientSize.Width, this.owner.ClientSize.Height, Format.A8R8G8B8, Format.D24S8);

当窗口调整大小时,我做

rtTexture.Dispose();
rtSurface.Dispose();

我都试过了

rtHelper.OnLostDevice();

rtHelper.Dispose();

当然,在 Device.Reset(getParameters()) 之后,我重新创建资源/调用 rtHelper.OnResetDevice(),两者都不起作用。我尝试了 Dispose() 和 OnDeviceLost() 的所有可能组合。

在不成功的重置和通常的 InvalidCall 之后,我收到了这条消息

All user created D3DPOOL_DEFAULT surfaces must be freed before ResetEx can succeed. ResetEx Fails.

所以我对应用程序进行了 PIX 处理,发现纹理和表面都没有被处置(销毁的列中有“从不”),尽管事实上,.Dispose() 在这些对象和 IsDisposed 上都被显式调用在 Device.Reset() 之前为真。

删除组合可以使重置正常进行。问题出在 RenderToSurface 重置和/或纹理+表面的某处。

我像这样使用 RenderToSurface:

rtHelper.BeginScene(rtSurface, new Viewport(0, 0, this.owner.ClientSize.Width, this.owner.ClientSize.Height));
{
Device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, FogColor, 1, 0);
terrainEffect.BeginPass(0);
RenderTiles();
terrainEffect.EndPass();
}
rtHelper.EndScene(Filter.None);

有可能吗?它是 SlimDX 中的错误吗?我能做些什么?我能否以某种方式访问​​非托管资源并手动销毁它们?

请帮忙,我不知道下一步该怎么做。如果对此有任何回应,我将不胜感激。谢谢。

编辑:我尝试绕过 RenderToSurface 并使用 Device.get/setRenderTarget() 并且问题仍然存在,表面和纹理在设备.重置()。

最佳答案

我想通了!对于遇到同样问题的任何人:

如果您使用在一个着色器 channel 中创建的纹理,将其分配给着色器并在第二个 channel 中使用它,请确保在使用它之后设置纹理(在 Device.Present() 之前) >) 到 null。像这样:

terrainEffect.SetTexture(hRTTexture, null);

其中 hRTTexture 是纹理的处理程序。似乎着色器锁定了纹理,如果着色器上有此锁定,SlimDX 无法处理此类纹理(和关联的表面)。

希望这对某人有帮助。

关于c# - SlimDX9 - Device.Reset 与 RenderToSurface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14142379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com