C# DirectX编程设置全屏和PresentParameters参数

见此;

https://blog.csdn.net/bcbobo21cn/article/details/44890937

D3D初始化时首先设置了PresentParameters参数;暂时没有此参数的C#参考;参阅C++相关定义看一下;

此参数,定义后台缓存表面的参数(包括深度模板缓存是否定义和像素格式);在C++中是一个结构体;

typedef structD3DPRESENT_PARAMETERS {
  UINT                BackBufferWidth; // 窗口模式可以为0,全屏模式是EnumAdapterModes的一个返回值
  UINT                BackBufferHeight;//同上
  D3DFORMAT  BackBufferFormat;//窗口模式可用D3DFMT_UNKNOWN,全屏模式是CheckDeviceType的返回值
  UINT                BackBufferCount;//赋值0将是1,D3DSWAPEFFECT_COPY交换表现只能是一个后台缓存,一般为1
  D3DMULTISAMPLE_TYPE      MultiSampleType;// D3DWAPEFFECT_DISCARD下才能用多重采样,否则都是D3DMULTSAMPLE_NONE
  DWORD               MultiSampleQuality;//要用CheckDeviceMultiSampleType,值[0,CheckDeviceMultiSampleType-1]
  D3DSWAPEFFECT        SwapEffect;// D3DSWAPEFFECT_COPY只能在后台缓存个数是1,一般用D3DSWAPEFFECT__DISCARD
  HWND                hDeviceWindow;//窗口模式下可以为NULL,全屏模式下是CreateDevice的hFocusWindow
  BOOL                Windowed;//窗口模式,还是全屏模式
  BOOL                EnableAutoDepthStencil;// depth-stencil Buffer会自动设置为渲染目标,reset时自动重新创建
  D3DFORMAT           AutoDepthStencilFormat;//CheckDepthStencilMatch的返回值
  DWORD               Flags;//一般用D3DPRESENTFLAG__DISCARD_DEPTHSTENCIL
  UINT                FullScreen_RefreshRateInHz;// FPS,窗口模式下必须为0(会添加),全屏模式是EnumAdapterModes返回值
  UINT                PresentationInterval;//一般用D3DPRESENT_INTERVAL_DEFAULT也就是D3DPRESENT_INTERVAL_ONE
} D3DPRESENT_PARAMETERS,*LPD3DPRESENT_PARAMETERS;

按参数的定义,如果 presentParams.Windowed = true 则运行在窗口模式,如果为false则运行在全屏模式;改为false看一下;

    提示出错的语句是,

    device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);

看上去这句也没什么可以改动的;如果把第三个参数改为null也是一样的错;

如果还是 presentParams.Windowed = true,并设置窗体的属性为如下,

    把TopMost设成true 
    把FormBorderStyle设成none 
    把WindowsState设Maximized 

则窗体会显示为全屏;但可能还是有问题,下回再看;

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页