Dx11DemoBase 基类(三) 实例应用 【已实现】【附带源码】

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

posted @ 2012-11-30 02:19  Wilson-Loo  阅读(523)  评论(0编辑  收藏  举报