DirectX11 的初始化(1) 基本参数函数
来源:互联网 发布:dos攻击软件 编辑:程序博客网 时间:2024/06/03 19:09
为了准备DirectX11,我们需要完成以下步骤
(1)定义我们想检查的设备类型和层级
(2)创建设备, 渲染环境和交换链
(3)创建渲染对象
(4)设置视口观察区
我们定义了一个驱动类型和特性级别的表:
通过循环去选取最合适的类型和级别
RECT dimensions;GetClientRect(hWnd, &dimensions); //获取客户端大小 用于指标判断unsigned int Width = dimensions.right - dimensions.left;unsigned int height = dimensions.bottom - dimensions.top;D3D_DRIVER_TYPE driverTypes[] = { //四种驱动类型,选择最合适的驱动类型D3D_DRIVER_TYPE_HARDWARE, D3D_DRIVER_TYPE_WARP,D3D_DRIVER_TYPE_REFERENCE, D3D_DRIVER_TYPE_SOFTWARE};unsigned int totalDriverTypes = ARRAYSIZE(driverTypes); //得出类型数D3D_FEATURE_LEVEL featureLeverls[] = { //三种版本依赖 迭代选择最合适的版本依赖D3D_FEATURE_LEVEL_11_0,D3D_FEATURE_LEVEL_10_1,D3D_FEATURE_LEVEL_10_0};unsigned int totalFeatureLevels = ARRAYSIZE(featureLeverls); //得出版本数
设备交换链的创建:
Direct3D中的交换链是设备中的渲染目标的集合
每个设备至少有一个交换链,而多个交换链能够被多个设备创建.一个渲染目标可以有一个已经渲染好显示在屏幕的颜色缓存,一个深度缓存,一个模板缓存等
游戏中有两种颜色缓存,主缓存和辅助缓存: 就是所谓的前向缓存和后向缓存,主缓存是显示在屏幕上的,辅助缓存被用于下一帧的绘制
游戏中切换缓存,一个用于写入,一个用于显示输出
对象:DXGI_SWAP_CHAIN_DESC swapChainDesc;
ZeroMemory(&swapChainDesc, sizeof(swapChainDesc));swapChainDesc.BufferCount = 1; //缓存页的数量swapChainDesc.BufferDesc.Width = Width; //宽度swapChainDesc.BufferDesc.Height = Height; //高度swapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; //缓存格式swapChainDesc.BufferDesc.RefreshRate.Numerator = 60; //刷新率swapChainDesc.BufferDesc.RefreshRate.Denominator = 1; //使用60/1表示60Hz的刷新率swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; //交换链中的缓存用法,能够用于输出以及渲染swapChainDesc.OutputWindow = hwnd; //窗口句柄swapChainDesc.Windowed = true; //是全屏还是原来的尺寸resize?swapChainDesc.SampleDesc.Count = 1; //取样描述:数量swapChainDesc.SampleDesc.Quality = 0; //取样描述:质量
创建渲染环境 设备和交换链:
Direct3D设备是一种用于自身与硬件通信的设备, Direct3D渲染环境一种告诉设备怎样绘制渲染环境 包换渲染状态和其他绘制信息.
Direct3D设备类:ID3D11Device
渲染环境类型:ID3D11DeviceContext
交换链类型:IDXGISwapChain
用于创建的函数名:
D3D11CreateDeviceAndSwapChain:
D3D11_CREATE_DEVICE_DEBUG:创建可供调试的设备
参数设置如下:
视频适配器的指针
我们希望创建的驱动设备类型
实现软件渲染设备的动态库句柄
创建标志
我们所希望创建的特征级别
特征级别数组中的特征数量
#ifndef _DEBUGcreationFlags |= D3D11_CREATE_DEVICE_DEBUG;#endif for (unsigned int driver = 0; driver < totalDriverTypes; ++driver) {result = D3D11CreateDeviceAndSwapChain(0, driverTypes[driver], 0, creationFlags, featureLeverls, totalFeatureLevels, D3D11_SDK_VERSION, &swapChainDesc, &swapChain_,&d3dDevice_, &featureLevel_, &d3dContext_); if (SUCCEEDED(result)) {driverType_ = driverTypes[driver];break;}}if (FAILED(result)){DXTRACE_MSG("Failed to create the Direct3D device!");return false;} //创建渲染目标视图ID3D11Texture2D* backBufferTexture;result = swapChain_->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&backBufferTexture);if (FAILED(result)) {DXTRACE_MSG("Failed to get the swap chain back buffer");return false;}}
渲染目标视图: 是写入联合输出阶段的一种Direct3D资源
交换链中的主缓存和辅助缓存其实是一种颜色贴图
可以通过函数GetBuffer来获得它的指针
swapChain_->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&backBufferTexture);
//创建渲染目标视图result = d3dDevice_->CreateRenderTargetView(backBufferTexture, 0, &backBufferTarget_); //贴图名,渲染目标描述,贴图地址//释放贴图if (backBufferTexture) {backBufferTexture->Release(); //释放内容}if (FAILED(result)) {DXTRACE_MSG("FAILED TO Create the render target view!!");return false;}
viewport.Width = static_cast<float>(Width);viewport.Height = static_cast<float>(height);viewport.MinDepth = 0.0f;viewport.MaxDepth = 1.0f;viewport.TopLeftX = 0.0f;viewport.TopLeftY = 0.0f;d3dContext_->RSSetViewports(1, &viewport);
RSSetViewports函数来设置它作为渲染环境:该函数参数有我们设置的视口数量和视口对象列表
参数:如果同步区间是0表示立即绘制, 1,2,3,4表示在第n个垂直消音之后绘制
//清楚渲染目标和显示新的渲染场景float clearColor[4] = { 0.0f, 0.0f, 0.25f, 1.0f };d3dContext_->ClearRenderTargetView(backBufferTarget_, clearColor);swapChain_->Present(0, 0);
if (backBufferTarget_)backBufferTarget_->Release();if (swapChain_)swapChain_->Release();if (d3dContext_)d3dContext_->Release();if (d3dDevice_)d3dDevice_->Release();
- DirectX11 的初始化(1) 基本参数函数
- Directx11 初始化
- DirectX11 基本初始化流程
- DirectX11 Direct3D初始化
- C++Directx11开发笔记二:Direct3D基础设备的初始化
- DirectX11笔记(二)--Direct3D初始化1之基本概念
- AJAX的基本参数
- 变频器基本参数的调试
- mencoder使用的基本参数
- vim的基本参数配置
- 工业镜头的基本参数
- 串口通信的基本参数
- tcpdump的基本参数说明
- View的基本参数
- 数组的基本参数
- 天线的基本参数介绍
- 获取系统的基本参数
- Memcached的基本参数
- 三、Spring Cloud系列:通过消息队列传输zipkin日志
- iOS学习笔记-145.网络05——NSURLConnection02_使用相关
- Java 基础巩固 Date 格式化 及 日期计算
- Excel合并计算和分类汇总
- html与servlet用ajax以url传参数乱码问题解决
- DirectX11 的初始化(1) 基本参数函数
- LeetCode27. Remove Element
- HDOJ HDU 2602 Bone Collector
- Leetcode 40. Combination Sum II
- R语言read.xlsx( )函数报错 LoadLibrary failure: %1 不是有效的 Win32 应用程序
- 时间模块和类
- Weakly Supervised Deep Detection Networks 阅读笔记
- 进程与线程
- 你了解泰尔实验室和泰尔认证中心吗?