介绍

创建窗口成功之后,就要使用 direct3D 进行绘图,本节主要介绍,如何初始化 direct3D,并通过 direct3D改变窗口颜色。

初始化 direct3D

函数解释

D3D11CreateDevice

通过 D3D11CreateDevice 函数创建设备和上下文,device 主要用于显示是否支持某些特性和分配资源,context 主要用于设置渲染状态、将资源绑定到 pipeline 和 发出渲染命令。需要设置的参数有 使用的电脑上的哪个显卡(现在很多电脑上多有两块显卡,独立显卡和集成显卡),驱动的类型(可能你电脑上没有显卡,也想使用 direct3D,可以使用软件进行模拟,只是速度会慢一点),显卡支持的功能(由于显卡和 directX 功能一直在升级,所以有些老的显卡不支持一些新的功能)。

CreateSwapChain

通过 CreateSwapChain,设置窗口的交换缓存。主要的参数是 缓存的宽、高、格式、缓存的用处(用于渲染目标输出)和渲染目标窗口句柄(指定渲染后的图像显示在哪个窗口)

CreateRenderTargetView

由于创建的资源缓存就行申请的一块 void* 内存,代码不知道如何使用该资源,需要获取该资源的视图,才便于使用。

具体代码

void Graphics::Initialize(HWND hWnd)
{UINT flags = 0;
#ifndef NDEBUGflags |= D3D11_CREATE_DEVICE_DEBUG;
#endif// 1. 创建设备和上下文// device 主要用于显示是否支持某些特性和分配资源// context 主要用于设置渲染状态、将资源绑定到 pipeline 和 发出渲染命令HRESULT hr = D3D11CreateDevice(NULL,                            // 选择显卡, NULL 为默认显卡D3D_DRIVER_TYPE_HARDWARE,        // 驱动类型NULL,                            // 驱动类型选择 软件时,需要设置flags,                         // flagnullptr,                     // 支持哪些功能0,                             // feature 个数D3D11_SDK_VERSION,             // SDK 版本号&m_pDevice,                       // 获取创建的设备NULL,                         // 获取支持的功能&m_pContext);                 // 上下文// 2. 设置 DXGI_SWAP_CHAIN_DESC 实例属性DXGI_SWAP_CHAIN_DESC sd;ZeroMemory(&sd, sizeof(sd));// 缓存设置sd.BufferDesc.Width = 0;        // 缓存宽度,设为0,则 CreateSwapChain 时将该值设为输出窗口的宽度sd.BufferDesc.Height = 0;     // 缓存高度sd.BufferDesc.RefreshRate.Numerator = 0;sd.BufferDesc.RefreshRate.Denominator = 0;sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; // 输出存储格式sd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; // 扫描路线sd.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;  // 缩放// 采样设置sd.SampleDesc.Count = 1;sd.SampleDesc.Quality = 0;sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;      // 缓存的用处sd.BufferCount = 1;                                        // 缓存个数sd.OutputWindow = hWnd;                                 // 渲染目标窗口句柄sd.Windowed = TRUE;                                     // 窗口显示sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;               sd.Flags = 0;// 3. 使用 IDXGIFactory 创建 IDXGISwapChain 实例IDXGIDevice* dxgiDevice = nullptr;IDXGIAdapter* dxgiAdapter = nullptr;IDXGIFactory* dxgiFactory = nullptr;hr = m_pDevice->QueryInterface(__uuidof(IDXGIDevice), (void**)&dxgiDevice);hr = dxgiDevice->GetParent(__uuidof(IDXGIAdapter), (void**)&dxgiAdapter);hr = dxgiAdapter->GetParent(__uuidof(IDXGIFactory), (void**)&dxgiFactory);if(m_pDevice!= nullptr)dxgiFactory->CreateSwapChain(m_pDevice, &sd, &m_pSwapChain);dxgiDevice->Release();dxgiAdapter->Release();dxgiFactory->Release();// 4. 创建渲染目标视图ID3D11Texture2D* backBuffer = nullptr;m_pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast<void**>(&backBuffer));m_pDevice->CreateRenderTargetView(backBuffer, 0, &m_pRenderTargetView);backBuffer->Release();
}

改变窗口颜色

函数解释

ClearRenderTargetView

设置渲染目标视图的背景颜色,正真使用的时候,就是把上一次画的画面擦除掉。

Present

负责将后备缓冲的内容显示在屏幕上

具体代码

void Graphics::ClearBuffer(float red, float green, float blue)
{const FLOAT color[4] = { red, green, blue, 1.0f };// 使用指定颜色清空渲染目标视图m_pContext->ClearRenderTargetView(m_pRenderTargetView, color);
}void Graphics::EndDraw()
{m_pSwapChain->Present(1, 0);
}

参考文献

https://enjoyphysics.cn/Article923

