DirectX11--ComPtr智能指针
原文:
DirectX11--ComPtr智能指针
综述DirectX11 With Windows SDK完整目录 欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报。 IUnknown接口类DirectX11的API是由一系列的COM组件来管理的,这些前缀带I的接口类最终都继承自
在实际的使用情况来看,通常我们几乎不会使用第一个方法。而用的最多的就是第三个方法了,每次用完该实例后,我们必须要使用类似下面的宏来释放: #define ReleaseCOM(x) { if(x){ x->Release(); x = nullptr; } } 而且如果出现了忘记释放某个接口指针的情况话,内存泄漏的提醒就有可能够你去调试一整天了。 ComPtr智能指针为了解决上述问题,从繁杂的人工释放中解脱,在本教程中大量使用了 使用该智能指针需要包含头文件 首先有五个比较常用的方法需要了解一下:
然后是一些运算符重载的方法:
个人建议,在使用该智能指针后就应该要避免使用 虽然替换成 下面的 class D3DApp { public: D3DApp(HINSTANCE hInstance); // 在构造函数的初始化列表应当设置好初始参数 virtual ~D3DApp(); HINSTANCE AppInst()const; // 获取应用实例的句柄 HWND MainWnd()const; // 获取主窗口句柄 float AspectRatio()const; // 获取屏幕宽高比 int Run(); // 运行程序,进行游戏主循环 // 框架方法。客户派生类需要重载这些方法以实现特定的应用需求 virtual bool Init(); // 该父类方法需要初始化窗口和Direct3D部分 virtual void OnResize(); // 该父类方法需要在窗口大小变动的时候调用 virtual void UpdateScene(float dt) = 0; // 子类需要实现该方法,完成每一帧的更新 virtual void DrawScene() = 0; // 子类需要实现该方法,完成每一帧的绘制 virtual LRESULT MsgProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam); // 窗口的消息回调函数 protected: bool InitMainWindow(); // 窗口初始化 bool InitDirect3D(); // Direct3D初始化 void CalculateFrameStats(); // 计算每秒帧数并在窗口显示 protected: HINSTANCE m_hAppInst; // 应用实例句柄 HWND m_hMainWnd; // 主窗口句柄 bool m_AppPaused; // 应用是否暂停 bool m_Minimized; // 应用是否最小化 bool m_Maximized; // 应用是否最大化 bool m_Resizing; // 窗口大小是否变化 bool m_Enable4xMsaa; // 是否开启4倍多重采样 UINT m_4xMsaaQuality; // MSAA支持的质量等级 GameTimer m_Timer; // 计时器 // 使用模板别名(C++11)简化类型名 template <class T> using ComPtr = Microsoft::WRL::ComPtr<T>; // Direct3D 11 ComPtr<ID3D11Device> m_pd3dDevice; // D3D11设备 ComPtr<ID3D11DeviceContext> m_pd3dImmediateContext; // D3D11设备上下文 ComPtr<IDXGISwapChain> m_pSwapChain; // D3D11交换链 // Direct3D 11.1 ComPtr<ID3D11Device1> m_pd3dDevice1; // D3D11.1设备 ComPtr<ID3D11DeviceContext1> m_pd3dImmediateContext1; // D3D11.1设备上下文 ComPtr<IDXGISwapChain1> m_pSwapChain1; // D3D11.1交换链 // 常用资源 ComPtr<ID3D11Texture2D> m_pDepthStencilBuffer; // 深度模板缓冲区 ComPtr<ID3D11RenderTargetView> m_pRenderTargetView; // 渲染目标视图 ComPtr<ID3D11DepthStencilView> m_pDepthStencilView; // 深度模板视图 D3D11_VIEWPORT m_ScreenViewport; // 视口 // 派生类应该在构造函数设置好这些自定义的初始参数 std::wstring m_MainWndCaption; // 主窗口标题 int m_ClientWidth; // 视口宽度 int m_ClientHeight; // 视口高度 }; DirectX11 With Windows SDK完整目录 欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows-server-2008-r2 – 服务器管理器2012
- windows-server-2012-r2 – Office 365 MFA ActiveSync免除
- windows – 有没有办法告诉机器在安全组中的持续时间?
- 是否有可用于Windows的Unicode字体,与Arial Unicode MS一样
- Windows命令行相当于Linux中的“时间”?
- windows-phone-7 – 在主机上使用无线适配器时无法将Window
- windows-xp – VS2012 ClickOnce应用程序无法在Windows XP上
- 如何在窗口外单击鼠标关闭Vaadin子窗口?
- windows – 基于Microsoft补丁发布周期的计划任务
- scheduled-task – 错误0xE0434F4D为Windows计划任务的“上