现在我已经到哪了? 读书时,尤其是技术知识书籍, 我一般会担忧自己是否陷得太深, 细节关注得太多, 而忘了整体的过程; 一直以来对Direct3D 很畏惧, 因为太多函数和细节;现在我必须暂缓下, 看看自己已经做了什么, 还差什么, 下一步要如何规划。如下图:
已经仅仅完成了定义 "能够自动进行初始化工作的" 基类, 但是没能够 使用, 需要用子类实现 update(float) 和 render() :
-- BlankDemo.h
#ifndef _BLANK_DEMO_H_ #define _BLANK_DEMO_H_ #include "Dx11DemoBase.h" class BlankDemo : public Dx11DemoBase { public: BlankDemo(); virtual ~BlankDemo(); bool LoadContent(); void UnloadContent(); void Update( float dt); void Render(); }; #endif
-- BlankDemo.cpp
#include "BlankDemo.h" BlankDemo::BlankDemo() { } BlankDemo::~BlankDemo() { } bool BlankDemo::LoadContent() { return true; } void BlankDemo::UnloadContent() { } void BlankDemo::Update( float dt) { } void BlankDemo::Render() { if( d3dContext_ == 0) return ; float clearColor[ 4] = { 0.0f, 0.0f, 0.25f, 1.0f }; d3dContext_->ClearRenderTargetView( backBufferTarget_, clearColor); swapChain_->Present( 0, 0); }
主要在 BlankDemo::Render() 内进行 清屏 和 显示.
到目前为止,共完成了两件事,
第一 Windows 编程, 提供了简易 封装: 《Windows 窗体简易封装类 【已实现】【附带源码】》
第二 提供了 DirectX11 的 简易框架: 《Dx11DemoBase 基类(一)》《Dx11DemoBase 基类(二) 初始化 DirectX11 的 4个基本步骤》
下面将这两部分柔和, 使DirectX11 编程变得简易, 大致测试demo 将如:
#include#include "evlWin.h" //windows 窗口封装 #include "BlankDemo.h" //DirectX11 封装 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE prevInstance, PSTR cmdLine, int cmdShow) { // 创建窗体 EvlWin *eWin = new EvlWin( hInstance, prevInstance, cmdLine, cmdShow, NULL, NULL); // 显示窗体 eWin->show(); // DirectX11 处理对象 Dx11DemoBase *demo = new BlankDemo(); // DirectX11 相关初始化 bool result = demo->Initialize( hInstance, eWin->m_hwnd); if( result == false) return -1; //不使用 eWin 事件循环 //eWin->loopMessage(); // 重写 windows 事件循环, 融入 DirectX11 MSG msg; while( TRUE ) { if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE)) { if( msg.message == WM_QUIT) break; TranslateMessage( &msg); DispatchMessage( &msg); }else{ demo->Update( 0.0f); demo->Render(); } } // 释放资源 demo->Shutdown(); delete demo; demo = NULL; return static_cast< int>( 0); }
这是 源代码 : test_BlankDemo.rar, 包含 :
Dx11DemoBase.cpp/.h DirectX11基类 BlankDemo.cpp/.h 测试Dx11DemoBase 的子类 evlWin.cpp/.h windows窗体处理封装类 test_BlankDemo.cpp 主入口
最终效果就是显示一个 窗体( 相当 简陋, 此版本的demo 还有很多地方需要进行优化, 但考虑到自己是 刚学, 尽量还是不要钻太深, 先将过程走完先, 对整体有个把握.)