現状のライブラリ構成

とりあえず現段階でのまとめとして自作ライブラリを作ります。

継ぎ足し継ぎ足しで醜いコードになってるのでそろそろ一旦整理しとかないとわけがわからなくなりそうです。

まずDirect3Dの初期化等を行うDXClassクラスを作ってみました

// -- dxclass.h --
#pragma once

#include <d3d9.h>
#include <d3dx9.h>

#define FVF_CUSTOM ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1 ) 

// DX3Dの初期化等
class DXClass {
public:
    DXClass ();
    ~DXClass ();
    bool Init(HWND hWnd);
    HRESULT DrawStart();
    void DrawEnd();
    D3DPRESENT_PARAMETERS d3dpp() const;
    IDirect3D9* pd3d() const;
    IDirect3DDevice9* pd3dDevice() const;
private:
    D3DPRESENT_PARAMETERS m_d3dpp;
    IDirect3D9* m_pd3d;
    IDirect3DDevice9* m_pd3dDevice;
    DWORD m_time;
};

こんな感じですね。

ゲームのメイン処理を行うクラスはGameMainクラスで実装します。とりあえず現状は以下のような感じになっています。

// -- gamemain.h --
#pragma once

#include "dxclass.h"

class GameMain {
private:
    DXClass* m_dxc;
    DWORD m_time;
public:
    GameMain();
    ~GameMain();
    bool Init(DXClass* dxc);
    void MainLoop();
    void Update();
    void Draw();
};
// -- gamemain.cpp --
#include <windows.h>
#include <mmsystem.h>
#include <ctime>
#include "gamemain.h"

GameMain::GameMain() {
    srand( static_cast<unsigned int>(time(NULL)) );
    timeBeginPeriod(1);
    m_dxc = NULL;
}

bool GameMain::Init (DXClass* dxc) {
    m_dxc = dxc;
    return true;
}

void GameMain::MainLoop() {
    m_time = timeGetTime();

    Update();
    if ( SUCCEEDED(m_dxc->DrawStart()) ) {
        Draw();
        m_dxc->DrawEnd();
    }

    while (m_time + 16.6f > timeGetTime()) Sleep(1);
}

void GameMain::Update () {}
void GameMain::Draw () {}
GameMain::~GameMain() {}

あと描画周りの処理(DrawPrimitive等)をどうするかまだ考え中です。