Direct3D 11 总结 —— 3 初始化 direct3D,并改变窗口颜色相关推荐

  1. 保护眼睛(改变窗口颜色和Pdf背景颜色)xp和WIN7方法

    保护眼睛(改变窗口颜色和Pdf背景颜色)附WIN7方法 保护眼睛(改变窗口颜色和Pdf背景颜色) 如果常常用电脑很容易导致眼睛过度疲劳而得干眼症,所以大夫建议电脑屏幕不要用白色,因为白色对眼睛的刺激是 ...

  2. 保护眼睛(改变窗口颜色,网页和Pdf背景颜色)

    保护眼睛(改变窗口颜色,网页和Pdf背景颜色) 自从小Y入手以来,一直天天泡网,这个眼睛基本快杯具了啊. 如果常常用电脑更容易导致眼睛过度疲劳而得干眼症,所以大夫建议电脑屏幕不要用白色,因为白色 对眼 ...

  3. vscode改变窗口颜色

    起因: vscode打开多个(不同机器上的/不同目录下的)同名工程文件时,容易混淆,希望通过窗口颜色加以区分. 解决方法: 更改整体主题颜色(所有窗口都改变)或更改单个窗口颜色,后者更有用. 一.更改 ...

  4. java 改变窗口颜色_java swing 设置窗口背景颜色

    java Swing 设置背景颜色: 由于Swing跟AWT有千丝万缕的联系,它既要支持AWT又要有自己新的体系,所以呢,这个如果对于AWT中的Frame是可以直接通过setBackground来设置 ...

  5. C语言怎么改变窗口颜色,C语言运行窗口颜色.doc

    C语言运行窗口颜色 C语言运行窗口颜色 #include #include int main(void) { int i,j; printf("背景颜色:0:黑.1:蓝.2:绿.3:湖蓝色. ...

  6. Direct3D 11编程总结

    一.Direct3D 11 知识 1. Direct3D 11资源 1.1 Direct3D资源简介 Direct3D 11利用资源来存储输入输出数据.资源分为:几何.纹理.着色数据.资源可以是有类型 ...

  7. Import Changes from Direct3D 11 to Direct3D 12

    译者:林公子 出处:木木的二进制人生 转载请注明作者和出处,谢谢! 这是微软公布的Direct3D 12文档的其中一篇,此翻译留作学习记录备忘,水平有限,错漏难免,还望海涵. 原文链接是https:/ ...

  8. 从 Direct3D 9 到 Direct3D 11 的重要更改

    本主题介绍 DirectX 9 和 DirectX 11 之间更高级别的差异. 从根本上说,Direct3D 11 与 Direct3D 9 是同类型的 API - 一种到图形硬件的低级别虚拟化接口. ...

  9. C语言改变黑色窗口颜色

    大概九月份左右想看看能不能改变窗口颜色(每天看着黑色的实在无趣)就从网上找的一些方法,自己加工整合了一下.最初代码文章实在找不到了! 以下代码均在cfree上成功运行 #include<wind ...

最新文章

  1. 如何使用华为云的计算资源进行深度学习(ModelArts)
  2. 数据库建模工具PowerDesigner的安装与汉化和破解
  3. 从Linus Torvalds一封发飙的电邮开始谈设备树究竟是棵什么树?
  4. Vuejs 条件判断
  5. datax实现mysql数据同步
  6. vhs预设_使用Linux将VHS数字化,创建Bash完成脚本,Ansible,家庭自动化等
  7. canvas绘制渐变
  8. HTTP头域列表与解释 之 request篇
  9. 导出(合并)手机QQ浏览器下载的视频
  10. 手机号正则(2020年4月15日)
  11. Android - xml动画,识别手势动作,代码抽取,获取手机SIM卡串号,获取联系人数据,开机广播,发送/解析短信,报警音乐
  12. 苹果Mac远程控制软件:Screens
  13. 关于cmd输入字符长度限制问题
  14. 报错:‘Concatenate’layer requires inputs with matching shapes expect for the concat axis. 解决思路
  15. 短信验证API文档说明
  16. 解读|TARS开源项目发布Go语言版本 1
  17. Android快速SDK(24)第三方分享UmengShare【肌肉记忆,分钟接入】
  18. NB-IoT技术实战开发 ----- NB-IoT介绍
  19. 博客介绍——warrent
  20. [翻译] TensorRT 中的 Explicit 与 Implicit Batch

热门文章

  1. Python shellcode免杀
  2. spss clementine安装
  3. 步进电机选型(转载)
  4. 常见分布总结-高斯分布、伯努利分布、泊松分布、几何分布、beta分布
  5. 知到网课中国饮食文化单元测试试题答案总结
  6. IIS中FTP登陆用户名密码都对但进不去的另一种原因
  7. 2022-2028全球与中国在线中文学习平台市场现状及未来发展趋势
  8. 简单使用vue拖拽组件vue3-dnd
  9. C语言-用scanf函数输入数组
  10. 经颅聚焦超声信号仿真(MATLAB k-Wave仿真)