我想将代码更改从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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...