如何解决我想将代码更改从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 举报,一经查实,本站将立刻删除。