dx11学习笔记-1.创建一个空窗口

DX11Win32窗口实现 DX11Win32窗口实现 X_jun师兄的DX11初始化可能涉及到Win32 初始化的方法目前在这里不做过多描述。 对此小萌新的我微微简单说一下,如果有不对的地方,请一定留言斧正!!! 对于Direct3D初始化,博客已经写的很详细了,这里不多说 首先推荐学习(非常详细) Win32 API win32数据类型一览 win32数据类型 下面都是代码了,因为笔记都注释在代码上了。 1、Main.cpp源文件 //可以定义一个_In_的宏,这个宏什么都不做.定义在" no_sal 阅读详情

资料:
Microsoft DirectX SDK (June 2010) source code&document
《DX11游戏编程入门》source code&pdf

基本流程

1、初始化dx环境:

最基本的三个变量

ID3D11Device* g_pd3dDevice = NULL;
ID3D11DeviceContext* g_pImmediateContext = NULL;
IDXGISwapChain* g_pSwapChain = NULL;

In Direct3D 10, the device object was used to perform both rendering and resource creation. In Direct3D 11, the immediate context is used by the application to perform rendering onto a buffer, and the device contains methods to create resources.
也就是说,device负责创建各种资源,context负责渲染。而swapchain管理着渲染的“画布”——缓存。
更进一步解释,device负责着dx和硬件之间的通信,context负责告诉device渲染是怎么个设置,保存着渲染的状态信息,而swapchain可以看做渲染的目标。

缓存:就是存放数据的一块空间,一块具有固定尺寸的内存。比如光栅屏幕缓存其实是个二维数组,每个像素的信息就是缓存中一个元素。所谓渲染到缓存上,其实是用计算得到的颜色值去填充每一个像素。

其他必需变量

ID3D11RenderTargetView* g_pRenderTargetView = NULL;

DX中我们通过调用swapChain的GetBuffer方法来得到其管理的缓存地址,得到缓存地址后,作为参数传入device调用的CreateRenderTargetView方法,创建并保存到g_pRenderTargetView 。我们通过变量获取的缓存指针此时便没有用处了,需要及时调用Release方法将其占用资源释放,否则会发生内存泄露。
此处《DX11游戏编程》的解释为:当我们获得一个COM对象的引用时,该对象的引用数+1,确定该对象不会被再次调用时,需要调用COM对象的Release函数将该对象的引用数-1。当COM对象的引用数为0时,就会被删除。
相关知识可查阅“缓存池”

现在我们有了渲染目标g_pRenderTargetView ,那就需要告诉context这目标是谁。调用context的OMSetRenderTargets方法,传入g_pRenderTargetView 即可关联二者。

接下来,继续为context设置渲染的各个属性。
渲染在什么区域?调用context的RSSetViewports方法。此处viewport设置了渲染视口的长宽、渲染的左上角对应在窗口内屏幕的XY坐标,和需要渲染的最大最小深度。如果XY坐标都设为0,那么渲染视口左上角就与客户区窗口左上角重合。

2、渲染:

context调用ClearRenderTargetView方法来设置用于更新缓存的基本颜色;
swapChain调用Present来重绘。

3、清理:

按照从子对象到父对象的顺序,调用COM对象的Release方法,将其释放。
注意释放前需要检查指针是否存在,如果对不存在的对象指针调用其方法,会产生不可预料的后果。

完整代码

见Microsoft DirectX SDK (June 2010) Tutorial01

//--------------------------------------------------------------------------------------
// File: Tutorial01.cpp
//
// This application demonstrates creating a Direct3D 11 device
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//--------------------------------------------------------------------------------------
#include <windows.h>
#include <d3d11.h>
#include <d3dx11.h>
#include "resource.h"


//--------------------------------------------------------------------------------------
// Global Variables
//--------------------------------------------------------------------------------------
HINSTANCE               g_hInst = NULL;
HWND                    g_hWnd = NULL;
D3D_DRIVER_TYPE         g_driverType = D3D_DRIVER_TYPE_NULL;
D3D_FEATURE_LEVEL       g_featureLevel = D3D_FEATURE_LEVEL_11_0;
ID3D11Device*           g_pd3dDevice = 
dx11学习笔记-2.用DX画一个三角形 这次我们引入了着色器来帮我们画一个三角形 阅读详情

相关推荐

dx11学习笔记-4、用DX画一个旋转的立方体

如何将着色器中会用到的变量值通过程序传入着色器?

Keep Going! 2947

DX11 渲染管线&六边形绘制

DX11 渲染管线&六边形绘制 目录 文章目录DX11 渲染管线&六边形绘制目录题目&要求问题描述&解决整体思路(渲染管线)作业实现分析&代码思考&小结 题目&要求 • 练习:xjun 01/02 DirectX11 初始化的习题 • 真作业:用 DX 画一个等六边形 • 申请github账号,用Git管理以后的作业和周记,并上传仓库到Github(推荐使用vs上传),并且要写进文档中,文 档也是评分内容之一 问题描述&解决 可能存

