Visual Debugger

하복에서는 실시간으로 디버깅 할 수 있도록 비쥬얼 디버거를 지원한다.

비쥬얼 디버거는   hk2010_2_0_r1\Tools\VisualDebugger 폴더의 hkVisualDebugger.exe를 실행후 하복 관련 프로그램을 실행한다.

실행하면 hkVisualDebugger.exe에 아무것도 보이지 않을 것이다. 박스가 움직이는 상태를 볼려면 코드가 추가 되어야 한다. 코드는 생성, 업데이트, 소멸 순서로 설명한다.

1. 생성  : InitVisualDebuger( )

void InitVisualDebuger()

{

    hkpWorld* physicsWorld = g_world;

    hkArray<hkProcessContext*>& contexts = g_contexts;

 

    hkpPhysicsContext* context;

    {

        physicsWorld->markForWrite();

 

        context = new  hkpPhysicsContext();

        hkpPhysicsContext::registerAllPhysicsProcesses(); // all the physics viewers

        context->addWorld( physicsWorld ); // add the physics world so the viewers can see it

        contexts.pushBack(context);

 

        physicsWorld->unmarkForWrite();

    }

 

    hkVisualDebugger* vdb = new  hkVisualDebugger(contexts);

    vdb->serve();

    g_vdb = vdb;

}

비쥬얼 디버거를 사용하기 위해서는 두 개의 변수를 생성한다.
g_contexts::addWorld( )에 physicsWorld를 추가한다.

hkVisualDebugger*   g_vdb = NULL;
hkArray<hkProcessContext*> g_contexts;

2. 업데이트

void UpdateVisualDebuger()

{

    hkVisualDebugger* vdb = g_vdb;

 

    if( g_threadPool )

    {

        int nSize = g_contexts.getSize();

        for( int n = 0; n < nSize; ++n )

        {

            hkpPhysicsContext* context = (hkpPhysicsContext*)g_contexts[n];

            context->syncTimers( g_threadPool );

        }

    }

    g_contexts.clearAndDeallocate();

    vdb->step();

}

vdb->step( )으로 비쥬얼 디버거를 업데이트 한다.

3. 소멸

void UnInitVisualDebuger()

{

    g_world->lock();

    hkArray<hkProcessContext*>& contexts = g_contexts;

    hkVisualDebugger* vdb = g_vdb;

 

    vdb->shutdown();

    vdb->removeReference();

    vdb = HK_NULL;

 

    int nSize = contexts.getSize();

    for( int n = 0; n < nSize; ++n )

    {

        hkpPhysicsContext* context = (hkpPhysicsContext*)contexts[n];

        context->removeReference();

    }

    g_world->unlock();

}

g_vdb, g_contexts 두 변수를 제거한다.

프로젝트 : havok_vdb.zip