现在我已经到哪了? 读书时,尤其是技术知识书籍, 我一般会担忧自己是否陷得太深, 细节关注得太多, 而忘了整体的过程; 一直以来对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 <Windows.h> #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 还有很多地方需要进行优化, 但考虑到自己是 刚学, 尽量还是不要钻太深, 先将过程走完先, 对整体有个把握.)