qq_62090651的博客 1076

DX11hook无窗口绘制纯源码.e

dx11 hook无窗口硬断内部绘制骨骼(更新基址适合所有dx11游戏)

fsQCA实战:从数据校准到结果解读的完整流程(附R代码示例)

本文提供了一份完整的模糊集定性比较分析(fsQCA)实战指南,详细阐述了从数据校准、必要条件分析、真值表构建到布尔最小化与结果解读的全流程。通过R语言代码示例,帮助研究者掌握如何将理论转化为可操作的分析步骤,并产出稳健的中间解,以揭示导致结果的复杂条件组合。

d6e7f8g9h的博客 1168

实用电路精讲系列---双级运放放大电路(差分放大+跟随缓冲)

本文分析了双极运放放大电路的工作原理及其典型应用。该电路结合差分放大器和跟随缓冲器,实现高精度信号放大与阻抗匹配。差分放大器通过放大差模信号并抑制共模噪声提升信噪比;跟随缓冲器则提供阻抗变换,确保信号稳定传输。两者协同工作可优化输入阻抗、增强噪声抑制并提高设计灵活性。文章还列举了10个典型应用案例,包括医疗设备、工业传感器和新能源系统等,展示了该电路在精密电子系统中的关键作用。最后通过实用电路分析,详细说明了各模块功能及设计注意事项。

weixin_40590799的博客 2951

VSAN闪存缓存磁盘故障处理指南-RAID0模式实战解析

本文详细解析了VSAN集群中RAID0模式下的闪存缓存磁盘故障处理全流程。通过模拟真实故障场景,从告警识别、数据重建策略到磁盘组重构,提供了手把手的实战操作指南,并深入探讨了RAID0缓存故障的独特影响与风险,为运维人员应对此类高性能存储架构的突发问题提供了专业解决方案。

assembly8low的博客 444

基于逆向工程的中国裁判文书网爬虫技术深度解析:从反爬破解到合规抓取

最近承接了一个法律大数据分析的项目,需要获取某类合同纠纷的裁判文书数据,用于分析不同地区的判决规律、法官的裁判倾向以及法条适用情况。原本以为用常规的Python爬虫就能搞定,结果刚对着中国裁判文书网发了几个请求,就遭遇了“滑铁卢”:要么请求直接返回403 Forbidden,要么触发滑块验证码,甚至连IP都被临时封禁了。普通的requests+BeautifulSoup组合在裁判文书网面前完全失效,这也让我意识到,想要获取这里的数据,必须先通过逆向工程拆解网站的请求逻辑和反爬机制。经过一周的摸索,从抓包分析

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 3168

使用Python,OpenCV查找图像中的最亮点

这篇博客展示了,为什么在图像中找到最亮的点之前应用高斯模糊是至关重要的。 通过应用高斯模糊,可以将每个给定半径内的像素平均在一起。取平均值可以去除高频噪声,否则会影响cv2.minMaxLoc函数的结果。 一定要研究高斯模糊半径的恰当值。如果取值太小,将会减轻平均值的影响,而忽略了更大、更亮的区域。但是如果半径太大,将无法探测到小的明亮区域。

qq_40985985的博客 3809

YOLOv8 更换损失函数DIoU、EIoU、GIoU...Inner-IoU...

介绍了一些损失函数,并将其应用到yolov8训练中

分享一些自己改进代码的实例 887

Claude code 入门 安装和快速使用

Claude Code 可以理解为一个。你只需要用简单的语言告诉它要做什么,比如「帮我整理这些文件」、「改一下这个程序」、「分析一下这些数据」,它就能理解你的电脑项目,并自动完成很多操作。,比如整理文件、编程、数据分析…等等。使用终端、命令行还是挡住了非常多的朋友,这个时候,有个界面很重要!Claude code、Codex 官方也都推出了插件,安装即可使用。

2401_84052244的博客 1356

Python爬虫实战:股票历史数据抓取与量化回测全流程详解

我们以**东方财富网(eastmoney.com)和雪球网(xueqiu.com)**为主要目标,演示如何爬取A股历史行情。最常用的HTTP请求库,简单易用,适合静态页面数据请求。本文详细介绍了从股票历史数据抓取到简单回测的完整流程,代码示例基于最新技术,结构清晰,适合初学者和进阶者学习量化投资实战。希望对你入门Python爬虫和量化交易有所帮助!

2201_76125261的博客 1778

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: java was started but returned exit code=13的解决方法
下一篇: dx11学习笔记-2.用DX画一个三角形
code_xbug
博客等级 码龄13年 26粉丝 18原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值