微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我想将代码更改从DirectX9升级到DirectX11即从SlimDx.Direct3D9升级到SharpDx.Direct3D11

如何解决我想将代码更改从DirectX9升级到DirectX11即从SlimDx.Direct3D9升级到SharpDx.Direct3D11

我是第一次使用DirectX,但发现很难将代码从DirectX9升级到DirectX11。由于从DirectX9到11的大量更改,因此无法在DirectX 11中获得类似的代码

下面是我的SlimDx Direct3D9代码

using SlimDX;
using SlimDX.Direct3D9;

private readonly Device m_Device;
private readonly Direct3D m_Direct3D;
private readonly PresentParameters m_presentParams;
        
//renderer
public Renderer() {
    m_Direct3D = new Direct3D();
    var createFlags = CreateFlags.softwareVertexProcessing | CreateFlags.FpuPreserve;
    var caps = m_Direct3D.GetDeviceCaps(0,DeviceType.Hardware);

     if ((caps.DeviceCaps & DeviceCaps.HWTransformAndLight) != 0) // HW processing supported
     {
         createFlags = CreateFlags.HardwareVertexProcessing | CreateFlags.FpuPreserve;
     }

     m_presentParams = new PresentParameters();
     m_presentParams.BackBufferFormat = Format.A8R8G8B8;
     m_presentParams.BackBufferCount = 1;
     m_presentParams.Multisample = MultisampleType.None;
     m_presentParams.SwapEffect = SwapEffect.Flip;
     m_presentParams.EnableAutoDepthStencil = true;
     m_presentParams.AutoDepthStencilFormat = Format.D16;
     m_presentParams.PresentFlags = PresentFlags.discardDepthStencil;
     m_presentParams.PresentationInterval = PresentInterval.One;
     m_presentParams.Windowed = true;
     m_presentParams.DeviceWindowHandle = handle;

     m_Device = new Device(m_Direct3D,DeviceType.Hardware,handle,createFlags,m_presentParams);
                
    m_Device.Present();
    System.Drawing.Rectangle oldBounds = m_Device.ScissorRect;
}

//begins the scene
public void BeginScene() {
    m_Device.BeginScene();
}
        
//create texture
public Texture CreateTextureFromStream(Stream srcStream) {
    srcStream.Seek(0,SeekOrigin.Begin);
    return Texture.FromStream(m_Device,srcStream,Pool.Managed);
}

//ends the scene
public void EndScene() {
    m_Device.EndScene();
}

/// <summary>
/// Gets the size of the max texture.
/// </summary>
/// <param name="width">The width.</param>
/// <param name="height">The height.</param>
public void GetMaxTextureSize(out int width,out int height) {
    Capabilities c = m_Direct3D.GetDeviceCaps(0,DeviceType.Hardware);
    width = c.MaxTextureHeight;
    height = c.MaxTextureWidth;
}
        
//reset
public bool IsResetrequired() {
    return m_Device.TestCooperativeLevel() == ResultCode.DeviceNotReset;
}
        
//render background
public void RenderBackground() {
    m_Device.VertexFormat = VertexFormat.Position | VertexFormat.Diffuse;
    m_Device.DrawUserPrimitives(PrimitiveType.TriangleList,m_backgroundRectBuffer.Count / 3,m_backgroundRectBuffer.ToArray());
    m_backgroundRectBuffer.Clear();
}
        
//begin
public void RenderBegin() {
    m_Device.Clear(ClearFlags.Target | ClearFlags.ZBuffer,Color.FromArgb(0),1.0f,0);
}

现在,我想转到DirectX11。有人可以帮我吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。